質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

1933閲覧

Ansibleで複数のユーザを作成する方法

papachiropa

総合スコア14

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/05/19 10:27

編集2020/05/20 01:58

Ansibleを用いて構築対象サーバ(192.168.100.251)にグループxとユーザa,bを新規で作成し、
a,bをxに所属させたいのですがエラーが出ます。OSはAnsible操作端末も構築対象サーバもCentOS7です。

/tmp/group_vars/user_groups.yml(※以降、ハイフン前の「'」は無視して下さい)

user_groups:

'- { name: 'x', gid: 100 }

/tmp/group_vars/users.yml

users:

'- { name: 'a', uid: 123, group: 'x' }
'- { name: 'b', uid: 124, group: 'x' }

/tmp/setup.yml

  • hosts: 192.168.100.251
remote_user: root become: true roles: '- setup vars_files: '- group_vars/user_groups.yml '- group_vars/users.yml

/tmp/roles/useradd/task/create_user_group.yml

'- hosts: 192.168.100.251

remote_user: root
become: true
tasks:
'- name: create group
group:
name: "{{ item.name }}"
gid: "{{ item.gid }}"
state: present
with_items:
'- "{{ user_groups }}"

'- name: create user
user: name: "{{ item.name }}" uid: "{{ item.uid }}" groups: "{{ item.group }}" with_items: '- "{{ users }}"

実行結果

[root@HOGE tmp]# ansible-playbook /tmp/roles/useradd/task/create_user_group.yml

PLAY [192.168.100.251] ****************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************
Enter passphrase for key '/root/.ssh/id_rsa':
ok: [192.168.100.251]

TASK [create group] *******************************************************************************************************************************
fatal: [192.168.100.251]: FAILED! => {"msg": "'user_groups' is undefined"}
to retry, use: --limit @/tmp/roles/useradd/task/create_user_group.retry

PLAY RECAP ****************************************************************************************************************************************
192.168.100.251 : ok=1 changed=0 unreachable=0 failed=1

修正致しました。
ご教示いただけますと幸いです。宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

addgroup.yml や adduser.yml はどのように読み込んでいるでしょうか。

投稿2020/05/19 18:23

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/05/20 01:54 編集

確かに言われて気付きました。 しかし下記サイトのsetup.ymlを参考にaddgroup.yml や adduser.yml を 読み込ませるymlを作成して再実行したのですが、 「{"msg": "'user_groups' is undefined"}」というエラーが出てしまいます。 https://qiita.com/bebeken0815/items/4c5a9af316366b71b259
SugiTK

2020/05/20 01:59

ディレクトリ構造はそのリンク先に書いてあるようにしないといけないのですが、同じようになってますでしょうか。
papachiropa

2020/05/20 02:09

ディレクトリ構成は同じですが、もしかしたら/tmp配下で このディレクトリ構成を作ってるから上手くいかないかもしれないです。 Ansibleをインストールしたときに出来た/etc/ansibleディレクトリ配下でやってみようと思います。
SugiTK

2020/05/20 02:35

細々と指摘するのは大変なので全体的に修正してみました。 https://github.com/sugitk/createuser ・task を tasks に ・tasks/main.yml には play を書かない ・role の指定はディレクトリ名と合わせる 作成するディレクトリは /tmp でも /etc/ansible でもどこでも同じです。 確認してみてください :)
SugiTK

2020/05/20 02:46

group_vars ディレクトリを作っているのに変数が書いてあるファイルを指定して読み込んでいるのも Ansible 的には不自然なので、さらに修正してみました。 https://github.com/sugitk/createuser
papachiropa

2020/05/20 04:30

ご丁寧にありがとうございます。 実行してみると、下記のように「TASK [Gathering Facts] 」のところで固まってしまいます。 [root@HOGE tmp]# ansible-playbook setup.yml -i inventory -k SSH password: PLAY [target] ************************************************************************************************************************************ TASK [Gathering Facts] *************************************************************************************************************************** おそらくinventoryファイルに関する自分の記載が誤っていると思います。 頂いたURLを基に下記のようにしたのですが… [root@HOGE tmp]# cat inventory [target] 192.168.100.251 [target]部分は 構築対象サーバのホストグループを書くと思うのですが 正直ホストグループに関しては調べてもどのように設定していいのか分かりません。 今までplaybook実行時にinventoryを指定したことがなかったので困っております。 すみませんが、教えて頂きたいです。
SugiTK

2020/05/20 04:39 編集

gather_facts: false を追加してみるといかがでしょう。 なんらかの理由で facts の収集に時間がかかっているようです。 inventory ファイルはそれで正しいです。 ~~~ ここから - hosts: target gather_facts: false remote_user: root roles: - useradd ~~~ ここまで もしくは -k を外して試してみてください。 Enter passphrase for key '/root/.ssh/id_rsa': で止まっているようであれば、パスフレーズを入力してください。
papachiropa

2020/05/20 05:31

無事動きました。丁寧に解説頂き、ありがとうございました!
SugiTK

2020/05/20 05:37

よかったです :)
papachiropa

2020/05/20 07:29

すみません。動いたのですが確認したく。 作成されたユーザaとbを構築対象サーバにて idコマンドで確認したところ、下記のようになりました。 [root@HOGE user]# id a uid=123(a) gid=2001(a) groups=2001(a),2000(x) [root@HOGE user]# id b uid=124(b) gid=2002(b) groups=2002(b),2000(x) 今回x(gid:2000)をメイングループとしたいので 想定としては [root@HOGE user]# id a uid=123(a) gid=2000(x) groups=2001(a) [root@HOGE user]# id b uid=124(b) gid=2000(x) groups=2002(b) 上記のようになると思ったのですが、 このようにすることは不可能でしょうか? 重ね重ね申し訳ございませんが、宜しくお願い致します。
SugiTK

2020/05/20 08:41 編集

--- a/roles/useradd/tasks/main.yml +++ b/roles/useradd/tasks/main.yml @@ -11,7 +11,7 @@ user: name: "{{ item.name }}" uid: "{{ item.uid }}" - groups: "{{ item.group }}" + group: "{{ item.group }}" state: present with_items: - "{{ users }}" このように変更することで groups=2000(x) とはなりますが、ご希望されるように作るのは adduser コマンドの仕様としてできないと思います。
papachiropa

2020/05/21 01:57

idコマンドで表示されるgidの値は仕様的にplaybook上では変えられないのですね。 分かりました。本当にありがとうございました。
guest

0

コードのインデントに問題がある可能性もありますので、上記のコードをMarkdown形式で修正していただけないでしょうか?

userモジュールのgroupsの値は配列でなければならないですが、ご確認ください。

投稿2020/05/19 10:58

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/05/20 02:03

すみません。Teratailでの空白の入れ方が分からず…出来る範囲で修正しました。 また、ぐぐってみたのですがわからなくて、配列とはどういった書式を指すのでしょうか?
comefigo

2020/05/20 07:06

配列とは以下のような書式になります。 書式は以下の様に2種類あり、好みや可読性を考慮して使い分けてください。 ---------------------------- my_list: - "1" - "2" ----------------------------- もしくは ----------------------------- my_list: ["1", "2"] -----------------------------
papachiropa

2020/05/20 07:17

分かりやすく教えて頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問