vagrant
macos
Ansible

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

More than 3 years have passed since last update.

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