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
夠簡單吧. 為了更好的掌握該章節內容,可以先了解 Introduction To Ad-Hoc Commands 再 Playbooks
See also
- Introduction To Ad-Hoc Commands
- Examples of basic commands
- Playbooks
- Learning ansible’s configuration management language
- Mailing List
- Questions? Help? Ideas? Stop by the list on Google Groups
- irc.freenode.net
- #ansible IRC chat channel