自動化運維Ansible之常用模組

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