web-dev-qa-db-ja.com

グループパラメーターが名前パラメーターと一致すると、Ansibleユーザーモジュールが失敗します(ユーザーとグループ名の作成など)

RH/Centシステム(例:useradd)でユーザー( ユーザーモジュール )を作成するためにAnsibleプレイブックを作成しようとしています。

新しいユーザーの「名前」パラメーター値と一致するようにグループ値を設定したにもかかわらず、グループパラメーターを含めるとプレイブックが失敗します。グループのパラメータ/値を省略すると、プレイブックは機能します。

ユーザー名(同じ値)と一致する独自のプライマリグループを持つユーザーを作成する場合は、グループパラメーターを使用しないでください。

もしそうなら、そしてそのようなユースケースではグループパラメータが省略されるように設計されているのに、なぜこれほど多くの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
2
Bryan

ディストリビューションのansibleで内部的に何が起こっているかを見ることができます

モジュールのソースコードを読んだ後、あなたの質問に対する答えは、CentOSのコンテキストでは次のとおりです。

  • プライマリグループ(それが何であれ)を指定する場合、このグループはモジュールを実行する前に存在している必要があります
  • プライマリグループを指定しない場合、モジュールはuseraddに依存して、同じ名前のグループにユーザーを自動的に追加します。そのグループがすでに存在する場合、モジュールは-Nフラグを追加して、潜在的なエラーを回避します。

そうは言っても、私はこれらのメカニズムのいずれにも依存せず、userモジュールで明示的に使用する前に、必要なグループを体系的に作成します。理由は次のとおりです。

  1. プレイブック全体の実行時間に関しては、それほど大きな違いはありません。
  2. 数か月後に誰かがあなたのコードを選んだ方が(あなたを含めて)読みやすく、理解しやすいです。
  3. それはより不可知論的であり、必要に応じてはるかに多様なOS(macOS、* BSD、...)で動作し、デフォルトが異なる可能性がある同じ結果(べき等)を再現します(たとえば、usersシステムグループに新しいユーザーを追加します)。 。)
1
Zeitounator