【问题标题】:Excluding subset of hosts in Ansible inventory排除 Ansible 清单中的主机子集
【发布时间】:2020-12-03 15:35:00
【问题描述】:

我有一组名为 vm2-prodvm14-prod 的主机。这些在 Ansible 主机清单中分组为vmware_hosts。我想排除这样的主机子集:

- name: testing play
  hosts: vmware_hosts:!vm[8-10]-prod

根据 Ansible 文档,这似乎应该排除 vm7-prodvm9-prod。但是,我得到“无法匹配主机模式,忽略 vm[8-10]-prod”,就像它正在读取文字主机名“vm[8-10]-prod”而不是数组一样。

我也试过vm[8:10]-prod,但它给出了同样的错误。

怎么了?

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    根据 Ansible 文档

    => 究竟是哪一个?

    我完全记得看到adding ranges in inventories 记录了这个符号,但hosts patterns 根本没有。

    也许您对显然应该满足您的要求的use of regexps in host patterns 感到困惑(在这种情况下看起来非常相似):

    hosts: vmware_hosts:!~vm[8-10]-prod
    

    同时,虽然上面可以方便地为特定 playbook 运行指定命令行限制,但为了更经常使用,我建议将这些机器添加到另一个更容易排除的组中,并且长期保持。

    【讨论】:

      【解决方案2】:

      根据"Commonn Patterns" shown in the documentation 部分,:! 模式只允许您排除组

      正如其他答案中提到的,您可以使用正则表达式模式,例如:

      hosts: vmware_hosts:!~vm(8|9|10)-prod
      

      这种方法的问题在于,如果您需要在 playbook 中的多个位置排除这些主机,您最终会在整个位置复制并粘贴正则表达式。然后,您将享受在排除列表中添加或删除主机的乐趣。

      另一个选项是排除组。当我需要在我的剧本中的多个位置排除相同的主机时,我总是使用这个。

      创建一个名为excluded_vms的组:

      [exluded_vms]
      vm8-prod
      vm9-prod
      vm10-prod
      

      并使用排除该组

      hosts: vmware_hosts:!excluded_vms
      

      如果明天我需要排除另一个主机,我只需将其添加到excluded_vms。小菜一碟!

      【讨论】:

      • ...the pattern ':!' only allows you to exclude groups. => 文档列出了“常见”模式。实际上,我不确定我是否同意作者的观点,这是“不常见的”,但是完全有可能排除单个主机(或您稍后在回答中显示的多个主机)。因此这种说法是错误的。
      • 正则表达式模式有效!我本能地将 [] 用于数组,但没有意识到,在这种情况下,它应该是管道符号。
      【解决方案3】:

      我认为您只能排除主机组。就像在Ansible docu 中一样,只有带有* 符号的模式示例,所以vm*-prod 是可能的。使用您的语法,您只能选择定义组的行,例如Using group position in patterns.

      【讨论】:

      • 您绝对可以排除模式中的单个主机。
      【解决方案4】:

      这已通过引用先前答案的简单语法更改来解决:

      hosts: vmware_hosts:!~vm(8|9|10)-prod
      

      由于来自不同的 CM 背景(在我的例子中是 xCAT),从 Ansible 文档中并不能立即看出主机阵列应该使用管道而不是方括号。我能够使用这种语法在我的剧本中排除多个单独的主机。

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多