Ansible 清單與命令解析(2)
Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能,ansible是基於模組工作的,本身沒有批量部署的能力,真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架.
在大規模的配置管理工作中我們需要管理不同業務的不同機器,這些機器的資訊都存放在 Ansible 的 Inventory 元件裡面,在我們工作中配置部署針對的主機必須先存放在 Invento 組裡面,這樣才能使用 Ansible 對它進行操作,預設 Ansible 的 Inventory 是一個靜態的 INI 格式的檔案/etc/ansible/hosts 當然,還可以通過 ANSIBLE_HOSTS 環境變數指定或者執行 ansible 和 ansible-playbook 的時候用 -i 引數臨時設定.
主機和組
我們可以通過配置/etc/ansible/hosts
這個檔案來定義主機和主機組,例如下面的程式碼.
[[email protected] ~]# cat -n /etc/ansible/hosts 1 192.168.1.10 ansible_ssh_pass='123123' 2 192.168.1.20 ansible_ssh_pass='123123' 3 4 [docker] 5 172.168.1.10[1:9] 6 [docker:vars] 7 ansible_ssh_pass='123123' 8 [web_server] 9 192.168.10.10 10 192.168.10.20 11 192.168.10.30
上圖的引數解析:
● 第1-2行:定義了兩臺主機,並且使用內建變數給予了SSH登陸密碼.
● 第4-5行:定義了一個docker組,且組內有101-109這9臺機器的定義.
● 第6-7行:定義為上面的docker組統一賦值一個密碼.
● 第8-11行:定義了一個web_server組,其中有三臺主機.
這就是,常用的組的定義與宣告部分啦.
埠與別名
ssh預設的埠是22 (此時的Ansible主機配置檔案可以省略),但是如果某些主機的ssh執行在自定義的埠上,Ansible使用Paramiko進行ssh連線時不會使用你ssh配置檔案中列出的埠,但是如果修改ansible使用openssh進行ssh連線時將會使用:
1.在Client客戶端上ssh開啟2個埠連線,下面一段話隨意加入到指定配置檔案裡即可.
[[email protected] ~]# vim /etc/ssh/sshd_config
Port 10086
Port 22
[[email protected] ~]# systemctl restart sshd
2.在Ansible服務端的配置,配置主機清單列表同時指定一個主機埠即可.
[[email protected] ~]# vim /etc/ansible/hosts
[web_server]
192.168.10.10:10086
192.168.10.20:10086
[web_server:vars]
ansible_ssh_pass='123123'
使用主機變數
這裡介紹 Ansible Invento 的內建的一些引數,這些引數我們在實際工作中也會經常使用到.
內建引數 | 引數說明 |
---|---|
ansible_ssh_host | 指定被管理的主機的真實IP |
ansible_ssh_port | 指定連線到被管理主機的ssh埠號,預設是22 |
ansible_ssh_user | ssh連線時預設使用的使用者名稱 |
ansible_ssh_pass | ssh連線時的密碼 |
ansible_sudo_pass | 使用sudo連線使用者時的密碼 |
ansible_sudo_exec | 如果sudo命令不在預設路徑,需要指定sudo命令路徑 |
ansible_ssh_private_key_file | 祕鑰檔案路徑,祕鑰檔案如果不想使用ssh-agent管理時可以使用此選項 |
ansible_shell_type | 目標系統的shell的型別,預設sh |
ansible_connection | SSH 連線的型別:local,ssh,paramiko |
ansible_python_interpreter | 用來指定python直譯器的路徑 |
上面的例項也可以配置直接使用使用者名稱和密碼進行連線
[[email protected] ~]# vim /etc/ansible/hosts
[web_server]
192.168.10.10 ansible_ssh_port=10086 ansible_ssh_user=root ansible_ssh_pass='123123'
[docker_server]
192.168.10.10
192.168.10.20
[docker_server:vars]
ansible_ssh_port=10086
ansible_ssh_user=root
ansible_ssh_pass='123123'
Ansible配置檔案解析
Ansible 配置檔案是以 ini 格式儲存配置資料的,在 Ansible 中,幾乎所有的配置項都可以通過 Ansible 的 playbook 或環境變數來重新賦值,在執行 Ansible 命令時,命令將會按照預先設定的順序查詢配置檔案,具體的ansible配置檔案包括以下兩個部分:
/etc/ansible/ansible.cfg 和 /etc/ansible/hosts
● /etc/ansible/ansible.cfg 主要配置Ansible的一些引數資訊
● /etc/ansible/hosts 主機清單(被控主機檔案),或分組管理
● /usr/bin/ansible* 記錄了Ansible的命令
如果你通過作業系統軟體包管理工具或 pip 安裝,那麼你在/etc/ansiblc目錄下應該已經有了 ansible.cfg 配置檔案.如果你是通過 GitHub 倉庫安裝的,在你複製的倉庫中 examples 目錄下可以找到 ansible.cfg 你可以把它拷貝到/etc/ansible目錄下.
接下來看一下Ansible的主配置檔案 /etc/ansible/ansible.cfg
裡面的引數解析,並說明每個引數代表的含義.
配 置 參 數 | 參 數 的 說 明 |
---|---|
inventory = /etc/ansible/hosts | Ansible存放可通訊主機的列表 |
library = /usr/share/my_modules/ | Ansible預設搜尋模組的位置 |
remote_tmp = $HOME/.ansible/tmp | Ansible通過遠端傳輸模組到遠端主機,預設傳輸路徑 |
log_path = /var/log/ansible.log | Ansible預設日誌檔案儲存位置 |
pattern = * | 如沒有提供主機列表,則預設值是對所有主機通訊 |
forks = 5 | 預設執行執行緒數量 |
poll_interval = 15 | 多久回查一下這些任務的狀態,預設值是15秒 |
sudo_user = root | sudo使用的預設使用者,預設是root |
ask_sudo_pass = True | 控制playbook在執行sudo之前是否詢問sudo密碼.預設no |
transport = smart | 通訊機制.預設值為smart |
remote_port = 22 | 遠端SSH埠,預設是22 |
module_lang = C | 模組和系統之間通訊的計算機語言,預設是C語言 |
host_key_checking=false | 設定是否檢查SSH主機金鑰 |
就介紹這些,這是最常用的,其他的文字請參考
http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configuration
Ansible命令引數解析
看完了上面的配置檔案的解析,我們再來看一下,Ansible命令的常用語法格式依舊常用命令引數吧.
[[email protected] ~]# ansible --help
命令語法:[ ansible [選項] [模組] [引數] [主機列表] ]
-m #要執行的模組,預設為command
-a #指定模組的引數
-u #ssh連線的使用者名稱,預設是root
-k #提示輸入ssh登入密碼,當使用密碼驗證的時候用
-s #sudo許可權執行
-U #sudo到哪個使用者,預設為root
-K #提示輸入sudo密碼,當不是NOPASSWD模式時使用
-C #只是測試一下會改變什麼內容,不會真正去執行
-c #指定連線型別(default=smart)
-f #fork指定程序併發數,預設為5個
-i #指定hosts檔案路徑,預設default=/etc/ansible/hosts
-I #指定pattern對已匹配的主機中再過濾一次
--list-host #列印主機列表
-M #要執行的模組路徑,預設為/usr/share/ansible
-o #壓縮輸出摘要輸出
--private-key #指定一個私鑰路徑
-T #ssh連線超時時間,預設是10秒
-t #日誌輸出到該目錄,日誌檔名以主機命名
-v #顯示詳細日誌
PlayBook命令引數解析
該指令對於需反覆執行的、較為複雜的任務,我們可以通過定義 Playbook 來搞定,它允許使用變數、條件、迴圈、以及模板,也能通過角色及包含指令來重用既有內容,其通過讀取playbook 檔案後執行相應的動作.
[[email protected] ~]# ansible-playbook -h
命令語法:[ ansible-playbook [選項] [引數] .yml ]
-m #要執行的模組,預設為command
-C #測試執行效果
--flush-cache #清除fact快取
--syntax-check #語法檢查
--force-handlers #如果任務失敗,也要執行handlers
--list-tags #列出所有可用的標籤
--list-tasks #列出將要執行的所有任務
--skip-tags=SKIP_TAGS #跳過執行標記此標籤的任務
--start-at-task=START_AT_TASK #在此任務處開始執行
--step #一步一步在執行之前確認每個任務
-t TAGS,--tags=TAGS #只執行標記此標籤的任務