Привет!
Пишу, я значит, простую (казалось) роль для создания пользователей и групп на узлах в сети, копирование ключей и т.п.
Вот пример вводной конфигурации:
users:
woozymasta:
enabled: yes
sudoers: yes
comment: 'Woozy Masta'
group: 'ops'
shell: '/bin/bash'
groups: [ sudo, wheel, docker, lxd, adm ] # Зоопарк дистрибутивов
some_user:
enabled: yes
ОК, первые шаги идут, пользователь создан, теперь нужно добавить группы и только те что есть на узле.
Казалось не проблема, получмем список групп, если желаемой группы нет в списке то её просто не добавляем к пользователю.
- name: Get available groups list
getent:
database: 'group'
split: ':'
- name: Add additional groups to user if group exsist
user:
name: "{{ item.key }}"
groups: "{{ item.value.groups | default('') }}"
append: yes
loop: '{{ users|dict2items }}'
when: item.value.groups.key in getent_group
Но на проверке when: item.value.groups.key in getent_group
падаем с логичной ошибкой, что в списке нет такого атрибута как ключ.
The conditional check 'item.value.groups.key in ansible_facts.getent_group' failed. The error was: error while evaluating conditional (item.value.groups.key in ansible_facts.getent_group): 'list object' has no attribute 'key'
Но вот как решить эту задачу так и не понял, subelements
крутил по всякому, join
-ом и map
-ом пытался обработать, в json даже превращал, как только не куртил но успеха не добился.
Помогите пожалуйста эту проверку сделать правильно.
ignore_errors
не использую, должно же быть элегантное решение.