Требуется создать пользователей и пароли для 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.
Готово.