在Ansible中,Patterns 是指我們怎樣確定由哪一臺主機來管理. 意思就是與哪臺主機進行交互. 但是在playbooks 中它指的是對應主機應用特定的配置或執行特定進程。
ansible的語法:
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
如下的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和daservers兩個組中屬於staging但不屬於phoenix組的主機。
- 同時也可以通配符:
*.example.com
*.com
- 通配符和組也可以:
one*.com:dbservers
- 在高級語法中,你也可以在group中選擇對應編號的server:
webservers[0]
- 或者一個group中的一部分servers:
webservers[0-25]
- 排除條件
--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