私は 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