參考:
一、Ansible的工具
1.1 Ansible的工作前提

Ansible正常工作需要滿足兩個前提:
- 主控機與被控機都要開啟SSH服務
- 主控機與被控即都要裝有Python
1.2 Ansible的安裝文件
[root@localhost /]# rpm -ql ansible | more
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook
/usr/bin/ansible-pull
/usr/bin/ansible-vault
--More--
通過 rpm -ql ansible | more 命令可查看 Ansible的相關文件:
/etc/ansible/ansible.cfg :默認ansible的默認配置文件位置
/etc/ansible/hosts :默認inventory主機清單位置
/etc/ansible/roles:默認inventory角色位置
/usr/bin/ansible :ansible命令的文件
/usr/lib/python3.6/site-packages/ansible:提供Python模塊
/usr/share/man/man1/ :幫助文檔
備注:RPM(紅帽軟件包管理器)。RPM 有點像Windows 系統中的控制面板,會建立統一的數據庫文件,詳細記錄軟件信息並能夠自動分析依賴關系。
1.3 Ansible的配置文件
[root@localhost /]# grep "^\[" /etc/ansible/ansible.cfg
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
以下是/etc/ansible/ansible.cfg中配置塊的含義:
[defaults]:默認常用配置
[inventory]:主機清單插件
[privilege_escalation]:用於提權
[paramiko_connection]:Python paramiko模塊的連接設備(默認SSH)
[ssh_connection]:SSH連接設置
[persistent_connection]:長連接設置
[accelerate]:加速模式的配置
[selinux]:selinux設置
[colors]:輸出結果顏色的設置
[diff]:輸出不同的設置
1.4 Ansible的相關工具
[root@localhost /]# ansible
ansible ansible-doc ansible-pull
ansible-config ansible-galaxy ansible-vault
ansible-connection ansible-inventory
ansible-console ansible-playbook
輸入 ansible 然后雙擊Tab鍵
ansible:主程序,臨時命令執行工具
ansible-doc:用於查看配置文檔,模塊功能
ansible-galaxy:用於上傳、下載Roles模塊,需要網絡
ansible-playbook:用於定制自動化任務,編排劇本的工具
ansible-pull:用於遠程執行命令的工具
ansible-vault:文件加密工具
ansible-console:基於Console界面與用戶交互的執行工具
利用ansible實現管理的主要方式:
- 臨時命令使用場景 —> Ad-hoc
- 大型項目場景,有規划過程 —> Ansible-playbook
1.4.1 【幫助工具】Ansible-doc
[root@localhost /]# ansible-doc -l | wc -l
3387
ansible-doc -l | wc -l :可以查看ansible有多少個模塊
ansible-doc -l | grep <模塊> :可以查看相關的模塊
ansible-doc <模塊> :可以查看對應模塊的詳細功能
1.4.2 【角色共享】Ansible-galaxy
-
Ansible-galaxy官網:Ansible Galaxy
Galaxy中可以下載到寫好的Roles(Roles可以理解為Playbook的集合)
Galaxy安裝一個Nginx Rols的示例:
- 以Web類為例

- 下載一個Nginx


- 通過命令
ansible-galaxy install <模塊>安裝
[root@localhost /]# ansible-galaxy install geerlingguy.nginx
- downloading role 'nginx', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-nginx/archive/3.1.0.tar.gz
- extracting geerlingguy.nginx to /root/.ansible/roles/geerlingguy.nginx
- geerlingguy.nginx (3.1.0) was installed successfully
- 安裝完之后,默認會放在用戶家目錄下的.ansible目錄中
默認放在:/root/.ansible/roles/<角色>
[root@localhost geerlingguy.nginx]# pwd
/root/.ansible/roles/geerlingguy.nginx
- 會有以下的目錄及文件

各個文件夾下文件的作用后面補充
1.4.3 【劇本工具】Ansible-playbook
ansible-playbook <劇本> :用於執行寫好的劇本
1.4.4 【加密工具】Ansible-vault
ansible-vault encrypt <劇本>:加密Playbook
ansible-vault decrypt <劇本>:解密Playbook
ansible-vault view <劇本>:查看加密的Playbook
ansible-vault edit <劇本>:編輯加密的Playbook
ansible-vault create <劇本>:創建新的加密的Playbook
加解密的示例:
-
一個未加密的 test.yml 文件

-
將 test.yml 加密

1.4.5 【交互工具】Ansible-console
[root@localhost /]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
root@all (2)[f:5]$ cd vm_group
root@vm_group (2)[f:5]$ ping
vm2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
vm1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
root@vm_group (2)[f:5]$
通過 ansible-console 工具,可以實現交互輸入命令
forks n:設置並發數
cd <主機組>:切換主機組
list:列出主機組列表
help&?:列出內置命令
ping:ping測試(當前主機組)
二、Ansible的模塊
參考:
2.1 Ansible 模塊簡介
我們可以通過 ansible-doc -l 查看所有的模塊。
通過 ansible-doc <模塊> 查看指定模塊的幫助信息。
模塊有兩種調用方式,一種通過ad-hoc命令行,另一種通過playbook調用。
第一種:ad-hoc 命令行
格式:ansible <主機組> -m <模塊> -a "key=value"
通過 -m 指定模塊,通過 -a 指定參數(key=value的形式)
例如:
ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"
第二種:playbook 劇本
例如:
- 以簡單key:value的形式傳遞參數
- name: reboot the servers
action: command /sbin/reboot -t now
或者簡寫成:
- name: reboot the servers
command: /sbin/reboot -t now
- 以yaml語法中的"complex args"傳遞參數
- name: restart webserver
service:
name: httpd
state: restarted
2.2 Ansible 模塊速查
Ansible中的模塊種類有很多,如雲計算類模塊、集群類模塊、命令類模塊、數據庫類模塊、文件類模塊、消息類模塊、監控類模塊等等。根據需求可以到網站中查找模塊的詳細說明。
至於一些常見的模塊,后面專門整理一篇博文(✿◡‿◡)!
所有內置的模塊都可以到上面的文檔中查找👆

2.3 共同的返回值

2.3.1 Facts
一些模塊返回"facts"(例如:setup模塊),這些是通過一個"ansible_facts"作為key和內部一些自動收集的值直接作為當前主機的變量並且他們不需要注冊這些數據。
2.3.2 Status
每一個模塊都必須返回一個status,來表示這個模塊是成功的,是否有任何改變或者沒有發生改變。當檢查模式下發現模塊不支持或者不滿足某些條件,Ansible自己會返回一個status並跳過這個模塊。
2.3.3 其他的共同返回值
如msg,會被用來解釋執行失敗的原因或者是關於執行過程的一些說明。
