当组参数与名称参数匹配时(例如创建用户和组名),Ansible 用户模块失败

当组参数与名称参数匹配时(例如创建用户和组名),Ansible 用户模块失败

尝试创建一个 Ansible 剧本来创建用户(用户模块) 在 RH/Cent 系统上(例如 useradd)。

每当我添加组参数时,剧本都会失败,尽管将组值设置为与新用户的“名称”参数值匹配。如果我省略组参数/值,剧本就会正常工作。

在创建具有与其用户名(相同值)匹配的主组的用户时,是否永远不应该使用组参数?

如果是这样,并且 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

答案1

你可以看看你的发行版中 ansible 内部发生了什么

阅读模块的源代码后,在CentOS环境中,您的问题的答案是:

  • 如果指定主要组(无论它是什么),则该组必须在运行模块之前存在
  • 如果您未指定主要组,模块将依靠 useradd 自动将用户添加到同名组。如果该组已存在,模块将负责添加标志-N以绕过任何潜在错误。

话虽如此,我不会依赖任何这些机制,并且会在模块中明确使用它们之前系统地创建所需的组,user因为:

  1. 就你的整个剧本的运行时间而言,它不会产生太大的影响。
  2. 几个月后,其他人(包括你)会更容易阅读和理解你的代码。
  3. 它更加不可知,并且可以在需要时在各种各样的操作系统上运行(macOS,*BSD,...),重现相同的结果(幂等性),其中默认值可能不同(例如,将新用户添加到系统users组...)

相关内容