自動化運維Ansible之常用模組
- 2020 年 4 月 5 日
- 筆記
0、Ansible模組語法
在ansible中是指需要快速執行一條命令,並且不需要保存的命令,對於複雜的命令則為playbook
查看模組幫助:ansible-doc -l
// 統計模組數量 $ ansible-doc -l |wc -l 3387 // ansible有大量的模組
Ansible模組語法:
ansible [管理主機資訊或者主機組資訊] -m [模組名稱] -a [相關模組參數] 主機資訊:遠程主機IP地址;遠程主機組名稱;遠程所有主機all -m:指定相應模組 -a:利用模組中某些參數功能 -f :定義每次輸出內容的數量
Ansible注意事項顏色資訊:
綠色:對遠程節點不進行相應修改,或者只是對遠程節點資訊進行查看
紅色:操作執行命令有異常
黃色:對遠程節點進行相應修改
深紫色:表示對命令執行發出警告資訊(可能存在的問題,給你提示建議)
1、Command模組
command模組的作用:默認模組,在遠程主機執行命令
;默認模組,可忽略-m選項
// chaidr 先切換到特定的目錄,然後在執行命令 [root@m01 ~]# ansible 10.4.7.8 -m command -a "chdir=/tmp/ pwd" // creates 判斷一個文件是否存在。文件如果存在,後面命令則不會執行;如果不存在,則執行 [root@m01 /]# ansible 10.4.7.8 -m command -a "creates=/etc/rsyncd.conf hostname" // removes 判斷一個文件是否存在。文件如果存在,後面命令執行;如果不存在,則不執行 [root@m01 /]# ansible 10.4.7.8 -m command -a "removes=/etc/exports hostname" // fress_form 使用command模組批量獲取執行hostname命令 [root@m01 /]# ansible sa -m command -a "hostname"
該command模組無法和shell一樣,像$HOME變數,和一些像 "<", ">", "|", ";" and "&" 這樣的操作是沒有辦法執行(如果要支援這些特殊符號就必須要使用shell模組)錯誤的演示:
[root@m01 /]# ansible sa -m command -a "hostname;date"
2、Shell模組
shell模組作用:shell模組是萬能模組
,可以滿足command模組所有功能,並且可以支援識別特殊字元
。
// 在10.4.7.8的機器的當前目錄下執行ls和pwd命令 [root@m01 /]# ansible 10.4.7.8 -m shell -a "ls;pwd"
3、Scripts模組
scripts模組作用:專門運行腳本模組
,在本地執行腳本,腳本產生所有的動作都在遠端主機上執行
// 編寫腳本,裡面添加yum安裝keepalived命令,將腳本執行命令放入到受控端執行 [root@m01 ~]# cat /server/scripts/yum.sh #!/bin/bash yum install -y keepalived [root@m01 ~]# ansible 10.4.7.8 -m script -a "/server/scripts/yum.sh" [root@m01 ~]# ansible 10.4.7.8 -m shell -a "rpm -qa keepalived"
注意:我們在管理機器上執行的腳本,遠端(受控端)是不需要存在該腳本
4、Copy模組
copy模組作用:將文件從本地或遠程機器複製到遠程機器上
的某個位置
// 將本端的/etc/hosts文件推送到遠端,並且重命名為test.txt [root@m01 ~]# ansible sa -m copy -a "src=/etc/hosts dest=/tmp/test.txt" // 本端在/tmp/下創建文件file01.txt,推送到遠端 [root@m01 ~]# touch /tmp/file01.txt [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/" // 為本端的/tmp/file01.txt文件追加內容,並推送到遠端,覆蓋時備份原文件 [root@m01 ~]# cat /tmp/file01.txt [root@m01 ~]# echo 123456 >/tmp/file01.txt [root@m01 ~]# cat /tmp/file01.txt 123456 [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes" // 在/root/下創建test.txt文件,在複製的時候修改屬主和屬組為root,許可權644 [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/root/test.txt dest=/test/oldboy/ owner=root group=root mode=644" // 為對端的/tmp/test.txt文件寫入內容「1」 [root@m01 ~]# ansible 10.4.7.7 -m copy -a "content='1' dest=/tmp/test.txt"
參數
- backup # 對推送傳輸過去的文件,進行備份 - src # 推送數據的源文件資訊 - dest # 推送數據的目標路徑 - content # 直接批量在被管理端文件中添加內容 - owner # 將本地文件推送到遠端,指定文件屬主許可權 - group # 將本地文件推送到遠端,指定文件屬組許可權 - mode # 將本地文件推送到遠端,指定文件許可權資訊
5、File模組
file模組作用:對受控端的文件屬性修改/目錄創建/文件創建
// 為遠端主機修改/tmp/file01.txt文件的屬主和屬組為root,許可權為600 [root@m01 ~]# ansible 10.4.7.7 -m file -a "path=/tmp/file01.txt owner=root group=root mode=600" // 為遠端主機創建文件和目錄,遠程創建文件/tmp/file01.txt [root@m01 ~]# ansible 10.4.7.7 -m file -a " path =/tmp/file01.txt state=touch" // 遠程創建目錄/tmp/dir01 [root@m01 ~]# ansible 10.4.7.7 -m file -a "path =/tmp/dir01 state=directory" // 遞歸修改遠端主機的/data目錄及目錄下的所有文件的屬主和屬組都為root [root@m01 /]# ansible 10.4.7.7 -m file -a "path=/data state=directory owner=root group=root recurse=yes"
模組參數
- path # 指定遠程主機目錄或文件資訊 - recurse # 遞歸授權: yes # 遞歸修改許可權 no # 不遞歸修改許可權(默認) - state # 指定需要執行的動作: directory # 在遠端創建目錄 touch # 在遠端創建文件 hard # 硬鏈接 link #軟鏈接
6、Yum模組
yum模組作用:可以對受控端執行yum安裝
,卸載和查看軟體包
等
// yum安裝iftop軟體包 [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=installed" // 移除iftop軟體 [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=absent" // 查看指定軟體包名的列表 [root@m01 ~]# ansible 10.4.7.7 -m yum -a "list=iftop"
模組參數
- name # 執行要安裝軟體的名稱,以及軟體的版本 - state # 指定需要執行的動作: installed、present # 安裝軟體包 latest # 安裝最新軟體包 removed、absent # 移除軟體包 - list # 指定軟體名稱,查看軟體是否已經安裝了
7、Service模組
service模組作用:管理服務狀態模組
,對受控端進行服務的管理
// 將遠端的crond服務關閉,並且開機不啟動 [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=stopped enabled=no" // 將遠端的crond服務開啟,並且開機自啟動 [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=started enabled=yes"
模組參數
- name # 指定需要管理的服務名稱(管理的服務一定在chkconfig中可以看到) - state # 指定需要執行的動作: started # 啟動服務 reloaded # 平滑重啟 restarted # 重啟服務 stopped # 停止服務 running # 運行(啟動)服務 - enable # 設置服務是否開機自啟動: yes # 服務開機自啟動 no # 服務開機不啟動
8、Cron模組
cron模組作用:為受控端添加定時任務
x x x x x /bin/sh /server/scripts/test.sh >/dev/null 2>&1
將系統命令行的定時任務變成ansilbe的語法
傳統的寫法
"minute=0 hour=0 daay=* month=* weekday=* job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
ansible的寫法(* 號是可以省略的)
ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
定時任務示例
// 添加一條定時任務 [root@m01 ~]# ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'" // 設置定時任務注釋資訊,防止重複設置 [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'" // 刪除指定的name [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' state=absent" // 也可以直接指定定時任務項的名稱,進行定時任務的刪除 [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron02' state=absent" // 使用 disabled 參數來注釋定時任務 [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=yes" // 取消注釋 [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=no"
模組參數
- name # 為新的定時任務條目設置名稱(防止定時任務項的重複) - state # 需要指定的動作: absent # 添加定時任務 preset # 刪除定時任務 - disabled # 是否禁用定時任務(是否注釋): yes # 禁用定時任務項(注釋掉) no # 開啟定時任務項(取消注釋) # 該參數需要和job一起使用 - minute # 分鐘 0-59 - hour # 小時 0-23 - day # 天數 1-31 - month # 月份 1-12 - weekday # 周 0-6
9、Group模組
group模組作用:可以為遠端創建用戶組
// 創建組,組名為demo,組id為1012 [root@m01 ~]# ansible 10.4.7.7 -m group -a "name=demo gid=1012"
模組參數
- name # 必須參數,指定創建的組名 - gid # 指定用戶的gid - state absent # 移除遠端主機的組 present # 創建遠端主機的組(默認)
10、User模組
user模組作用:可以為遠端進行創建用戶
、修改用戶
、刪除用戶
等
// 創建用戶名test,uid為999,組為test,shell為/sbin/nologin,並且不創建家目錄 [root@m01 ~]# ansible 10.4.7.7 -m user -a "name=test uid=1010 shell=/sbin/nologin createhome=no" // 創建普通用戶alx,並配置對應的用戶密碼(-1 使用MD5加密) [root@m01 /]# echo '123456' | openssl passwd -1 -stdin $1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/ [root@m01 /]# ansible 10.4.7.7 -m user -a 'name=alx password="$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/"'
模組參數
- name # 必須參數,指定用戶名 - group # 指定用戶組名稱 - groups # 指定附加組名稱,多個組之間用逗號","分隔 - shell # 指定用戶登錄的shell - uid # 指定用戶的uid - comment # 指定用戶的注釋資訊 - password # 給用戶添加密碼 - state # 指定用戶是否存在於受控主機中: preset # 創建用戶(默認) absent # 刪除用戶 - createhome # 是否創建家目錄: yes # 創建家目錄(默認) no # 不創建家目錄 - home # 指定家目錄,需要和createhome互相配合使用
密碼設置:必須要將預先設置的密碼做openssl加密處理後輸出的一串數值,然後還數值就作為新創建用戶的密碼,如果添加的是明文密碼的話是無效的。
11、Mount模組
mount模組作用:可以將掛載參數寫入到/etc/fastb文件
中
// 僅將掛載的配置寫入到/etc/fastb,並不會執行掛載 [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=present" // 臨時掛載設備,並將掛載的配置寫入到/etc/fastb [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=mounted" // 臨時卸載,不會清理/etc/fstab [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=unmounted" // 卸載,不僅臨時卸載,同時會清理/etc/fstab [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=absent"
模組參數
- present # 開機掛載,不會執行掛載指令,僅將掛載的配置寫入到/etc/fastb - mounted # 掛載設備,並將掛載的配置寫入到/etc/fastb - unmounted # 卸載設備,不會清除/etc/fastb寫入的配置 - absent #卸載設備,會清理/etc/fastb寫入的配置
注意:path 所指定的掛載目錄不需要手動創建,當執行掛載命令的時候,會自動的創建並掛載
12、Unarchive模組
Unarchive模組作用:解壓縮
該模組有兩種用法:
-
將ansible主機上的壓縮包在本地解壓縮後傳到遠程主機上,這種情況下,copy=yes. 本地解壓縮,解壓縮位置不是默認的目錄,沒找到或傳完刪了 後傳到遠程主機
-
將遠程主機上的某個壓縮包解壓縮到指定路徑下。這種情況下,需要設置copy=no 遠程主機上面的操作,不涉及ansible服務端
// 將本地的壓縮文件解壓後傳到遠程主機 [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755" // 將遠程主機的壓縮文件解壓 [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"
模組參數
- src # 源壓縮包路徑 - dest # 壓縮包解壓後存放路徑 - copy # yes:本地壓縮,no:遠程壓縮 yes no - mode # 解壓後的目錄/文件許可權
13、Git模組
Git模組作用:管理git倉庫的git checkout以部署文件或軟體。
// 拉取git倉庫commit id 為78d5d96的程式碼到指定目錄 [root@m01 ~]# ansible 10.4.7.7 -m git -a "repo=https://gitee.com/jasonminghao/dubbo-demo-service.git dest=/data/git_repo/dubbo-demo-service version=78d5d96 accept_hostkey=yes"
模組參數
- repo # git倉庫地址(https/ssh) - dest # 將程式碼克隆到指定路徑 - version # 克隆指定版本分支/commit id - accept_hostkey # 類似於-o StrictHostKeyChecking=no yes no
14、Systemd模組
systemd模組作用:如果使用systemctl 管理程式的話,可以使用systemd模組,systemctl 可以控制程式,reload,start,status,restart等
// 拉取git倉庫commit id 為78d5d96的程式碼到指定目錄 [root@m01 ~]# ansible 10.4.7.7 -m systemd -a "name=nfs state=started enabled=yes daemon_reload=true"
模組參數
- name # 需要管理的服務名稱 - state # 執行動作 reloaded # 平滑重啟 restarted # 重啟 started # 啟動 stopped # 停止 - enabled # 是否開機啟動 - daemon_reload # 在執行任何其他操作之前運行daemon-reload,以確保systemd已經讀取了任何更改。 yes no