Ansible Inventory:如何从不在某些其他组中的主机构建组
我正在寻找一种方法来构建一个清单组,其中包括所有尚未放入另一个组的主机 在我的例子中,这些小组确定某个特定服务器应该在什么时候更新——要么在周一、周三、周五,要么“任何一天都不重要”。我不想显式地枚举主机,因为这是手动工作,而且容易出错Ansible Inventory:如何从不在某些其他组中的主机构建组,ansible,ansible-inventory,Ansible,Ansible Inventory,我正在寻找一种方法来构建一个清单组,其中包括所有尚未放入另一个组的主机 在我的例子中,这些小组确定某个特定服务器应该在什么时候更新——要么在周一、周三、周五,要么“任何一天都不重要”。我不想显式地枚举主机,因为这是手动工作,而且容易出错 all: hosts: host1[1-100].example.com: children: updateMonday: hosts: host1.example.com: host4.exa
all:
hosts:
host1[1-100].example.com:
children:
updateMonday:
hosts:
host1.example.com:
host4.example.com:
updateWednesday:
hosts:
host2.example.com:
host5.example.com:
updateFriday:
hosts:
host3.example.com:
host6.example.com:
updateAnyday:
children:
# This expresses what I want but does not work
!updateMonday:
!updateWednesday:
!updateFriday:
我使用的是本例中未显示的其他组,因此我不能简单地使用“未分组”组来做我想做的事情
编辑:我不想修改我使用的剧本,因为我有很多剧本,而且我还需要特别的命令来支持新的组。创建一个包含所有主机的组,例如updateAll
全部:
主持人:
主机[1-100]。example.com:
儿童:
更新所有:
主持人:
主机[1-100]。example.com:
更新日期:
主持人:
host1.example.com:
host4.example.com:
...
在第一个剧本中,动态创建组updateAnyday,并在第二个剧本中使用它
-主机:所有
任务:
-添加\u主机:
名称:“{{item}}”
组:updateAnyday
循环:“{{groups.updateAll”|
差异(groups.updateMonday)|
差异(groups.updatewdnesday)|
差异(groups.updateFriday)}”
跑一次:对
-主持人:updateAnyday
任务:
...
(未测试)
问:“我不想修改剧本。” 答:创建一个包含主机列表updateAnyday.txt的文件,例如使用上面的剧本。然后使用有限的库存运行playbook updateAnyday.yml,例如
shell>ansible playbook updateAnyday.yml--limit@updateAnyday.txt
请参阅。您可以创建一个播放并使用组组合更改主机。例如,除updateMonday、UpdateWebnesday和updateFriday之外的所有主机都是:
主机:全部:!updateMonday:!UpdateWebNesday:!更新速度
您还可以使用
add\u host
或group\u by
命令动态创建组。有趣的想法,谢谢!我忘了在问题中提到我不想修改剧本。但答案本身很好,不客气!下一个选项可能是创建一个包含有限主机列表的文件。我并没有意识到——limit可以接受一个文件。这实际上也可以解决我的其他几个问题!对于那些可能通过Google找到这一点的人:在尝试了一点之后,我发现了第一种方法的一个局限性:因为组是动态创建的,所以我不能用--limit命令行选项指定它。显然,它也不适用于特殊命令。当然,第二个版本应该解决这两个问题。