Ansibleを使い始めてから、少し考えた点などをメモとして残しております。適宜、追記。
###Best PracticesでRole使用時のtask, handler, varsに関して
- 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が存在すれば自動的にこれらの内容が読み込まれる。
以下は、task
を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
#####解決
- 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.yml
にuser
という変数が設定されている場合
user: hoge
直接、{{user}}
として、変数の内容を利用することができる。
- name: Add a new user from group_vars:all
user: name={{user}} groups="wheel" state=present
今回は、users
として1ユーザに各変数を持たせた場合を考える。
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を利用する
[defaults]
transport=ssh
[ssh_connection]
ssh_args=
scp_if_ssh=True
###対象サーバの設置情報を取得する
対象のサーバの設定状況を知りたい場合は、以下のコマンドで取得可能
ansible -i hosts -m setup