Я пытаюсь установить сразу несколько групп безопасности, используя модуль 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') }}"
Это работает, но может быть лучшее решение. :-)