SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Ansible】入門⑥rolesのfilesとtemplates

前回軽く扱ったrolesの中のtemplatesを確認してみます。

files

templatesの前に、rolesfilesディレクトリを試してみます。
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

■参考書籍