1. 程式人生 > 實用技巧 >ansible常見模組使用

ansible常見模組使用

一、特性

冪等值: 一個任務執行一次和執行n此的效果一樣,不因重複執行帶來意外

模組化:呼叫特定的模組,完成特定任務

有Paramiko,PyYAML,Jinja2 (模板語言) 三個關鍵模組

支援自定義模組

部署簡單,基於SSH

支援playbook編排任務

無需代理

Ansible 主要組成部分

USER 普通使用者

CMDB(配置管理資料庫) API呼叫

公有云私有云API呼叫

USER -> Ansible Playbook -> Ansible

利用ansible實現管理的方式

Ad-Hot ansible命令,主要用於臨時命令使用場景

Ansible-playbook主要用於長期規劃好的,大型專案場景

安裝和模組使用

服務端
yum -y install ansible
ssh-keygen
ssh-copy-id -i 遠端主機

ansible-doc -s 模組名 檢視模組的用法
ansible all --list-hosts 檢視能被管理的主機

配有配置ssh的時候也可以手動輸入密碼執行
ansible ip -m ping -k (驗證資訊在一定時間內是有快取的)
-u 指定遠端執行命令的使用者,預設是root
-b 代理舊版的sudo
--become-user=UserName 指定sudo的使用者,預設是root
-K 提示輸入sudo的口令


二、常見模組使用

ansible的host-pattern

邏輯與
  ansible "websever:&dbserver" -m ping
  在webserver組並且在dbserver組中的主機
邏輯非
  
ansible 'websever:!dbserver' -m ping
在webserver組不在在dbserver組中的主機
正則表示式
綜合邏輯

ansible命令執行

1. 載入自己的配置檔案

2.載入自己對應的模組檔案

3.通過ansible將模組或命令生成對應的臨時py檔案,並將檔案傳輸至遠端伺服器對應執行使用者$/home/tmp/...

4.給檔案+x許可權

5.執行並返回結果

6.刪除臨時py檔案,退出

ansible使用示例

以wang使用者執行ping存活檢測
ansible all -m ping -u wang -k

以wang sudo至root執行ping存活檢測
ansible all -m ping -u wang -b -k

以wang sudo至ivy使用者執行ping存活檢測
ansible all -m ping -u wnag -k -b --become-user=ivy

以wang sudo至root使用者執行ls
ansible all -m command -u wang -a 'ls /root' -b become-user=root -k -K

補充配置檔案修改的兩個地方

host_key_checking=False 檢查對應伺服器的host_key, 建議取消註釋

log_path=/var/log/ansible.log 日誌檔案

模組使用

檢視模組幫助資訊

ansible-doc -s 模組名稱

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

command
此模組是預設的可以不寫
ansible all -m command -a 'ls /data'

卻換到目錄裡面在執行
ansible all -m command -a 'chdir=/data ls'
如果檔案存在就不執行,不存在就執行
ansible all -m command -a 'creates=/etc/fstab ls'

如果檔案不存在就執行
ansible all -m command -a 'remove=/etc/fstab ls'

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

給使用者改密碼
ansible all -m shell -a 'echo ivy | passwd --stdin wang'
檢視主機名
ansible all -m shell -a 'echo $HOSTNAME'

script: 在遠端主機上執行ansible伺服器上的指令碼

ansible all -m script -a '/script/script.sh'

copy: 從主控端複製檔案到遠端主機

ansible all -m copy -a 'src=/etc/fstab dest=/data'
複製時改許可權
ansible all -m copy -a 'src=/etc/fstab dest=/data mode=600 owner=wang group=bin backup=yes'
指定內容,直接生成目標檔案
ansible all -m copy -a "content='內容' dest=/data/file.txt"

fetch: 從遠端端抓取檔案過來,和copy相反,但目前只支援檔案

ansible all -m fetch -a 'src=/etc/fstab dest=/data'

抓過來的檔案,會以遠端主機ip命令生成一個資料夾,檔案放在此資料夾下



file: 修改遠端主機上已存在的檔案屬性

ansible all -m file -a 'path=/data/fstab owner=wang mode=700'

建立軟連線, 需要指明基於哪個檔案來建立,建立的檔案放在哪裡
ansible all -m file -a 'src=/data/fstab path=/data/fstab.link state=link'
建立空檔案
ansible all -m file -a 'path=/data/f1.txt state=touch'

刪除檔案
ansible all -m file -a 'path=/data/f1.txt state=absent'

清空資料夾下的所有,一般要注意了,除了掛載點刪不了別的都能刪
ansible all -m file -a 'path=/data/ state=absent'

unarchive: 解壓縮

1. 將ansible主機上的壓縮包在 本地加壓後傳到遠端主機上,設定copy=yes
2. 將遠端主機上的某個壓縮包解壓到指定路徑下,設定copy=no
src: 源路徑
dest: 遠端主機上的目標路徑
mode: 設定解壓後的檔案許可權

傳壓縮包的過程中順便解包
ansible all -m unarchive -a 'src=/root/fstab.tar.gz dest=/data/ owner=wang mode=700'

 解遠端壓縮包

ansible all -m copy -a 'src=fstab.tar.gz dest=/data/'

ansible all -m unarchive -a 'src=/data/fstab.tar.gz dest=/data/ copy=no'

archive: 打包壓縮

ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
path: 代表要打包的路徑
dest: 代表打包後存放的路徑
format: 代表達包的方式

hostname: 管理主機名, 針對單個主機

ansible 192.63.1.1 -m hostname -a 'centos'

cron: 計劃任務

支援時間: minute hour day month weekday
建立計劃任務
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime'"
禁用計劃任務
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime disabled=true'"
刪除計劃任務
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime state=absent'"

yum: 管理包

ansible all -m yum -a 'name=httpd state=present' 安裝
ansible all -m yum -a 'name=httpd state=absent' 刪除

service: 管理服務

ansible all -m service -a 'name=httpd state=stopped' 停止服務
ansible all -m service -a 'name=httpd state=started enabled=yes' 啟用服務
ansible all -m service -a 'name=httpd state=reloadded' 過載包
ansible all -m service -a 'name=httpd state=restarted' 重啟服務

user: 管理使用者

ansible all -m user -a 'name=user1 comment="test user" uid=2088 home=/app/user1 group=root'
組要事先已經存在的 否則會報錯

建立系統使用者
ansible all -m user -a 'name=sysuser1 system=yes home=/app/sysuser'

刪除使用者
ansible all -m user -a 'name=user1 state=absent remove=yes'
remove=yes: 代表連家目錄也一併刪除

group: 管理組

ansible all -m group -a 'name=testgroup system=yes'
ansible all -m group -a 'name=testgroup state=absent'

工具

ansible-galaxy: 把別人寫好的role下載下來

ansible-pull: 推送命令至遠端,效率無限提升,對運維要求比較高

ansible-ploybook

ansible-console: 互動式執行

ansible-valut: 管理加密yml檔案

ansible-vault [create|decrypt|edit|encrypt|rekey|view]
建立新檔案 解密 編輯 加密 修改口令 檢視