【问题标题】:Using rabbitmq_user module with multiple permissions使用具有多个权限的 rabbitmq_user 模块
【发布时间】:2017-01-15 01:47:14
【问题描述】:

我正在处理 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"

上面的语法会生成一条消息“子元素查找需要两个或三个项目的列表,可选的第三个项目必须是带有标志 skip_missing 的字典”。

我测试了各种循环语法(with_items、with_subelements、with_dict),但还是找不到合适的。

我们将不胜感激。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    您的方法不正确。您只需要从您的 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 }}"
    

    【讨论】:

      【解决方案2】:

      最后,我决定将权限列表替换为 JSON 数组:
      permissions: [{"vhost": "/test","configure_priv": ".*","read_priv": ".*","write_priv": ".*"}, {"vhost": "/other","configure_priv": ".*","read_priv": ".*","write_priv": ".*"}]

      现在任务代码是:
      - name: Creating RabbitMQ users rabbitmq_user: name: "{{ item.name|mandatory }}" permissions: "{{ item.permissions }}" tags: "{{ item.tags }}" state: present with_items: "{{ rabbitmq_resources }}" when: item.type_resource == "user"

      它工作正常(不包括默认值代码)。

      【讨论】:

      • 你所说的JSON数组是同一个列表,和OP中的一样,只是写成其他形式而已。
      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-06-20
      相关资源
      最近更新 更多