【问题标题】:How can I know if a host belongs to group?我如何知道主机是否属于组?
【发布时间】:2021-10-15 21:08:51
【问题描述】:

我有我需要的所有主机的清单。 我使用hosts.yml 组织了清单,我在其中指定了主机所属的组:

all:
  hosts:
    host1:
    host2:
    host3:
    host4:
    host5:
  children:
    group1:
      hosts:
        host1:
        host2:
    group2:
      hosts:
        host2:
        host3:

我想有一个 ansible 命令在脚本中运行,以了解主机是属于一个组还是另一个,以便决定下一步做什么。我想静态地这样做,尝试连接到主机并收集事实之前。

我可以使用任何 ansible 命令吗?

或者也许我必须改变方法并将我需要的信息添加到单个主机的 yml 中?

提前致谢!

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    执行此操作的规范方法是将您的剧本编写为仅针对特定群体。如果你有一个看起来像这样的游戏:

    - hosts: group1
      tasks:
        ...
    

    ...你知道它只会在group1 的主机上运行。


    如果您有针对多个组的游戏,并且您希望针对单个任务具有特定于组的行为(并且您不能将其考虑到自己的游戏中),您可以检查主机名是否为 in一组:

    - name: do something only if the current host is in group1
      debug:
        msg: "Look at me I'm in group1"
      when: inventory_hostname in groups.group1
    

    【讨论】:

    • 感谢您的回复 :-) 我不知道我是否做得对,但我想知道主机是否属于某个组,然后再启动任何剧本以便设置-之前整理了一些东西。我在库存中有这些信息(以组成员身份的形式,但我可以以不同的方式安排),我想知道我是否可以使用它。我不确定我是否走在正确的道路上......
    • 看起来你真的应该在剧本的上下文中这样做,让 Ansible 担心库存解析。您可以通过设置gather_facts: false 来禁止在剧中收集事实,这样您就可以在连接到远程主机之前运行命令。
    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多