インフラ

【Ansible】playbookを分割してユーザ作成・グループ作成をする

以前、ユーザの作成をやってみたのですが、今回はplaybookを分けてやってみます。

playbookを分けると、再利用性や可読性が高まります。

効率よく公開鍵を配布する方法 Ansibleで複数のサーバとユーザに公開鍵を登録する複数のユーザを作成して、それぞれ公開鍵を配置したい時がたまにあります。 sshして公開鍵を置くのは、面倒です。1台とかだったらいいかもし...

Contents

フォルダ構造

|--ansible
|  |--group_vars
|  |  |--all.yml
|  |--inventory
|  |--playbook.yml
|  |--roles
|  |  |--groups
|  |  |  |--tasks
|  |  |  |  |--main.yml
|  |  |--users
|  |  |  |--tasks
|  |  |  |  |--main.yml
|--publickey
|  |--user1
|  |--user2
|  |--user3

https://github.com/msato0731/ansible_useradd_role

各フォルダについて

group_vars

playbookで使う変数を入れておくところ。
今回は、ユーザとグループで使う変数を入れておきました。

unix_groups:
  - { name: "testgroup", gid: 1101, state: "present" }

unix_users:
  - { name: 'user1', uid: 1101, group: 'testgroup'  }
  - { name: 'user2', uid: 1102, group: 'testgroup' }
  - { name: 'user2', uid: 1103, group: 'testgroup' }

inventory

hostsファイルを入れておくところです。hostsを入れておくことで実行するターゲットを指定できます。
今回は、localhost(自分自身)に実行するので空になっています。

playbook.yml

ansible実行時に指定するplaybookです。
「roles」とすることで、「roles」フォルダ内の
「users」と「groups」を読み込んで実行するようになっています。

- hosts: localhost
  become: yes
  become_user: root
  roles:
    - groups
    - users

roles

ここで実行される処理を定義します。
main.ymlが実行される処理になっています。

groups/tasks/main.yml

- name: Add unix groups
  group:
    name: "{{ item.name }}"
    gid: "{{ item.gid }}"
    state: "{{ item.state }}"
  with_items:
    - "{{ unix_groups }}"

users/tasks/main.yml

- name: add a new user      #Linuxユーザの作成
  user:
    name: "{{ item.name }}"
    uid: "{{ item.uid }}"
    state: present
  with_items:
    - "{{ unix_users }}"

- name: mkdir .ssh          #.sshフォルダの作成
  file:
    dest: "/home/{{ item.name }}/.ssh/"
    state: directory
    owner: "{{ item.name }}"
    group: "{{ item.group }}"
    mode: 0700
  with_items:
    - "{{ unix_users }}"

- name: authorized key is deployed
  copy:
    src: "/home/bastion_admin/publickey/{{ item.name }}"
    dest: "/home/{{ item.name }}/.ssh/authorized_keys"
    owner: "{{ item.name }}"
    group: "{{ item.group }}"
    mode: 0600
  with_items:
    - "{{ unix_users }}"

publickey

publickeyフォルダには、ユーザの公開鍵を置いておきます。
playbookが実行されると、作成されたユーザの.ssh配下にコピーされます。
ファイル名は、ユーザの名前にしています。

playbookを実行する

ansibleフォルダ内に移動して、ansible-playbookを実行します

$ cd /home/testuser/ansible
$ ansible-playbook playbook.yml

まとめ

playbookの分割知らなかった時は、一つのplaybookに全て書いてしまい見にくかったです。
playbookを分割することでコードを見易くすることができました。
誰が見ても理解しやすいコードやフォルダ構造を意識してplaybookを作っていきたいです。
 

Amazonで「Ansible」の本をみてみる!!

効率よく公開鍵を配布する方法 Ansibleで複数のサーバとユーザに公開鍵を登録する複数のユーザを作成して、それぞれ公開鍵を配置したい時がたまにあります。 sshして公開鍵を置くのは、面倒です。1台とかだったらいいかもし...
[Ansible入門]俺でもできた!Vagrantを使ってAnsible環境を作る(MAC・Windows)VagrantでAnsible練習用の環境を作ります。Mac向けの手順となっていますが、Windowsでもできるよう注釈を入れています。...
現役インフラエンジニアが選ぶUdemyインフラ系のおすすめコース3選動画学習プラットフォームUdemyのインフラ系おすすめコースを厳選しました。どのコースも基礎から学べるので、インフラ経験が浅い人にもおすすめです。...