1. 程式人生 > >ansible常用模組(一)

ansible常用模組(一)

運維自動化發展歷程及技術應用

  ansible命令執行過程

  1.  載入自己的配置檔案 預設/etc/ansible/ansible.cfg
  2.  載入自己對應的模組檔案,如command
  3. 通過ansible將模組或命令生成對應的臨時py檔案,並將該 檔案傳輸至遠端伺服器的對應執行使用者$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY檔案
  4.  給檔案+x執行
  5. 執行並返回結果
  6.  刪除臨時py檔案, sleep 0退出

執行狀態: 綠色:執行成功並且不需要做改變的操作 黃色:執行成功並且對目標主機做變更 紅色:執行失敗

ansible常用模組

Command:在遠端主機執行命令,預設模組,可忽略-m選項

  • ansible srvs -m command -a ‘service vsftpd start’
  • ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’不成功
  • 此命令不支援 $VARNAME < > | ; & 等,用shell模組實現

Shell:和command相似,用shell執行命令

  • ansible srv -m shell -a ‘echo magedu |passwd –stdin wang’
  • 呼叫bash執行命令 類似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’
  • &> /tmp/example.txt 這些複雜命令,即使使用shell也可能會失敗,解決辦法:寫到指令碼時, copy到遠端,執行,再把需要的結果拉回執行命令的機器

Copy:從伺服器複製檔案到客戶端

示例:將主機/etc/fstab檔案複製到websrvs組中所有機器上,改名為fstab2,並將所有者改為xie。 若目標存在,則預設覆蓋,並生成備份

在websrvs組中的目標主機上的/data/目錄下生成selinux檔案,並且內容為SELINUX=disable\nSELINUXTYPE

Fetch:從客戶端取檔案至伺服器端, copy相反,目錄可先tar

示例:抓取目標主機上的fstab2檔案到本機的/data/目錄下

 

 【src只能抓取對檔案,不能抓取目錄,若要抓取目錄,可先對目錄打包,然後再抓取】 示例:將目標主機的/data目錄打包到/root/data.rar,然後再將打包後的data.rar抓取到目標主機

 [[email protected] data]#ansible websrvs -m fetch -a 'src=/root/data.rar dest=/data'

File:設定檔案屬性

建立空檔案 : #ansible websrvs -m file -a 'name=/data/file1 state=touch mode=600' 針對改空檔案建立軟連線: #ansible websrvs -m file -a 'src=/data/file1 dest=/data/file1-link state=link' 建立資料夾: #ansible websrvs -m file -a 'path=/data/dir1 state=directory' 刪除資料夾: #ansible websrvs -m file -a 'path=/data/dir1 state=absent'  清空目錄資料: #ansible websrvs -m file -a 'path=/data/  state=absent'

Hostname:管理主機名

將目標主機主機名改為centos66 #ansible 192.168.36.6 -m hostname -a 'name=centos66'【這樣的更改是永久更改,直接改了檔名配置檔案】

Cron:計劃任務

查詢計劃任務: #ansible websrvs -a 'crontab -l'  建立計劃任務:為目標主機建立計劃任務,每十分鐘,自動和172.20.0.1同步時間,併為該任務起名為synctime #ansible websrvs -m cron -a 'minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime' 禁用計劃任務:(加disable=true) #ansible websrvs -m cron -a 'disabled=true minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime' 刪除計劃任務:(加state=absent) #ansible websrvs -m cron -a 'state=absent minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime'  

Yum:管理包

檢視包是否安裝: #ansible websrvs -a 'rpm -q httpd'   安裝包:(可以同時安裝多個包,包名中間用逗號隔開即可) #ansible websrvs -m yum -a 'name=httpd' 解除安裝包:(可以同時解除安裝多個包,包名中間用逗號隔開即可) #ansible websrvs -m yum -a 'name=httpd state=absent'