LoginSignup
13
13

More than 5 years have passed since last update.

初めてAnsibleに触れた際、playbookで少し解決に悩んだ点。(複数指定、ユーザ関連など)

Last updated at Posted at 2015-12-07

Ansibleを使い始めてから、少し考えた点などをメモとして残しております。適宜、追記。

Best PracticesでRole使用時のtask, handler, varsに関して

playbook.yml
- hosts: all
  remote_user: root
  vars:
    admin_name: admin
  tasks:
    - name: Add a new user
      user: name={{admin_name}} groups="wheel" state=present

このようなansibleのplaybookがあったとする。これをBest Practicesの構成に従って、Role使用時のtask, handler, varsにそれぞれ分割する。

roles/common/tasks/main.yml
roles/common/handlers/main.yml
roles/common/vars/main.yml

このような場合、各tasks, handlers, varsにmain.ymlが存在すれば自動的にこれらの内容が読み込まれる。

以下は、taskroles/common/tasks/main.ymlに移した場合だが、これだとエラーが出る。

roles/common/tasks/main.yml
tasks:
    - name: Add a new user
    user: name={{admin_name}} groups="wheel" state=present

発生するエラー

ERROR: expecting dict; got: tasks, error in /your/tasks/path/main.yml
解決
roles/common/tasks/main.yml
- name: Add a new user
  user: name={{admin_name}} groups="wheel" state=present

roles以下の各tasks, handlers, varsのmain.ymlはroleを使用時に自動的に読みこまれるため、-tasksなどの記述は不要になる。vars, handlersに関しても、同様。

Best PracticesでRole使用時のgroup_vars/host_varsの変数の利用に関して

以下のように、group_vars/all.ymluserという変数が設定されている場合

group_vars/all.yml
user: hoge

直接、{{user}}として、変数の内容を利用することができる。

- name: Add a new user from group_vars:all
  user: name={{user}} groups="wheel" state=present

今回は、usersとして1ユーザに各変数を持たせた場合を考える。

group_vars/all.yml
users:
  - { name: hoge, password: "fuga", groups: "wheel" }

この場合、以下のようにリスト変数を利用することで各変数の内容を取得可能だった。

- name: Add a new user from group_vars/all.yml
  user: name={{item.name}} groups="wheel" state=present
  with_items: users

Ansibleで対象を複数指定をしたい場合

例えば、ユーザ作成時にグループに複数のグループを指定する

- hosts: localhost
  task
    - name: Add a new user
      user: name=hoge groups="wheel,fuga" state=present

例えば、groupsで複数のグループを指定したい場合は、,(カンマ)を利用。
※注意: ,(カンマ)の前にスペースが入ると、それが認識されるので注意!!

通常はrootユーザで実行し、特定のタスクのみ指定のユーザで実行

例えば、ユーザ作成時にグループに複数のグループを指定する

- hosts: localhost
  become: on
  task
    - name: Create test file
      file: path=/home/hoge/test.txt state=touch mode="u=rw,g=r,o=r"
      become_user: hoge

例えば、hogeユーザでtest.txtというファイルを作成する場合、
become_userで実行ユーザを指定する。

ファイルの転送にSFTPではなく、sshを利用する

ansible.cfg
[defaults]
transport=ssh

[ssh_connection]
ssh_args=
scp_if_ssh=True

対象サーバの設置情報を取得する

対象のサーバの設定状況を知りたい場合は、以下のコマンドで取得可能

ansible -i hosts -m setup
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13