Ansible 使用具有多个权限的rabbitmq_用户模块
我正在处理RabbitMQ Ansible角色,我必须编写专门用于用户创建和配置的任务 我在剧本中定义了以下变量:Ansible 使用具有多个权限的rabbitmq_用户模块,ansible,Ansible,我正在处理RabbitMQ Ansible角色,我必须编写专门用于用户创建和配置的任务 我在剧本中定义了以下变量: vars: - rabbitmq_resources: - type_resource: "vhost" name: "/test" node: "rabbit@host1ansible" - type_resource: "vhost" name: "/other" node: "ra
vars:
- rabbitmq_resources:
- type_resource: "vhost"
name: "/test"
node: "rabbit@host1ansible"
- type_resource: "vhost"
name: "/other"
node: "rabbit@host1ansible"
- type_resource: "user"
name: "rabbitmqadmin"
password: "rabbitmqadmin"
permissions:
- vhost: "/test"
configure_priv: ".*"
read_priv: ".*"
write_priv: ".*"
- vhost: "/other"
configure_priv: ".*"
read_priv: ".*"
write_priv: ".*"
tags: "administrator"
state: present
然后,我想编写专用于用户处理的任务代码:
- name: Creating RabbitMQ users
rabbitmq_user:
name: "{{ item.name|mandatory }}"
permissions:
vhost: "{{ item.value.vhost }}"
configure_priv: "{{ item.value.configure_priv }}"
read_priv: "{{ item.value.read_priv }}"
write_priv: "{{ item.value.write_priv }}"
tags: "{{ item.tags }}"
state: present
with_subelements:
- "{{ rabbitmq_resources }}"
- type_resource
- permissions
when: item.type_resource == "user"
上面的语法生成一条消息“subelements lookup需要两个或三个项目的列表,可选的第三个项目必须是带有skip_missing标志的dict”
我测试了各种循环语法(使用_项、子元素和dict),但仍然找不到正确的循环语法
非常感谢您的帮助。您的方法不正确。您只需从dict中选择用户并在其上循环:
- name: Creating RabbitMQ users
rabbitmq_user:
name: "{{ item.name | mandatory }}"
permissions: "{{ item.permissions | default(omit) }}"
tags: "{{ item.tags | default(omit) }}"
state: present
with_items:
- "{{ rabbitmq_resources | selectattr('type_resource','equalto','user') | list }}"
最后,我决定用JSON数组替换权限列表:
权限:[{“vhost”:“/test”、“configure_priv”:“*”、“read_priv”:“*”、“write_priv”:“*”,
{“vhost”:“/other”、“configure_priv”:“*”、“read_priv”:“*”、“write_priv”:“*”}]
任务代码现在为:-名称:创建RabbitMQ用户
rabbitmq_用户:
名称:{{item.name |必选}}”
权限:“{item.permissions}}”
标记:“{item.tags}}”
国家:现在
带_项:“{rabbitmq_资源}”
时间:item.type_resource==“user”
它工作正常(默认值代码不包括)
Dan您所称的JSON数组与OP中的列表相同,只是以其他形式编写。