Требуется создать пользователей и пароли для RabbitMQ, используя плагин rabbitmq_user.
При этом хочется не создавать несколько переменных и несколько задач, а всё выполнить в одном цикле, но у каждой переменной должно быть несколько полей и значений.
Используем with_dict и словарь в переменных.
В файле roles/roles/rabbitmq/vars/main.yml добавляем:
rabbitmq_users: user1: password: "pass1" vhost: "/" configure_priv: .* read_priv: .* write_priv: .* tags: "administrator" user2: password: "pass2" vhost: "/project2" configure_priv: .* read_priv: .* write_priv: .* user3: password: "pass3" vhost: "/project3" configure_priv: .* read_priv: .* write_priv: .* user4: password: "pass4" vhost: "/project4" configure_priv: .* read_priv: .* write_priv: .*
Далее в плейбуке добавляем задачу:
...
- name: Add RabbitMQ users
rabbitmq_user:
user: "{{ item.key }}"
password: "{{ item.value.password }}"
permissions:
- vhost: "{{ item.value.vhost }}"
configure_priv: .*
read_priv: .*
write_priv: .*
tags: "{{ item.value.tags }}"
state: present
with_dict: "{{ rabbitmq_users }}"
...
В item.key — получаем имя пользователя, а через item.value.valuename — элементы массива/словаря.
Запускаем:
[simterm]
...
TASK [rabbitmq : Add RabbitMQ users] ****
ok: [dev.mobilebackend.domain.world] => (item={'key': 'user1', 'value': {'password': 'pass1', 'vhost': '/', 'tags': 'administrator'}})
changed: [dev.mobilebackend.domain.world] => (item={'key': 'user2', 'value': {'password': 'pass2', 'vhost': '/project2', 'tags': 'management'}})
changed: [dev.mobilebackend.domain.world] => (item={'key': 'user3', 'value': {'password': 'pass3', 'vhost': '/project3', 'tags': 'management'}})
changed: [dev.mobilebackend.domain.world] => (item={'key': 'user4', 'value': {'password': 'pass4', 'vhost': '/project4', 'tags': 'management'}})
...
[/simterm]
Проверяем:
[simterm]
root@bm-backed-app-dev:/home/admin# curl -i -u user2:pass2 http://localhost:15672/api/whoami
HTTP/1.1 200 OK
vary: Accept-Encoding, origin
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
Date: Fri, 06 Jul 2018 11:27:44 GMT
Content-Type: application/json
Content-Length: 35
Cache-Control: no-cache
{"name":"user2","tags":"management"}
[/simterm]
Использование тегов пользователей есть в Permissions.
Готово.