我有一组通过vm14-prod命名为vm2-prod的主机。这些在Ansible hosts inventory中分组为vmware_hosts。我想排除如下所示的主机子集:
- name: testing play
hosts: vmware_hosts:!vm[8-10]-prod根据Ansible文档,这似乎应该通过vm9-prod排除vm7-prod。然而,我得到“无法匹配主机模式,忽略vm8-10-prod”,就像它读取的是文字主机名"vm8-10-prod“而不是数组。
我也尝试过vm[8:10]-prod,但它给出了相同的错误。
怎么啦?
发布于 2020-12-04 00:33:09
根据Ansible docs的
=>到底是哪一个?
我清楚地记得看到过为adding ranges in inventories记录的这种表示法,但根本不是为hosts patterns记录的。
也许你把use of regexps in host patterns搞糊涂了,它看起来应该能满足你的需求(在本例中看起来非常相似):
hosts: vmware_hosts:!~vm[8-10]-prod同时,虽然上面的内容可以方便地在命令行上指定特定剧本运行的限制,但对于更常规的使用,我建议将这些计算机添加到其他组中,这样更容易排除和长期维护。
发布于 2020-12-04 00:10:10
我认为您只能排除主机组。就像在Ansible docu中一样,只有带有*符号的模式示例,所以vm*-prod是可能的。使用您的语法,您只能选择已定义组的行,例如Using group position in patterns。
发布于 2020-12-15 04:35:48
这是通过一个简单的语法更改来解决的,正如前面的答案所引用的:
hosts: vmware_hosts:!~vm(8|9|10)-prod来自不同的CM背景(在我的例子中是xCAT),从Ansible文档中看不出主机阵列应该使用管道而不是方括号。我可以使用这个语法在我的剧本中排除多个单独的主机。
https://stackoverflow.com/questions/65129063
复制相似问题