參考:
一、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 <module_name>
:可以檢視相關的模組
ansible-doc <module_name>
:可以檢視對應模組的詳細功能
1.4.2 【角色共享】Ansible-galaxy
-
Ansible-galaxy官網:Ansible Galaxy
Galaxy中可以下載到寫好的Roles(Roles可以理解為Playbook的集合)
Galaxy安裝一個Nginx Rols的示例:
- 以Web類為例
- 下載一個Nginx
- 通過命令
ansible-galaxy install <module_name>
安裝
[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/<role_name>
[root@localhost geerlingguy.nginx]# pwd
/root/.ansible/roles/geerlingguy.nginx
- 會有以下的目錄及檔案
各個資料夾下檔案的作用後面補充
1.4.3 【劇本工具】Ansible-playbook
ansible-playbook <playbook_name>
:用於執行寫好的劇本
1.4.4 【加密工具】Ansible-vault
ansible-vault encrypt <playbook_name>
:加密Playbook
ansible-vault decrypt <playbook_name>
:解密Playbook
ansible-vault view <playbook_name>
:檢視加密的Playbook
ansible-vault edit <playbook_name>
:編輯加密的Playbook
ansible-vault create <playbook_name>
:建立新的加密的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 <host_group>
:切換主機組
list
:列出主機組列表
help
&?
:列出內建命令
ping
:ping測試(當前主機組)
二、Ansible的模組
參考:
2.1 Ansible 模組簡介
我們可以通過 ansible-doc -l
檢視所有的模組。
通過 ansible-doc <module_name>
檢視指定模組的幫助資訊。
模組有兩種呼叫方式,一種通過ad-hoc命令列,另一種通過playbook呼叫。
第一種:ad-hoc 命令列
格式:ansible <host_group> -m <module_name> -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,會被用來解釋執行失敗的原因或者是關於執行過程的一些說明。