Ansible の新機能 - タイプに応じてサーバーにユーザーを追加する

Ansible の新機能 - タイプに応じてサーバーにユーザーを追加する

私は Ansible を使い始めたばかりで、user_type (定義しようとしている) に応じてサーバー グループにユーザーを追加するプレイブックを作成しようとしています...

それで...私のプレイブックはこんな感じです...

- name: add user  
      user:  
        name={{ item }}  
        state=present  
        shell=/bin/bash  
      with_items: "{{ userlist }}"  
      tags: add_new_user  
      become: true  

userlist別の yml ファイルで定義されます:

---
userlist:
user1
user2
user3

私のホスト ファイルには 3 つのグループが定義されています。

[grp1]
192.168.0.0
192.168.0.1

[grp2]
192.168.0.0
192.168.0.3

[grp3] 
192.168.0.4

私が考えているのは、これらの grp タイプをユーザーリストに追加することです。次のようになります。

---
userlist:
user1  grp1
user2  grp2
user3  grp3

一体どうやってプレイブックがどのユーザーをどのサーバーに追加するのかを解明しようとしているのですが、プレイブックが user1 が grp1 のサーバーに追加されることを認識できるように別の変数を宣言する必要があることはわかっていますが、方法がわかりません。

答え1

簡単な方法は、グループ変数:

サーバーごとにユーザーが 1 人しかいない場合は、インベントリで定義できます (ループしないようにプレイを調整し、newuser代わりに as var を使用する必要があります)。

[grp1:vars]
newuser=user1

ユーザーが複数いる場合は、YAMLインベントリ(iniではなく)またはグループvarファイルを使用する必要があります。group_varsインベントリファイルを含むディレクトリの下に、グループごとに1つのファイルを含むサブディレクトリを作成します。例:

$ cat grp1

userlist: 
   - user1
   - user2   

そして、userlistグループごとに個別に定義されます。

答え2

簡単な方法は、ホスト変数またはホストグループ変数を使用することです。その方法については、こちらで読むことができます。アンシブルマニュアルもう一つのより高度なオプションは、カスタムファクトまたはスクリプトを使用することです。予期しない動作を回避するには、変数の順序について理解しておく必要があります。

また、いくつかの小さな構文エラーを指摘したいと思います。宣言を accolade({) で始めることはできません。また、1 行に 1 つの宣言を入れる場合はコロンを使用します。次のようになります。

インベントリファイル:

[grp1]
host1
host2
host3

[grp2]
host4
host5
host6

[grp3]
host1
host4

プレイブック.yml:

- hosts: all
  become: true
  tasks:
    - name: adding users to x
      user:  
        name: "{{ item }}  "
        state: present  
        shell: /bin/bash  
      with_items: "{{ userlist }}"  
      tags: add_new_user  

group_vars/grp1.yml:

---
userlist:
  - user1
  - user2
  - user3

ホスト変数/host5.yml

---
userlist:
  - user1
  - user4
  - user10

関連情報