天天看點

4,Ansible---Pattern

Patterns

Topics

在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

本文轉自 wpf926 51CTO部落格,原文連結:http://blog.51cto.com/wupengfei/1958155,如需轉載請自行聯系原作者

繼續閱讀