ansible常用模組(一)
運維自動化發展歷程及技術應用
ansible命令執行過程
- 載入自己的配置檔案 預設/etc/ansible/ansible.cfg
- 載入自己對應的模組檔案,如command
- 通過ansible將模組或命令生成對應的臨時py檔案,並將該 檔案傳輸至遠端伺服器的對應執行使用者$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY檔案
- 給檔案+x執行
- 執行並返回結果
- 刪除臨時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'