字典中的Ansible循环列表并保留键

字典中的Ansible循环列表并保留键,ansible,yaml,firewalld,Ansible,Yaml,Firewalld,我试图使用从yaml文件导入的变量创建一系列firewalld规则。yaml文件创建了一个服务名称字典,相关端口是每个项目中的一个列表。yaml的一部分如下所示: --- myservice: description: My service desc ports: - 1234/tcp - 1235/tcp another: description: Another service ports: - 2222/tcp - 3333/tcp 到目前

我试图使用从yaml文件导入的变量创建一系列firewalld规则。yaml文件创建了一个服务名称字典,相关端口是每个项目中的一个列表。yaml的一部分如下所示:

---
myservice:
  description: My service desc
  ports:
    - 1234/tcp
    - 1235/tcp
another:
  description: Another service
  ports:
    - 2222/tcp
    - 3333/tcp
到目前为止,我的主要职责是:

- 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服务的第一个部分工作得很好,但是第二个部分让我很难理解如何在保留字典键的同时循环端口列表。我曾尝试使用子元素提取端口列表,但我不知道如何从键中保留服务名称。

使用。比如说

-调试:
msg:“{item.0.key}-{{item.0.value.description}}-{{item.1}”
带_子元素:
-“{services | dict2items}”
-value.port
给予

“msg”:“myservice-My-service desc-1234/tcp”
“msg”:“myservice-myservice desc-1235/tcp”
“msg”:“另一个-另一个服务-2222/tcp”
“msg”:“另一个-另一个服务-3333/tcp”