4,Ansible---Pattern

Patterns


Topics


Patterns


在Ansible中,Patterns 是指我們怎樣確定由哪一臺主機來管理. 意思就是與哪臺主機進行交互. 但是在:doc:playbooks 中它指的是對應主機應用特定的配置或執行特定進程.


我們再來複習下:doc:intro_adhoc 章節中介紹的命令用法,命令格式如下:


ansible <pattern_goes_here> -m <module_name> -a <arguments>


示例如下:


ansible webservers -m service -a "name=httpd state=restarted"


一個pattern通常關聯到一系列組(主機的集合) –如上示例中,所有的主機均在 “webservers” 組中.


不管怎麼樣,在使用Ansible前,我們需事先告訴Ansible哪臺機器將被執行. 能這樣做的前提是需要預先定義唯一的 host names 或者 主機組.


如下的patterns等同於目標爲倉庫(inventory)中的所有機器:


all

*


也可以寫IP地址或系列主機名:


one.example.com

one.example.com:two.example.com

192.168.1.50

192.168.1.*


如下patterns分別表示一個或多個groups.多組之間以冒號分隔表示或的關係.這意味着一個主機可以同時存在多個組:


webservers

webservers:dbservers


你也可以排隊一個特定組,如下實例中,所有執行命令的機器必須隸屬 webservers 組但同時不在 phoenix組:


webservers:!phoenix


你也可以指定兩個組的交集,如下實例表示,執行命令有機器需要同時隸屬於 webservers 和 staging 組.


webservers:&staging


你也可以組合更復雜的條件:


webservers:dbservers:&staging:!phoenix


上面這個例子表示“‘webservers’ 和 ‘dbservers’ 兩個組中隸屬於 ‘staging’ 組並且不屬於 ‘phoenix’ 組的機器才執行命令” ... 喲!唷! 好燒腦的說!


你也可以使用變量如果你希望通過傳參指定group,ansible-playbook通過 “-e” 參數可以實現,但這種用法不常用:


webservers:!`excluded`:&`required`


你也可以不必嚴格定義groups,單個的host names, IPs , groups都支持通配符:


*.example.com

*.com


Ansible同時也支持通配和groups的混合使用:


one*.com:dbservers


在高級語法中,你也可以在group中選擇對應編號的server:


webservers[0]


或者一個group中的一部分servers:


webservers[0-25]


大部分人都在patterns應用正則表達式,但你可以.只需要以 ‘~’ 開頭即可:


~(web|db).*\.example\.com


同時讓我們提前瞭解一些技能,除了如上,你也可以通過 --limit 標記來添加排除條件,/usr/bin/ansible or /usr/bin/ansible-playbook都支持:


ansible-playbook site.yml --limit datacenter2


如果你想從文件讀取hosts,文件名以@爲前綴即可.從Ansible 1.2開始支持該功能:


ansible-playbook site.yml --limit @retry_hosts.txt




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章