使用ansible管理其他主機有兩種方式:
1.命令行執行ansible ad-hoc命令
2.把要做的動作行為寫入一個文件【playbook腳本】,ansible讀取腳本自動完成相應的任務。
Ansible ad-hoc是一種通過命令行批量管理的方式
格式:ansible 主機集合,組名 -m 模塊名 -a "參數" -k
其他參數: -k使用密碼遠程、-i指定主機列表文件
注意事項:
執行ansible命令一定要先cd到ansible目錄
1.查看主機列表
#cd ~/ansible
#ansible all --list-hosts #查看所有主機 all是ansible自帶的已經定義好的特殊組
2.測試遠程主機是否能ping通。當需要遠程多個主機或者多個組時,中間使用逗號分隔
#ansible node1 -m ping
#ansible node1,webserver -m ping
3.模塊就是腳本(多數為Python腳本),多數腳本都支持參數,默認模塊為command
#ansible node1 -m command -a "uptime" #查看CPU負載
#ansible node1 -m command -a "uname -r" #查看內核版本
#ansible node1 -a "ip a s" #查看網卡信息
#ansible all -a "date" #查看時間
#####################################################
失敗檢查:
檢查/etc/hosts
檢查~/ansible/ansible.cfg
檢查~/ansible/hosts
####################################################
command和shell模塊的區別,command模塊的命令不啟動shell,直接通過ssh執行命令,command不支持bash特性,如管道和重定向等功能,所有需要調用shell的功能都無法使用。
不可以使用shell模塊執行交互命令,如vim、top等
4.Shell模塊
# ansible test -m shell -a "ps aux | wc -l" #進程數量
# ansible test -m shell -a "who" #登陸信息
#ansible test -m shell -a "touch /tmp/a.txt" #使用shell模塊創建文件會有Warning警告提示,正常
#####################################################################
注意:ansible使用ssh遠程連接被管理主機,退出ssh后所有狀態失效。
#ansible test -m shell -a "cd /tmp" #切換目錄
#ansible test -m shell -a "touch b.txt" #創建文件(沒有指定路徑,在家目錄創建的文件)
#ansible test -m shell -a "ls /tmp/b.txt" #查看,沒有文件和目錄
#ansible test -m shell -a “chdir=/tmp touch b.txt” #使用chdir參數切換共作目錄
#####################################################################
shell模塊支持判斷(creates、removes)
creates文件名:文件存在,不執行shell命令。
removes文件名:文件不存在,不執行shell命令。
#ansible test -m shell -a "touch /tmp/b.txt creates=/tmp/b.txt"
# ansible會遠程test目標主機,判斷目標主機有沒有/tmp/b.txt文件,如果有該文件則ansible對應的shell命令不執行,沒有則執行shell命令。
假設我有一個xxx.zip壓縮包
#ansible test -m shell -a “unzip /root/xxx.zip”
遠程test主機,執行unzip命令解壓一個壓縮包文件
#ansible test -m shell -a “unzip /root/xxx.zip removes=/bin/unzip”
ansible會遠程test主機,判斷目標主機有沒有/bin/unzip程序,如果沒有不執行shell命令,有則執行
############################################################################
5.script模塊。script模塊會把-a后面的腳本拷貝到被管理端主機,在目標主機執行這個腳本。
# vim ~/ansible/test.sh
#!/bin/bash
yum -y install httpd
systemctl start httpd
#ansible test -m script -a ‘./test.sh’ #test主機組
在node1電腦檢測,是否安裝了httpd軟件
#rpm -q httpd
#systemctl status httpd
###############
6.file模塊
###############
file模塊可以創建文件、目錄、鏈接;修改權限與屬性等。
很多ansible模塊具有【冪等性】的特征。
冪等性:任意次執行所產生的影響均與一次執行的影響相同。
#state=touch是創建文件,state=directory是創建目錄,state=absent代表刪除,state=link是創建快捷方式
#ansible test -m file -a “path=/tmp/file.txt state=touch”
# ansible test -m file -a "path=/tmp/mydir state=directory"
#遠程test組中所有主機,創建目錄,path后面指定要創建的文件或目錄的名稱
## 驗證:到node1主機,使用ls /tmp/看看tmp目錄下是否有mydir子目錄
# ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777"
#修改文件或目錄權限,path后面指定要修改的文件名或目錄名稱,owner后面指定用戶,group后面指定組,mode后面指定要修改的權限(0777中第一個0代表的是無特殊權限,如SUID、SGID等)
## 驗證:到node1主機,使用ls -l /tmp/file.txt查看文件的詳細信息是否正確
# ansible test -m file -a "path=/tmp/mydir state=absent"
#state=absent代表刪除(刪除目錄)
# ansible test -m file -a "path=/tmp/file.txt state=absent"
# state=absent代表刪除(刪除文件)
# ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link"
#給/etc/hosts文件創建一個鏈接文件/tmp/host.txt(src指定源文件,path是軟鏈接文件名)
#相當於執行命令 ln -s /etc/hosts /tmp/host.txt
## 驗證:到node1主機使用ls -l /tmp/hosts查看文件是否為軟鏈接
#############
7.copy模塊,可以將文件拷貝到遠程主機,如果目標主機有同名文件時,通過定義backup=yes則先備份在拷貝。
#############
copy模塊可以將文件拷貝到遠程主機 (ansible-doc copy)。
# echo AAA > ~/a3.txt
#ansible test -m copy -a "src=~/a3.txt dest=/root/"
#把管理端本機的a3.txt文件,拷貝到test組中所有主機的/root/目錄
#src代表源文件,dest代表目標文件
## 驗證:到node1主機使用ls /root/a3.txt查看是否有該文件
#echo CCC > ~/a3.txt
#ansible test -m copy -a "src=~/a3.txt dest=/root/ backup=yes"
查看node1#ls
a.txt
a.txt.3600.2020-09-06@17:50:08~
############################
8.fetch模塊,fetch模塊與copy類似,作用相反,可以將其他主機的文件拷貝到本地。flat=yes拷貝目錄
############################
# ansible all -m fetch -a "src=/etc/hostname dest=~/"
#將all所有主機的hostname文件下載到本地家目錄
#ls
########################
9.lineinfile|replace模塊,在修改單個文件的單行內容時可以使用lineinfile模塊,lineinfile會替換一整行,replace可以替換關鍵詞
########################
#ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
#在/etc/issue文件中添加一行內容hello world,默認添加到最后,line后面跟的是需要添加的文件內容
# ansible test -m lineinfile -a "path=/etc/issue line='insert' insertafter='Kernel'"
#將line后面的內容插入到/etc/issue文件中Kernel行的后面
#######################################################
replace可以替換關鍵字
#######################################################
#ansible test -m replace -a “path=/etc/issue regexp=‘hello’ replace=ni hao”
將node1主機中/etc/issue文件全文所有的hello替換為ni hao
#regexp后面是需要替換的舊內容;replace后面是需要替換的新內容
########
10.user模塊,可以實現linux系統賬戶管理
########
#ansible test -m user -a "name=tuser1"
#ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"
#name是用戶名,uid指定用戶ID號,group指定用戶屬於哪個基本組
#groups指定用戶屬於哪些附加組,home指定用戶的家目錄
#ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}"
#修改賬戶密碼,用戶名是tuser1,密碼是abc,密碼經過sha512加密
# ansible test -m user -a "name=tuser1 state=absent"
#刪除賬戶tuser1,state=absent代表刪除賬戶的意思,name指定要刪除的用戶名是什么
#賬戶的家目錄不會被刪除,相當於執行userdel tuser1
# ansible test -m user -a "name=tuser2 state=absent remove=true"
#刪除tuser2賬戶同時刪除家目錄、郵箱,相當於執行userdel -r tuser2
################################
11.yum_repository模塊,使用yum_repository可以創建或修改yum源配置文件(/etc/yum.repo.d/文件)
################################
#ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no"
#新建一個yum源配置文件/etc/yum.repos.d/myyum.repo
yum源文件名為myyum,該文件的內容如下:
[myyum]
name= hello
baseurl= ftp://192.168.4.254/centos
gpgcheck= 0
#ansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…"
#修改yum源文件內容
# ansible test -m yum_repository -a "name=myyum state=absent"
#刪除yum源文件myyum
################################
12.yum模塊,使用yum模塊可以安裝、卸載、升級軟件包,state: present(安裝)|absent(卸載)|latest(升級)。
################################
#ansible test -m yum -a "name=unzip state=present"
#安裝unzip軟件包,state默認為present,也可以不寫
# ansible test -m yum -a "name=unzip state=latest"
#升級unzip軟件包,軟件名稱可以是*,代表升級所有軟件包
# ansible test -m yum -a "name=unzip state=absent"
#調用yum模塊,卸載unzip軟件包,state=absent代表卸載軟件
############################
13.service模塊,(ansible-doc service)。service為服務管理模塊(啟動、關閉、重啟服務等)state:started|stopped|restarted,enabled:yes設置開機啟動。
############################
# ansible test -m yum -a "name=httpd"
#調用yum模塊,安裝httpd軟件包
# ansible test -m service -a "name=httpd state=started"
#調用service模塊,啟動httpd服務
# ansible test -m service -a "name=httpd state=stopped"
#調用service模塊,關閉httpd服務
# ansible test -m service -a "name=httpd state=restarted"
#調用service模塊,重啟httpd服務
# ansible test -m service -a "name=httpd enabled=yes"
#調用service模塊,設置httpd服務開機自啟
############################
14.邏輯卷相關模塊(ansible-doc lvg、ansible-doc lvol)
############################
做實驗之前需要給對應的虛擬機添加額外磁盤,並創建磁盤2個分區
可以使用parted或fdisk命令給磁盤創建分區
這里的磁盤名稱僅供參考,不要照抄!
lvg模塊:創建、刪除卷組(VG),修改卷組大小,state:present(創建)|absent(刪除)。
# ansible test -m yum -a "name=lvm2"
#安裝lvm2軟件包,安裝了lvm2軟件后,才有pvcreate、vgcreate、lvcreate等命令
# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"
#創建名稱為myvg的卷組,該卷組由/dev/sdb1組成
#注意:這里的磁盤名稱要根據實際情況填寫
# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"
#修改卷組大小,往卷組中添加一個設備/dev/sdb2
lvol模塊:創建、刪除邏輯卷(LV),修改邏輯卷大小,state:present(創建)|absent(刪除)。
# ansible test -m lvol -a "lv=mylv vg=myvg size=2G"
#使用myvg這個卷組創建一個名稱為mylv的邏輯卷,大小為2G
# ansible test -m lvol -a "lv=mylv vg=myvg size=4G"
#修改LV邏輯卷大小
# ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes"
#刪除邏輯卷,force=yes是強制刪除
# ansible test -m lvg -a "vg=myvg state=absent"
#刪除卷組myvg