Ansible - не удалось найти пользователя
Как я могу решить проблему с выполнением заданной роли ниже? Если пользователь не существует на удаленном сервере, ansible получает сообщение об ошибке "Не удалось найти пользователя test1:" getpwnam(): имя не найдено: test1". Мне нужно управлять несколькими пользователями на нескольких серверах. Спасибо
vars:
user_list:
- user: test1
state: present
path: /usr/local/test1/.ssh/authoried_keys
keys:
- "ssh-rsa test1"
- user: test2
state: absent
path: /home/test2/.ssh/authoried_keys
keys:
- "ssh-rsa test2"
tasks:
- name: Manage SSH-keys
authorized_key:
user: "{{ item.0.user }}"
key: "{{ item.1 }}"
path: "{{ item.0.path }}"
state: "{{ item.0.state }}"
with_subelements:
- '{{ user_list }}'
- keys
CentOS Linux 7, Ansible 2.4.2.0
2 ответа
Возможно, вы могли бы проверить существующих пользователей через оболочку ansible для getent? Это кажется немного проще, и вам не нужно использовать модуль оболочки:
tasks:
- name: Get existing users
getent:
database: passwd
- name: Disable expired users
user:
name: "{{ item.name }}"
shell: /sbin/nologin
with_items:
- "{{ users_removed }}"
when: item.name in getent_passwd.keys()
Обратите внимание, что, как указывает @techraf, в производственных средах вы всегда должны стремиться к объявлению и знанию заранее, какие пользователи должны и не должны присутствовать :)
Я думаю, что я решил свою проблему.
tasks:
- name: Check for users
shell: cat /etc/passwd | cut -f1 -d":"
register: sshkeys_users
changed_when: False
- name: Manage SSH-keys
authorized_key:
user: "{{ item.0.user }}"
key: "{{ item.1 }}"
path: "{{ item.0.path }}"
state: "{{ item.0.state }}"
with_subelements:
- '{{ user_list }}'
- keys
when: sshkeys_users is defined and item.0.user in sshkeys_users.stdout_lines