Ansible の ansible.builtin.user モジュール を使用すると、ターゲットノード上に指定したユーザーを作成することができます。 このモジュールは、既存のユーザーの情報を変更する場合にも使えるので、例えば、あるユーザーを指定したグループに参加させる、といったことが可能です。
次の Playbook では、ユーザー maku
をグループ docker
に参加させています。
ユーザーが存在しない場合は、ユーザー自体の作成も行います。
- hosts: all
become: true
tasks:
- name: Append the group 'docker' to the user's groups
ansible.builtin.user:
name: maku
groups: [docker]
append: yes
注意点としては、groups
でグループ名を列挙すると同時に、append: yes
と指定するところです。
この指定により、ユーザー maku
がすでに存在している場合に、現在のグループ情報はそのままで、追加で docker
グループに参加するという意味になります。
逆に、純粋に docker
グループにしか参加していないユーザーにしたいのであれば、append: yes
の指定は省略して次のように記述すれば OK です(デフォルトは append: false
です)。
ansible.builtin.user:
name: maku
groups: [docker]
ユーザー名をハードコードするのではなく、SSH 接続しているカレントユーザーを対象にしてグループ参加させたいときは、ユーザー名として "{{ ansible_facts.env.SUDO_USER }}"
を指定します。
これにより、sudo
実行前のユーザー名を取得できます。
- hosts: all
gather_facts: true
become: true
tasks:
- name: Append the group 'docker' to the current user's groups
ansible.builtin.user:
name: "{{ ansible_facts.env.SUDO_USER }}"
groups: [docker]
append: yes
似たような変数に {{ ansible_user_id }}
がありますが、この値は sudo
した結果のユーザー名である root
になるので注意してください(become: true
していない場合は恐らく同じ値になります)。
関連記事
- Ansible で facts 情報を表示する
- Ansible タスク例: Docker と Docker Compose をインストールする
- Ansible タスク例: 任意のコマンドを実行する (ansible.builtin.command/shell)
- Ansible タスク例: 空のディレクトリを作成する (ansible.builtin.file)
- Ansible タスク例: 空のファイルを作成する (ansible.builtin.file)
- Ansible で VPS を設定するための準備
- Ansible で SSH サーバーをセキュアにする (ansible.builtin.lineinfile, ansible.builtin.service)