ansible相關說明

二、ansible相關說明

2.一、ansible相關命令

ansible:定義並運行簡單任務,主要執行ad-hoc命令
ansible-config:查看、編輯、管理ansible配置
ansible-connection
ansible-console:repl控制檯執行ansible任務
ansible-doc:文檔查看工具。控制檯輸入 ansible-doc -h 查看幫助各個參數說明,查看playbook片斷使用 ansible-doc -s yum , 詳細說明可使用 -v -vvv -vvvv 參數
ansible-galaxy:共享和下載roles的工具
ansible-inventory:查看inventory的信息,能夠把hosts的ini格式轉成想要的json或者yaml
ansible-playbook:執行playbookansible-pull:從倉庫中拉去playbook
ansible-vault:文件加密工具重點掌握ansible和ansible-playbook命
ansible-pull: 默認使用的是push模式,pull模式相反;適用於數量巨大的機器配置;沒有網絡鏈接的機器運行python

2.二、ansible命令

格式:ansible -m -a
例子:ansible all -m shell -a 'date'
常見可選參數:
mysql

-m 模塊名,默認不指定模式時,使用的是command模塊。
-a 針對模塊的具體命令,用單引號包含
-f 並行執行的設備數(默認5)
-o 簡化輸出(一行輸出)
-i 指定 inventory 的路徑(默認爲 /etc/ansible/hosts)
-u 執行用戶(默認root)
-P 後臺執行(後跟數字表示隔多少秒輪詢一次,爲0表示靜默執行)
-B 最大執行時長(單位秒)
-t 輸出結果重定向
--syntax-check playbook語法檢查,不執行sql

2.三、ansible主要配置文件

/etc/ansible/ansible.cfg 配置文件,如下是對默認文件修改shell

# 注意,ansible的執行用戶爲普通用戶,由於每一個機器都作了sudo,因此ansible.cfg須要設置切換root操做,如下列出修改
[privilege_escalation]
# become=True   # 取消老是以root執行,須要時加參數切換
become_method=sudo
become_user=root
become_ask_pass=False
# 如下是修改以後的執行效果,注意看輸出
ansible lzcx -m shell -a "whoami"
ansible lzcx -m shell -a "whoami" -b

切換root

/etc/ansible/hosts 主機庫(host inventory)
/etc/ansible/roles/ 公共角色,主要在自動化部署多臺主機時應用
/usr/bin ansible執行命令存放目錄,ansible,ansible-doc,ansible-playbook等等json

2.四、inventory介紹

Inventory 文件遵循 ini 文件風格,[] 標記分組,方便對機器列表的管理
inventory 支持配置設置支持 ip,主機名,ip區域,ssh端口,鏈接類型(默認ssh)和鏈接用戶,主機變量,添加關鍵字做爲配置組變量
靜態 Inventory 指的是在文件中指定的主機和組,動態 Inventory 指經過外部腳本獲取主機列表,並按照 ansible 所要求的格式返回給 ansilbe 命令的。
設置組名時,儘可能選擇有意義的名字
如下是hosts文件的幾種配置方法,舉例說明,不必定用在這個實驗環境centos

# 未分組的主機,添加在最前面
192.168.1.1.212
# 添加一個分組,並指定ip區域
[centos6]
192.168.1.[216:217]
# 指定鏈接類型和鏈接用戶
[target1]
localhost ansible_connection=local
192.168.1.213 ansible_connection=ssh
ansible_ssh_user=operation
# 配置主機變量
[target2]
host1 http_port=80
host2 http_port=80 var2=xxx var3=xxx
# 添加關鍵字var,配置組變量,對屬於該組的全部主機都適用
[target2:var]
var4=xxx
var5=xxx
# 添加關鍵字children,把組做爲其餘組的子成員
[target3:children]
target1
target2

2.五、主機列表的執行匹配規則

匹配規則主要有如下幾種
邏輯匹配:全量 all/* 、邏輯或 | 、邏輯非 ! 、邏輯與 & 、切片 []
正則匹配:見下文詳解網絡

如下列舉各類匹配類型
指定主機ip:直接指定ip運行,這裏指定包括數字和字母指定ssh

# 例
ansible 192.168.1.216 -m shell -a 'date'

指定主機名:前提是先將ip和主機名添加到系統hosts文件才能識別,將主機名添加到ansible的hosts文件,執行命令檢查是否成功工具

# 例
echo '192.168.1.214 yuhui' >> /etc/hosts
echo 'yuhui' >> /etc/ansible/hosts
# 指定主機名
ansible yuhui -m shell -a 'date'

指定組名:組名指的是ansible目錄下hosts文件的組名ui

# 例
ansible centos6 -m shell -a 'date'

ansible中正則匹配詳解

匹配全部的主機:all

ansible all -a 'hostname'

匹配規則性主機或主機名

# 匹配後綴是 yk 的主機組
ansible *yk -a 'uptime'

匹配規則性主機或主機名

匹配多個組的主機,中間用 : 隔開(或操做),可匹配多個主機組,格式 group_name:group_name:group_name...

# 匹配 mysql 和 centos6 2個主機組
ansible mysql:centos6 -a 'uptime'
# 匹配 mysql、centos六、gzyk 3個主機組
ansible mysql:centos6:gzyk -a 'uptime'

在某個組而不在其餘組(非操做)

# 匹配在 my_vm 組但不在 centos6 組的主機,注意匹配範圍是用 單引號'' 包含,雙引號會報錯
ansible 'my_vm:!centos6' -a 'hostname'

在某個組而不在其餘組

匹配兩個組的交集(與操做)

# 匹配 my_vm 和 centos6 共有的主機
ansible 'my_vm:&centos6' -a 'hostname'

匹配兩個組的交集

匹配一個組的特定主機

# 匹配 my_vm 組內的第二和第三個主機,應用了python的切片
ansible my_vm[1:2] -a 'date'

匹配一個組的特定主機

混合匹配

# 匹配 my_vm 和 yuhui組但不包含 centos6 組的主機
ansible 'my_vm:yuhui:!centos6' -a 'date'

混合匹配

匹配關鍵字開頭:~

# 匹配 192.168.1.21 開頭的主機
ansible '~192.168.1.21*' -a 'hostname'

匹配關鍵字開頭

指定執行 --limit 用法,ansible和ansible-playbook都支持

# 指定 my_vm 組裏面的 192.168.1.216 執行
ansible my_vm -a 'hostname' --limit=192.168.1.216
# 用limit指定my_vm組裏面的192.168.1.21前綴主機
ansible my_vm -a 'hostname' --limit=192.168.1.21*
ansible my_vm -a 'hostname' --limit=~192.168.1.21*

limit限制匹配

相關文章
相關標籤/搜索