【问题标题】:How to iterate over dictionary subitems with multiple different items in Ansible如何在 Ansible 中迭代具有多个不同项目的字典子项目
【发布时间】:2020-05-20 18:34:05
【问题描述】:

感谢大家的帮助,

我有兴趣了解如何设置具有以下结构的 vars 文件以及如何在字典中迭代多个深度嵌套的项目。最终目标是在匹配多个或单个角色或由特定团队或团队使用的主机上执行任务。

1) 这个结构正确吗?我见过这么多不同的例子,我不确定了......

2) 是否有可能通过匹配单个角色但匹配多个团队来在多个主机上执行任务?

3) 我如何遍历字典并从具有多个项目的子元素中获取单个项目,例如 "teams: sales" 或 "teams: dev" ?例如,我想在 host1 上执行任务,并匹配我为他们提供的操作以及开发和销售团队文件。例如,将文件复制到该主机上的团队目录。 Host2 有不同的团队,因此可以使用相同的任务,但仅将文件传送到该单个主机上的那些团队目录。

4) 相同的愿望将适用于每个主机的角色...能够为单个主机具有多个角色,但匹配角色值(两个角色或单个角色)。

不管怎样,我已经看了很多东西,但我还没有找到适合这个的东西,但我觉得有可能——有点像??

### hostmap.yml

---
host_team_map:
  host_list:
    host1:
      comment: "host description"
      application_role: [ 'role1', 'role2' ]  <----------- multiple subitems
      teams: [ 'operations', 'dev', 'sales' ]    <----------- multiple subitems
    host2:
      comment: "host description"
      application_role: [ 'role3' ]
      teams: [ 'operations', 'dev' ]
    host3:
      comment: "host description"
      application_role: [ 'role3', 'role4' ]
      teams: [ 'operations' ]

再次感谢您的帮助!

【问题讨论】:

  • 从你的问题中我并不完全清楚你想要做什么,但看看你的 hostmap.yml 文件,它看起来应该只是一个库存文件。

标签: ansible


【解决方案1】:

所以,如果我理解得很好,您想为主持人应用角色列表,并且从这个角色中,只有基于团队元素的部分任务。

如果是这种情况,那么对于每个角色,您可能拥有一个包含团队名称的任务文件,并使用 include_role 模块:https://docs.ansible.com/ansible/latest/modules/include_role_module.html

这是你可以做的一个例子:

1) 正如@larsks 建议的那样,您应该在清单中放置必要的变量(因此,具有application_roleteams 特定于“当前”主机) 例如在host_vars:

### host1.yml
---
application_role:
  - role1
  - role2
  - ...
teams:
  - dev
  - operation
  - ...

2) 角色目录结构示例:

roles/
  role1/
    tasks/
      operation.yml
      dev.yml
      ...
  role2/
    tasks/
      dev.yml
      ...

3) 剧本中的任务:

- name: Apply every role, but only the teams part
  include_role:
    name: "{{ item.0 }}"
    tasks_from: "{{ item.1 }}"
  loop: "{{ application_role|product(teams)|list }}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多