我想将剧本应用于一部分主机。对于所有位于“ atlanta”下而不是“ raleigh
下的dbserver主机但是我不知道如何使用--limit指向清单中主机的特定子树
ansible all -i ./testhosts.yml --limit atlanta --list-hosts
hosts (4):
host1-atlanta
host2-atlanta
host1-raleigh
host2-raleigh
ansible all -i ./testhosts.yml --limit 'atlanta:&dbservers' --list-hosts
hosts (4):
host1-atlanta
host2-atlanta
host1-raleigh
host2-raleigh
我希望得到的是
host1-atlanta
host2-atlanta
(在我的情况下,子树的“逻辑”路径是:all:usa:southeast:atlanta:dbservers)
我的示例testhosts.yml
all:
children:
usa:
children:
southeast:
children:
atlanta:
children:
dbservers:
hosts:
host1-atlanta:
ansible_port: 11022
ansible_host: 11.0.1.2
host2-atlanta:
ansible_port: 11022
ansible_host: 11.0.1.3
raleigh:
children:
dbservers:
hosts:
host1-raleigh:
ansible_port: 11022
ansible_host: 10.0.1.2
host2-raleigh:
ansible_port: 11022
ansible_host: 10.0.1.3
northeast:
northwest:
southwest:
是否可以使用--limit命令行选项来过滤掉除特定子树之外的所有内容?
我的上层ansible调用脚本已经知道它们将在哪个站点上运行,因此我希望可以以某种方式拥有一个公共主机文件,但能够使用某种树形导航“选择器”来指定组。
我意识到我可以做到
ansible atlanta -i ./testhosts.yml --limit atlanta --list-hosts
但是我遇到的问题是,当我使用ansible-playbook时,这种类型的“选择器”不可用。 我可以找到的唯一选择器(过滤器)是--limit,这似乎对我不起作用。
答案 0 :(得分:1)
尽管出现,但ansible中的组不是分层的。您只有一个dbservers
组,并且该组的成员也同时属于atlanta
和raleigh
。只需少量更改库存,您就可以更接近想要的东西:
all:
children:
dbservers:
children:
dbservers-atl:
dbservers-ral:
usa:
children:
southeast:
children:
atlanta:
children:
dbservers-atl:
hosts:
host1-atlanta:
ansible_port: 11022
ansible_host: 11.0.1.2
host2-atlanta:
ansible_port: 11022
ansible_host: 11.0.1.3
raleigh:
children:
dbservers-ral:
hosts:
host1-raleigh:
ansible_port: 11022
ansible_host: 10.0.1.2
host2-raleigh:
ansible_port: 11022
ansible_host: 10.0.1.3
northeast:
northwest:
southwest:
使用此清单,每个区域都有一个单独的dbservers-<tag>
组。您所在区域层次结构之外的全局dbservers
组包括 all dbservers-<tag>
组。有了这个,您可以要求:
ansible all --list-hosts --limit dbservers-atl
并获得:
hosts (2):
host1-atlanta
host2-atlanta
或者您可以要求加入dbservers
组:
ansible all --list-hosts --limit dbservers
并获得:
hosts (4):
host1-raleigh
host2-raleigh
host1-atlanta
host2-atlanta
答案 1 :(得分:0)
您对'-limit '选项的说明不正确:
...当我使用ansible-playbook时,这种类型的“选择器”不可用。
引用“ man ansible ”或“ man ansible-playbook ”:
-l'SUBSET',--limit'SUBSET' 进一步将选定的主机限制为其他模式
详细信息可在Working with Patterns中找到。例如,相当于运行ansible
ansible all --limit '!dbservers' ...
在剧本中声明了“ 主机”。yml
- hosts: all:!dbservers
并运行
ansible-playbook playbook.yml
下一个等效项是在playbook.yml中声明所有“ 主机”
- hosts: all
并运行
ansible-playbook --limit '!dbservers' playbook.yml