Назад | Перейти на главную страницу

Вложенный цикл модуля облачного стека 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

Я просто не могу заставить это работать, используя какой-либо цикл, потому что группа безопасности может иметь произвольное количество портов. Я что-то упускаю или это совершенно неправильный подход?

Я вроде решил проблему.

- 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') }}"

Это работает, но может быть лучшее решение. :-)