Назад | Перейти на главную страницу

Ansible для Windows: членство в тестовой группе

Используя Ansible 2.2.1, мне нужно проверить членство в группе для данного пользователя.

  - name : get users details
    win_user:
      name: "{{ myUser }}"
      state: query
    register: userData

  - debug:
      msg: "userData.groups : {{ userData.groups }}"

Теперь я хотел бы проверить, принадлежит ли myUser к "myGroup" (с myGroup="Administrators" например) в пределах when состояние. В userData.groups является:

ok: [test-machine] => {"msg": "userData.groups: [{u'path ': u'WinNT: // WORKGROUP / TEST-MACHINE / Administrators', u'name ': u'Administrators' }, {u'path ': u'WinNT: // WORKGROUP / TEST-MACHINE / Пользователи монитора производительности', u'name ': u'Пользователи монитора производительности'}] "}

Итак, мы видим, что мой пользователь принадлежит к двум группам: «Администраторы» и «Пользователи монитора производительности».

Как написать оператор when для проверки принадлежности пользователя к определенной группе?

Я пробовал несколько комбинаций with_elements, with_dict пока безуспешно.

Ты можешь использовать map фильтр чтобы извлечь список групп для учетной записи и проверить членство с in оператор:

- debug:
    msg: "membership confirmed"
  when: "'Administrators' in (userData.groups | map(attribute='name') | list)"

Если заменить строку Administrators с myGroup переменная, кавычки обертывания не нужны:

- debug:
    msg: "membership confirmed"
  when: myGroup in (userData.groups | map(attribute='name') | list)
  vars:
    myGroup: Administrators

Альтернативный способ (немного менее понятный, чем приведенный выше) - использовать selectattr с участием search или match фильтры и проверьте, не был ли полученный список пустым. Фильтры допускают частичные совпадения (search) или регулярные выражения (match). Например:

- debug:
    msg: "membership confirmed"
  when: userData.groups | selectattr('name', 'matches', 'Dom.*Adm.*') | list | length > 0

Я думаю, это то, что вы ищете:

---

- hosts: localhost
  gather_facts: no
  vars:
    groupdict:
      - name: 'Administrators'
        path: 'WinNT://WORKGROUP/TEST-MACHINE/Administrators'
      - name: 'Performance Monitor Users'
        path: 'WinNT://WORKGROUP/TEST-MACHINE/Performance Monitor Users'

  tasks:
    - debug: msg="{{ groupdict }}"

    - debug:
        msg: "is admin"
      with_items: "{{ groupdict }}"
      when: item.name == "Administrators"

Поскольку я не часто использую окна, я просто создал вместо них переменную. в основном вы хотите перебрать список: with_items: "{{ userData.groups }}" тогда вы хотите соответствовать так: when: item.name == "Administrators". Вы также можете заменить "Администраторы" переменной