1. 程式人生 > >自動化運維Ansible之常用模組

自動化運維Ansible之常用模組

[TOC] # 0、Ansible模組語法 在ansible中是指需要快速執行一條命令,並且不需要儲存的命令,對於複雜的命令則為playbook 檢視模組幫助:ansible-doc -l ```bash // 統計模組數量 $ ansible-doc -l |wc -l 3387 // ansible有大量的模組 ``` Ansible模組語法: ```bash ansible [管理主機資訊或者主機組資訊] -m [模組名稱] -a [相關模組引數] 主機資訊:遠端主機IP地址;遠端主機組名稱;遠端所有主機all -m:指定相應模組 -a:利用模組中某些引數功能 -f :定義每次輸出內容的數量 ``` >Ansible注意事項顏色資訊: >綠色:對遠端節點不進行相應修改,或者只是對遠端節點資訊進行檢視 >紅色:操作執行命令有異常 >黃色:對遠端節點進行相應修改 >深紫色:表示對命令執行發出警告資訊(可能存在的問題,給你提示建議) # 1、Command模組 command模組的作用:預設模組,`在遠端主機執行命令`;預設模組,可忽略-m選項 ```bash // 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模組)錯誤的演示: ```bash [root@m01 /]# ansible sa -m command -a "hostname;date" ``` # 2、Shell模組 shell模組作用:shell模組是`萬能模組`,可以滿足command模組所有功能,並且可以`支援識別特殊字元`。 ```bash // 在10.4.7.8的機器的當前目錄下執行ls和pwd命令 [root@m01 /]# ansible 10.4.7.8 -m shell -a "ls;pwd" ``` # 3、Scripts模組 scripts模組作用:`專門執行指令碼模組`,在本地執行指令碼,指令碼產生所有的動作都在遠端主機上執行 ```bash // 編寫指令碼,裡面新增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模組作用:將檔案從本地或遠端機器`複製到遠端機器上`的某個位置 ```bash // 將本端的/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" ``` **引數** ```bash - backup # 對推送傳輸過去的檔案,進行備份 - src # 推送資料的原始檔資訊 - dest # 推送資料的目標路徑 - content # 直接批量在被管理端檔案中新增內容 - owner # 將本地檔案推送到遠端,指定檔案屬主許可權 - group # 將本地檔案推送到遠端,指定檔案屬組許可權 - mode # 將本地檔案推送到遠端,指定檔案許可權資訊 ``` # 5、File模組 file模組作用:對受控端的`檔案屬性修改/目錄建立/檔案建立` ```bash // 為遠端主機修改/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" ``` **模組引數** ```bash - path # 指定遠端主機目錄或檔案資訊 - recurse # 遞迴授權: yes # 遞迴修改許可權 no # 不遞迴修改許可權(預設) - state # 指定需要執行的動作: directory # 在遠端建立目錄 touch # 在遠端建立檔案 hard # 硬連結 link #軟連結 ``` # 6、Yum模組 yum模組作用:可以對受控端`執行yum安裝`,`解除安裝和檢視軟體包`等 ```bash // 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" ``` **模組引數** ```bash - name # 執行要安裝軟體的名稱,以及軟體的版本 - state # 指定需要執行的動作: installed、present # 安裝軟體包 latest # 安裝最新軟體包 removed、absent # 移除軟體包 - list # 指定軟體名稱,檢視軟體是否已經安裝了 ``` # 7、Service模組 service模組作用:`管理服務狀態模組`,對受控端進行服務的管理 ```bash // 將遠端的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" ``` **模組引數** ```bash - 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的語法 傳統的寫法 ```bash "minute=0 hour=0 daay=* month=* weekday=* job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'" ``` ansible的寫法(* 號是可以省略的) ```bash ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'" ``` 定時任務示例 ```bash // 新增一條定時任務 [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" ``` **模組引數** ```bash - 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模組作用:可以為遠端`建立使用者組` ```bash // 建立組,組名為demo,組id為1012 [root@m01 ~]# ansible 10.4.7.7 -m group -a "name=demo gid=1012" ``` **模組引數** ```bash - name # 必須引數,指定建立的組名 - gid # 指定使用者的gid - state absent # 移除遠端主機的組 present # 建立遠端主機的組(預設) ``` # 10、User模組 user模組作用:可以為遠端進行`建立使用者`、`修改使用者`、`刪除使用者`等 ```bash // 建立使用者名稱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/"' ``` **模組引數** ```bash - name # 必須引數,指定使用者名稱 - group # 指定使用者組名稱 - groups # 指定附加組名稱,多個組之間用逗號","分隔 - shell # 指定使用者登入的shell - uid # 指定使用者的uid - comment # 指定使用者的註釋資訊 - password # 給使用者新增密碼 - state # 指定使用者是否存在於受控主機中: preset # 建立使用者(預設) absent # 刪除使用者 - createhome # 是否建立家目錄: yes # 建立家目錄(預設) no # 不建立家目錄 - home # 指定家目錄,需要和createhome互相配合使用 ``` >密碼設定:必須要將預先設定的密碼做openssl加密處理後輸出的一串數值,然後還數值就作為新建立使用者的密碼,如果新增的是明文密碼的話是無效的。 # 11、Mount模組 mount模組作用:可以將`掛載引數寫入到/etc/fastb檔案`中 ```bash // 僅將掛載的配置寫入到/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" ``` **模組引數** ```bash - present # 開機掛載,不會執行掛載指令,僅將掛載的配置寫入到/etc/fastb - mounted # 掛載裝置,並將掛載的配置寫入到/etc/fastb - unmounted # 解除安裝裝置,不會清除/etc/fastb寫入的配置 - absent #解除安裝裝置,會清理/etc/fastb寫入的配置 ``` >注意:path 所指定的掛載目錄不需要手動建立,當執行掛載命令的時候,會自動的建立並掛載 # 12、Unarchive模組 Unarchive模組作用:解壓縮 該模組有兩種用法: * 將ansible主機上的壓縮包在本地解壓縮後傳到遠端主機上,這種情況下,copy=yes. 本地解壓縮,解壓縮位置不是預設的目錄,沒找到或傳完刪了 後傳到遠端主機 * 將遠端主機上的某個壓縮包解壓縮到指定路徑下。這種情況下,需要設定copy=no 遠端主機上面的操作,不涉及ansible服務端 ```bash // 將本地的壓縮檔案解壓後傳到遠端主機 [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" ``` **模組引數** ```bash - src # 源壓縮包路徑 - dest # 壓縮包解壓後存放路徑 - copy # yes:本地壓縮,no:遠端壓縮 yes no - mode # 解壓後的目錄/檔案許可權 ``` # 13、Git模組 Git模組作用:管理git倉庫的git checkout以部署檔案或軟體。 ```bash // 拉取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" ``` **模組引數** ```bash - 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等 ```bash // 拉取git倉庫commit id 為78d5d96的程式碼到指定目錄 [root@m01 ~]# ansible 10.4.7.7 -m systemd -a "name=nfs state=started enabled=yes daemon_reload=true" ``` **模組引數** ```bash - name # 需要管理的服務名稱 - state # 執行動作 reloaded # 平滑重啟 restarted # 重啟 started # 啟動 stopped # 停止 - enabled # 是否開機啟動 - daemon_reload # 在執行任何其他操作之前執行daemon-reload,以確保systemd已經讀取了任何更改。 yes