ansible常用模組

itk發表於2024-08-01

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=''"

相關文章