前回軽く扱ったrolesの中のtemplatesを確認してみます。
files
templatesの前に、rolesのfilesディレクトリを試してみます。
fileディレクトリはcopy
モジュールなどのファイルコピーに使用することができます。
ディレクトリ構成
今回関係するディレクトリ部分だけ抜粋して表示します。
pj1/ |-- hosts |-- roles/ | |-- common/ | | |-- defaults/ | | | `-- main.yml | | |-- files/ | | | `-- file.txt | | |-- tasks/ | | | `-- main.yml | | `-- templates/ `-- test.yml
記述内容
・test.yml(playbook)
commonロールを呼び出しのみ記述している。
--- - hosts: web-server1 roles: - common
・hosts(Inventory)
#Inventory hosts-file [web] web-server1 web-server2
・roles/common/tasks/main.yml
対象のhostに対して、/tmpディレクトリにfile.txt
ファイルをコピーします。
--- - name: file copy copy: dest: /tmp/ src: file.txt
・/roles/common/files/file.txt
コピーするファイル。ファイルの内容はここでは特に関係ない。
/home/ansusr/ansible/pj1/roles/common/files
実行確認
[ansusr@ctl-node pj1]$ ansible-playbook -i hosts test.yml PLAY [web-server1] ************************************************************* TASK [Gathering Facts] ********************************************************* ok: [web-server1] TASK [common : file copy] ****************************************************** ok: [web-server1] PLAY RECAP ********************************************************************* web-server1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [ansusr@ctl-node pj1]$
fileディレクトリに作成したファイルがコピーされていることが分かります。
[ansusr@ctl-node pj1]$ cat /tmp/file.txt /home/ansusr/ansible/pj1/roles/common/files
templates
templatesディレクトリはテンプレートファイルを格納します。
ansibleではJinja2テンプレートエンジンが使用されているそうで、単純なファイルコピーと異なりファイル内に変数等を組み込むことができ、各種ファイルを配置する際などの「テンプレート」として使用することができます。
★参考★
https://recipe.kc-cloud.jp/archives/6929
テンプレート作成 (Jinja2) — Ansible Documentation
ディレクトリ構成
今回関係するディレクトリ部分だけ抜粋して表示します。
pj1/ |-- group_vars/ | `-- web.yml |-- hosts |-- roles/ | `-- common/ | |-- defaults/ | | `-- main.yml | |-- files/ | | `-- file.txt | |-- tasks/ | | `-- main.yml | `-- templates/ | `-- templates.txt `-- test.yml
記述内容
・test.yml(playbook)
commonロールを呼び出しのみ記述している。
--- - hosts: web-server1 roles: - common
・hosts(Inventory)
#Inventory hosts-file [web] web-server1 web-server2
・group_vars/web.yml
変数に値が格納されることを確認するためだけなので、なにかしら変数が定義されていればよい。
file: web.txt text: web_text
・roles/common/tasks/main.yml
テンプレートの場合にはtemplate
モジュールを使用すれば、templatesディレクトリからファイルを探してくれる。
最低限テンプレートファイルと生成先が指定されていれば動作するようだ。
--- - name: file copy template: dest: /tmp/ src: templates.txt
・templates.txt
テンプレートファイル。定義された変数が指定されていればよい。
text= {{ text }}
実行確認
実行は以下のようになる。
[ansusr@ctl-node pj1]$ ansible-playbook -i hosts test.yml PLAY [web-server1] ************************************************************* TASK [Gathering Facts] ********************************************************* ok: [web-server1] TASK [common : file copy] ****************************************************** changed: [web-server1] PLAY RECAP ********************************************************************* web-server1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [ansusr@ctl-node pj1]$
ファイルの内容を確認すると、変数の中身が出力されていることが分かる。
[ansusr@ctl-node pj1]$ cat /tmp/templates.txt text= web_text
・前回 第五回
www.wantanblog.com
■参考書籍