ansible常見模組
setup
# 收集遠端主機的Facts(每個被管理節點在接收執行管理命令之前,會將自己主機相關資訊,如作業系統,IP等資訊傳遞給ansible主機)
filter: 用於進行條件過濾,如果設定,僅返回匹配過濾條件的資訊
ansible hosts1 -m setup
ansible hosts1 -m setup -a "filter=ansible_all_ipv4_addresses"
command
# 命令模組,用於在遠端主機執行命令(缺陷:執行命令不能使用變數和引數)
例:在inventory檔案中的所有主機中執行date命令,-m預設不指定時就是使用command模組
ansible all -m command -a "date"
cron
# 定時任務模組
state值: present(新增) absent(移除)
例: 使用ansible 新增任務計劃 */10 * * * * /bin/echo hello
新增:
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test job" state=present'
檢查:
ansible all -a 'crontab -l'
移除:
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test job" state=absent'
user
# 使用者操作模組
name: 指定使用者名稱
uid: 指定uid號
group: 指定組
新增使用者
ansible all -m user -a 'name="user1" state=present'
刪除使用者
ansible all -m user -a 'name="user1" state=absent'
group
新增使用者組
ansible all -m group -a 'name="mysql" gid=306 system=yes'
copy
src= :定義本地原始檔
dest=:定義目標路勁(絕對路勁)
content= :取代src=,表示用指定的內容生成為目標檔案的內容,不能與src同時使用
owner: 檔案屬主
group: 檔案屬組
mode: 檔案許可權
backup: 是否備份
複製本地的/etc/fstab 到遠端的 /tmp 下許可權為640 屬主為root
ansible all -m copy -a 'src=/etc/fstab /dest=/tmp/fstab.ansible owner=root mode=640'
複製內容為“hello longge”到遠端主機
ansible all -m copy -a 'content="hello longge" dest=/tmp/test.ansible'
file
# file 模組可以幫助我們完成一些對檔案的基本操作。比如,建立檔案或目錄、刪除檔案或目錄、修改檔案許可權等
path: 必須引數,指定要操作的檔案或目錄
state: directory目錄 touch檔案 link軟連結 hard硬連結 absent刪除
src: 建立連結時需要指定的源
force: 強制
owner: 檔案屬主
group: 檔案屬組
mode: 檔案許可權
recurse: 目錄時遞迴修改檔案屬性
ping
# 測試連通性
ansible all -m ping
service:
# 服務管理
state: started stopped reloaded restarted
enabled: 是否開機自啟
ansible all -m service -a 'enabled=true name=httpd state=started'
shell
與command類似,但是可以執行帶管道和變數的命令,同樣無法做到執行多次結果一致
script
# 本地指令碼在遠端主機執行
chdir引數 : 此引數的作用就是指定一個遠端主機中的目錄,在執行對應的指令碼之前,會先進入到 chdir 引數指定的目錄中。
creates引數 :使用此引數指定一個遠端主機中的檔案,當指定的檔案存在時,就不執行對應指令碼,可參考 command 模組中的解釋。
removes引數 :使用此引數指定一個遠端主機中的檔案,當指定的檔案不存在時,就不執行對應指令碼
ansible all -m script -a 'chdir=/opt /tmp/test.sh'
yum
# 軟體包管理
state值: present(安裝) absent(移除)
安裝軟體包
ansible all -m yum -a 'name=nginx'
解除安裝
ansible all -m yum -a 'name=nginx state=absent'
lineinfile
# 檔案內容修改,在某行前面新增一行,在某行後面新增一行,刪除某一行、末尾加入一行、替換或新增某一行
path: 檔案路徑
regexp: 正則匹配,如'^127\.0\.0\.1','^Listen ','^# port for http'
line: 需要更換成的行或者新增的行
insertbefore: 正則匹配該行並在改行前面新增一行,如'^www.*80/tcp','^#Listen ','aa(.*)'
insertafter: 正則匹配該行並在改行後面新增一行
state: absent刪除 present新增
例:
bbb修改為bbbbbb
ansible all -m lineinfile -a "dest=/root/test.txt regexp='bbb' line='bbbbbbb'"
2.2 在某一行前面插入一行
ansible all -m lineinfile -a "dest=/root/test.txt insertbefore='aa(.*)' line='eeee'"
2.3 在某一行後面插入一行
ansible all -m lineinfile -a "dest=/root/test.txt insertafter='aa(.*)' line='eeee'"
2.4 刪除某一行
ansible all -m lineinfile -a "dest=/root/test.txt regexp='aa(.*)' state=absent"
2.5 末尾加入一行
ansible all -m lineinfile -a "dest=/root/test.txt line='hehe'"
2.6 替換或新增某一行
ansible all -m lineinfile -a "dest=/root/test.txt regexp='he(.*)' line='lllll' state=present"
replace
# 模組可以根據我們指定的正規表示式替換匹配到的字串,檔案中所有被匹配到的字串都會被替換,和lineinfile不同的地方是replace只會替換正規表示式匹配到的內容,而lineinfile是替換正規表示式匹配到行的內容。
path: /etc/hosts
after: '開始位置'
before: '結束位置'
regexp: '匹配內容'
replace: '替換內容'
#匹配某行前加入註釋
ansible host01 -m replace -a "path=/etc/fstab regexp='^10.1.2.254(.*)' replace='# 10.1.2.254\1' backup=yes"
# 匹配到行後,在本行新增aaa內容
ansible 192.168.1.1 -m replace -a "path=/etc/ssh/sshd_config regexp='^allowusers(.*)' replace='allowusers\1 aaa' backup=yes"
# 刪除行中的test01
ansible host02 -m replace -a "dest=/etc/ssh/sshd_config regexp='test01' replace=''"