【问题标题】:Ansible loop list in dictionary and retain the key字典中的 Ansible 循环列表并保留键
【发布时间】:2020-09-06 14:22:43
【问题描述】:

我正在尝试使用从 yaml 文件导入的变量创建一系列防火墙规则。 yaml 文件创建了一个服务名称字典,并且关联的端口是每个项目中的一个列表。 yaml 的一部分如下所示:

---
myservice:
  description: My service desc
  ports:
    - 1234/tcp
    - 1235/tcp
another:
  description: Another service
  ports:
    - 2222/tcp
    - 3333/tcp

我目前担任的 Ansible 角色是:

- name: Read services from file
  include_vars:
    file: "services.yml"
    name: services

- name: Create firewalld services
  command: >
    firewall-cmd --permanent
      --new-service={{ item.key }}
      --set-description="{{ item.value.description }}"
  register: addserv
  failed_when: addserv.rc != 26 and addserv.rc != 0
  changed_when: not "NAME_CONFLICT" in addserv.stderr
  with_dict: "{{ services }}"
  
- name: Add ports to firewalld service
  command: >
    firewall-cmd --permanent
      --service={{ item.key }} --add-port={{ item.value.ports }}
  register: addport
  changed_when: not "ALREADY_ENABLED" in addport.stderr

创建 firewalld 服务的第一部分工作正常,但我对如何在保留字典键的同时遍历端口列表的第二部分感到困惑。我已经尝试使用子元素来提取端口列表并且有效,但我无法弄清楚如何从密钥中保留服务名称。

【问题讨论】:

    标签: ansible yaml firewalld


    【解决方案1】:

    使用subelements。例如

        - debug:
            msg: "{{ item.0.key }} - {{ item.0.value.description }} - {{ item.1 }}"
          with_subelements:
            - "{{ services|dict2items }}"
            - value.ports
    

    给予

        "msg": "myservice - My service desc - 1234/tcp"
        "msg": "myservice - My service desc - 1235/tcp"
        "msg": "another - Another service - 2222/tcp"
        "msg": "another - Another service - 3333/tcp"
    

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2021-06-11
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多