使用--limit指定ansible中主机的子树
我想将playbook应用于主机的子集。“atlanta”下的所有DBServer主机,而不是“raleigh”下的所有DBServer主机 但是我不知道如何使用-limit来指向清单中主机的特定子树使用--limit指定ansible中主机的子树,ansible,Ansible,我想将playbook应用于主机的子集。“atlanta”下的所有DBServer主机,而不是“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 --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:southerst: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,这似乎对我不起作用。尽管出现了这种情况,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:
有了这个资源清册,每个区域都有一个单独的dbserver-group。在您的区域层次结构之外有一个全局dbserver组,它包括所有dbserver-group。有了这个,你可以要求:
ansible all --list-hosts --limit dbservers-atl
并获得:
hosts (2):
host1-atlanta
host2-atlanta
hosts (4):
host1-raleigh
host2-raleigh
host1-atlanta
host2-atlanta
或者,您可以询问dbservers组:
并获得:
hosts (2):
host1-atlanta
host2-atlanta
hosts (4):
host1-raleigh
host2-raleigh
host1-atlanta
host2-atlanta
您关于“-limit”选项的陈述不正确:
。。。当我使用ansible playbook时,这种类型的“选择器”不可用
引用“曼安赛尔”或“曼安赛尔剧本”:
-l'子集',-限制'子集'
进一步将所选主机限制为其他模式
详情请参阅。例如,相当于运行ansible
ansible all --limit '!dbservers' ...
正在playbook.yml中声明“主机”
- hosts: all:!dbservers
- hosts: all
跑步
ansible-playbook playbook.yml
ansible-playbook --limit '!dbservers' playbook.yml
下一个等价项是在playbook.yml中声明所有“主机”
- hosts: all:!dbservers
- hosts: all
跑步
ansible-playbook playbook.yml
ansible-playbook --limit '!dbservers' playbook.yml
谢谢你,拉尔克斯。看起来等级制度的出现让我很困惑。你的建议是对的,我会把我的配置改成你建议的。