workshops

Training Course for Ansible Automation Platform

This project is maintained by ericzji

演習 1.6 - テンプレートを使う

Read this in other languages: uk English, japan 日本語.

Ansibleは、管理対象ホストにファイルをコピーする際、固定の内容ではなく変数に値を入力しながらコピーを行う様な事も可能です。例えば対象ホストユニークなホスト名などを含んだファイルのコピーを行うことが可能です。これを実現するのが Jinja2 テンプレートです。 Jinja2 は、Python で最も使用されているテンプレートエンジンの1つです。 (http://jinja.pocoo.org/)

ステップ 1.6.1 - playbook 内でテンプレートを使用する

利用は簡単です。まず、ファイル作成を行うための変数を含んだテンプレートファイルを作成し、テンプレートモジュールを使って対象ホストに転送するだけです。

早速演習を行ってみましょう!
テンプレートを使って、対象ホストの motd ファイルをホスト固有のデータを含むように変更してみます。

まず、 ~/ansible-files/ ディレクトリ内に、テンプレートファイル motd-facts.j2 を作成します。

Welcome to {{ ansible_hostname }}.
{{ ansible_distribution }} {{ ansible_distribution_version}}
deployed on {{ ansible_architecture }} architecture.

テンプレートファイルには、コピーされる基本テキスト(文頭の Welcome to と文末の architecture ですね♪ )が含まれています。また、ターゲットマシンのユニークな値に置き換えられる変数がその間に入っています。

次に、上記テンプレートを利用するための playbook motd-facts.yml を以下の通り作成します。場所は、 ~/ansible-files/ ディレクトリ内です。

---
- name: Fill motd file with host data
  hosts: node1
  become: yes
  tasks:
    - template:
        src: motd-facts.j2
        dest: /etc/motd
        owner: root
        group: root
        mode: 0644

Ansibleが変数をシステムから収集したファクト情報で変数を置き換えた上で、ファイルをコピーしていることがわかります。

Step 1.6.2 - チャレンジラボ

テンプレートに1行追加して、管理対象ノードの現在のカーネルを表示してください。

ヒント

モジュールは setup ですね? grep を使って探してみましょう。

答えは以下の通り

[student<X>@ansible ansible-files]$ ansible node1 -m setup|grep -i kernel
       "ansible_kernel": "3.10.0-693.el7.x86_64",
Welcome to {{ ansible_hostname }}.
{{ ansible_distribution }} {{ ansible_distribution_version}}
deployed on {{ ansible_architecture }} architecture
running kernel {{ ansible_kernel }}.

うまくいきましたか?


Ansible Engine ワークショップ表紙に戻る