【问题标题】:How to execute alternating roles in Ansible?如何在 Ansible 中执行交替角色?
【发布时间】:2018-07-31 14:58:47
【问题描述】:

我需要以某种方式循环变量列表并为每次迭代执行一次以下两个角色,在每次迭代时将变量传递给角色。比如给定一个100-101的变量列表,我需要按照role1:100、role2:100、role1:101、role2:101的顺序执行。变量 100-100 应该传递给角色内部的任务。

---
- hosts: group1
  tasks:
  - include_role:
      name: role1

- hosts: group2
  tasks:
  - include_role:
      name: role2

我将以下答案视为可能的解决方案,但我不确定如何使其适应我的需求。上面的场景可以在 Ansible 中完成吗?

Ansible: How to iterate over a role with an array?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    循环变量和角色名称的笛卡尔积:

    vars:
      roles_to_include:
        - role1
        - role2
      values_to_pass:
        - 100
        - 101
    
    tasks:
      - include_role:
          name: "{{ item.1 }}"
        vars:
          my_variable: "{{ item.0 }}"
        loop: "{{ values_to_pass | product(roles_to_include) | list }}"
    

    【讨论】:

    • 谢谢,这会按要求的顺序执行角色。另一个要求是role1 需要在一组主机(group1)上运行,而role2 需要在一组单独的主机(group2)上运行。到目前为止,我已经能够使用单个主机组进行上述操作,如何调整它以在单独的主机组上运行每个角色?
    • 我能够通过向每个角色内的任务添加一个条件来完成我在上述评论中提出的问题,如下所示:when: "'group1' in group_names"。
    猜你喜欢
    • 2014-01-30
    • 2021-02-04
    • 2022-01-25
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多