【问题标题】:Ansible how to run task only on groups mentioned in playbook and skip other groups even though same host part of other groupAnsible 如何仅在剧本中提到的组上运行任务并跳过其他组,即使其他组的主机部分相同
【发布时间】:2021-04-28 17:28:17
【问题描述】:

我有一个对 mongo 副本和仲裁器通用的角色,并且为每个副本和仲裁器分别设置主机组,因为该角色应该支持同一主机和不同主机上的仲裁器。

主持人:

[replicas]
127.0.0.1
127.0.0.2

[arbiter]
127.0.0.2

角色内部的任务:

- name: Run only on replicas
  debug msg=" Only on replica"
  when: '"replicas" in group_names'

- name: Run only on the arbiter
  debug: msg="Only on the arbiter"
  when: '"arbiter" in group_names'

剧本:

- hosts: replicas
  roles:
    - role: "common"
    - role: "replica"

- hosts: arbiter
  roles:
    - role: "common"
    - role: "arbiter'  

副本上运行时的预期输出:

TASK [debug] *********************************************************************************************************************************************
ok: [127.0.0.1] => {
    "msg": " Only on replica"
}
ok: [127.0.0.2] => {
    "msg": " Only on replica"
}

TASK [debug(arbiter)] *********************************************************************************************************************************************
skipping: [127.0.0.1]
skipping: [127.0.0.2]

但未按预期跳过仲裁任务因为同一主机是副本组的一部分。以下是实际输出。 实际输出:

TASK [debug] *********************************************************************************************************************************************
ok: [127.0.0.1] => {
    "msg": " Only on replica"
}
ok: [127.0.0.2] => {
    "msg": " Only on replica"
}

TASK [debug(arbiter)] *********************************************************************************************************************************************
skipping: [127.0.0.1]
ok: [127.0.0.2] => {
    "msg": " Only on replica"
}

如何在 playbook 委派的特定组上运行?

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    你好,你可以使用这个方法: 剧本:

    - hosts: replicas
      roles:
        - { role: common, vars: { group: "replicas" } }
        - { role: replica, vars: { group: "replicas" } }
    
    - hosts: arbiter
      roles:
        - { role: common, vars: { group: "arbiter" } }
        - { role: arbiter, vars: { group: "arbiter" } }
    

    在你的角色内部:

    - name: Run only on replicas
      debug msg=" Only on replica"
      when: group == "replicas"
    
    - name: Run only on the arbiter
      debug: msg="Only on the arbiter"
      when: group == "arbiter"
    

    希望能帮助您解决问题。

    【讨论】:

    • 这行得通,我已经有类似的变量,只是看看有没有像playbook_hosts这样的ansible默认值。
    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多