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

Модуль пользователя Ansible не работает, когда параметр группы соответствует параметру имени (например, создание имени пользователя и группы)

Попытка создать Ansible playbook для создания пользователя (пользовательский модуль) в системе RH / Cent (например, useradd).

Плейбук терпит неудачу каждый раз, когда я включаю параметр группы, несмотря на то, что установил значение группы, соответствующее значению параметра «имя» для нового пользователя. Если я оставлю параметр / значение группы, playbook будет работать.

Следует ли НИКОГДА использовать параметр группы при создании пользователя с собственной основной группой, которая соответствует их имени пользователя (те же значения)?

Если это так, и параметр group предназначен для исключения в таком случае использования, почему так много примеров Ansible Galaxy создают группы перед пользователями и добавляют туда пользователя группы? Другими словами, зачем добавлять имя группы пользователей перед учетной записью пользователя в тех случаях, когда не назначается другая основная группа?

- name: "Adding testuser_01 user"
user: 
  append: yes
  # authorization: 
  comment: "testuser_01"
  create_home: yes
  expires: -1
  # Starting at Ansible 2.6, modify user, remove expiry time 
  # Had a bug until 2.6.4 but now fixed.  
  # Currently supported on GNU/Linux and FreeBSD.
  # CentOS /etc/default/useradd is empty string by default. 
  force: no
  generate_ssh_key: no
  group: 'testuser_01'          # Optionally sets the user's primary group (takes a group name).
  groups: nixadm
  # hidden: no
  # MacOS only - optionally hide the user from the login window and system preferences. Defaults yes
  home: /home/testuser_01
  # local: no                   # Read docs and check support
  # login_class:                # Optionally sets the user's login class, a feature of most BSD OSs.
  move_home: no
  name: testuser_01
  non_unique: no 
  password: "{{ mypw }}"
  password_lock: no 
  # profile:                    # Sets the profile of the user. Currently supported on Illumos/Solaris.
  remove: no
  # role:                       # Currently supported on Illumos/Solaris.
  # seuser:                     # Optionally sets the seuser type (user_u) on selinux enabled systems.
  shell: /bin/bash
  # skeleton: 
  # ssh_key_bits: 
  # ssh_key_comment: 
  # ssh_key_file: 
  # ssh_key_passphrase: 
  # ssh_key_type: 
  state: present
  system: no
  uid: 1001 
  update_password: on_create
register: testuser_01_added

Вы можете посмотреть, что происходит внутри вашего дистрибутива.

После прочтения исходного кода модуля ответ на ваш вопрос в контексте CentOS:

  • Если вы укажете основную группу (какой бы она ни была), эта группа должна существовать до запуска модуля.
  • Если вы не укажете основную группу, модуль будет полагаться на useradd для автоматического добавления пользователя в группу с тем же именем. Если эта группа уже существует, модуль позаботится о добавлении -N флаг для обхода любой потенциальной ошибки.

При этом я бы не стал полагаться ни на один из этих механизмов и систематически создавал бы необходимые группы, прежде чем использовать их явно в user модуль, потому что:

  1. это не будет иметь большого значения с точки зрения времени работы в вашей общей книге.
  2. его легче читать и понимать тем, кто выбирает ваш код через несколько месяцев (включая вас).
  3. он более агностичен и при необходимости будет работать с гораздо более широким спектром ОС (macOS, * BSD, ...), воспроизводя тот же результат (идемпотентность), где значения по умолчанию могут отличаться (например, добавление новых пользователей в users системная группа ...)