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]
建立新檔案 解密 編輯 加密 修改口令 檢視