Используя 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"
. Вы также можете заменить "Администраторы" переменной