Ansible 云堆栈模块嵌套循环用于安全组和端口

Ansible 云堆栈模块嵌套循环用于安全组和端口

我正在尝试使用 ansible cloud stack 模块一次设置多个安全组。yaml 文件当前如下所示:

- name: add inbound tcp rules to security group web
  cs_securitygroup_rule:
  security_group: web
  start_port: "{{ item }}"
  end_port: "{{ item }}"
  loop:
    - 80
    - 443

问题是安全组的数量可能非常多。因此,此代码块会不断重复,这似乎不是一个好的解决方案。因此,我想将整个过程变成一个循环,并使用字典传递参数。数据结构云如下所示:

cs_security_groups:
  web:
    - 80
    - 443
  monitor:
    - 9090
    - 9100
    - 9333
  default:
    - 22

我根本无法使用任何类型的循环来实现这一点,因为安全组可以有任意数量的端口。是我遗漏了什么,还是这种方法完全错误?

答案1

我差不多解决了这个问题。

- name: add inbound port(s) to the security groups
  cs_securitygroup_rule:
    security_group: "{{ item.0.key }}"
    port: "{{ item.1 }}"
  loop: "{{ cs_security_groups | dict2items | subelements('value') }}"

这可行,但可能有更好的解决方案。:-)

相关内容