1. 程式人生 > >Ansible 清單與命令解析(2)

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            #只執行標記此標籤的任務