【问题标题】:how to get the current executing host group_name not group_names in ansible?如何在ansible中获取当前正在执行的主机组名而不是组名?
【发布时间】:2020-01-07 03:47:17
【问题描述】:

我已阅读How do you get group name of the executing role in ansible
我也读过https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html
但我看不懂。

如果同一主机IP在不同的host_groups,我认为:“ansible在执行主机时是分开执行的,应该只属于一个group_name,而不是group_names”。
如何获取当前正在执行的主机 gorup_name,而不是 group_names?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    听起来您想要与inventory_hostname 等效的组。不幸的是,它不存在。您可能会考虑在执行期间设置一个额外的变量作为解决方法。示例:--extra-vars targetgroup=group1

    如果您通常只针对一个群体,这将很有效。如果定位多个组,请考虑为每个组合创建一个新的父组,然后定位该组。

    【讨论】:

    • 我认为 group_name 没有重复,但使用 "hosts: all" 不同的 host_group inventory_hostname 像 ip 可能会重复!你最后的建议对我有用!
    【解决方案2】:

    首先,

    你可以把一个主机写成几个组。

    第二,

    在我看来,获取执行主机的 'group_name' 没有意义

    无论您使用什么 ad-hoc(playbook),都必须声明要执行命令(角色)的主机组,all 组必须写入您的 ansible 命令(角色)中,即使您要在其上执行所有主机。

    所以当命令(角色)运行时,你已经知道现在哪个组正在运行。

    第三,

    即使您在具有相同主机的两个组上运行命令(角色),为什么您想知道主机来自哪个组。

    更新:

    1.就像我的原始回复一样,您可以定义多个包含同一主机的组。

    例如,这是库存文件

    [production]
    machine01
    machine02
    [staging]
    mchines01
    

    并且在任务中使用这个判断条件。

    when:
      - inventory_hostname in groups['production']
    

    2.您还可以为特定任务添加标签。

    例如

    - name: set hostname
      hostname:
        name: machine03
      tags:
        - production
        - staging
    
    - name: reboot
      reboot:
        reboot_timeout: 1200
      tags:
        - staging
    

    使用 -t 选项运行 ansible-playbook commond

    -t TAGS, --tags=TAGS  only run plays and tasks tagged with these values
    

    【讨论】:

    • 我编写了一个剧本项目:1. 文件 site.yaml:主机全部 2. 文件生产:有许多用于生产的主机组 3. 文件暂存:有许多用于暂存的主机组 4. 角色有任务生产和登台 5. 当变量 group_name = "host_group_name" 时,我想做不同的任务
    • 很高兴我能帮上忙
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2021-01-17
    • 2012-08-24
    • 2017-12-27
    相关资源
    最近更新 更多