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
Другие вопросы по тегам