Ansible 使用具有多个权限的rabbitmq_用户模块

Ansible 使用具有多个权限的rabbitmq_用户模块,ansible,Ansible,我正在处理RabbitMQ Ansible角色,我必须编写专门用于用户创建和配置的任务 我在剧本中定义了以下变量: vars: - rabbitmq_resources: - type_resource: "vhost" name: "/test" node: "rabbit@host1ansible" - type_resource: "vhost" name: "/other" node: "ra

我正在处理RabbitMQ Ansible角色,我必须编写专门用于用户创建和配置的任务

我在剧本中定义了以下变量:

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中的列表相同,只是以其他形式编写。