テンプレートを使用すると、Jinja2テンプレートシステムに基づく事前定義されたモデルを使用してノード上に新しいファイルを作成できます。 Ansibleテンプレートは通常、.tplファイルとして保存され、変数、ループ、および条件式の使用をサポートします。
テンプレートは通常、プレイブック自体、含まれている変数ファイル、またはfactsを介して取得できる変数値に基づいてサービスを構成するために使用されます。 これにより、動的な情報に基づいて動作を適応させる、より用途の広いセットアップを作成できます。
実用的な例でこの機能を試すには、ansible-practiceディレクトリ内に非プレイブックファイルを保持する新しいディレクトリを作成します。
mkdir ~/ansible-practice/files
次に、HTMLランディングページの新しいテンプレートファイルを作成します。 後で、Nginxでランディングページを提供するようにリモートノードを構成するプレイブックを設定します。
nano ~/ansible-practice/files/landing-page.html.j2
次のコンテンツをテンプレートファイルに追加します。
〜/ ansible-practice / files / landing-page.html.j2
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page_title }}</title>
<meta name="description" content="Created with Ansible">
</head>
<body>
<h1>{{ page_title }}</h1>
<p>{{ page_description }}</p>
</body>
</html>
完了したら、ファイルを保存して閉じます。
このテンプレートは、テンプレートがプレイブックに適用されるたびに提供する必要がある2つの変数page_titleとpage_descriptionを使用します。
次のハンドブックは、必要な変数を設定し、Nginxをインストールしてから、指定されたテンプレートを適用して、/var/www/html/index.nginx-debian.htmlにある既存のデフォルトのNginxランディングページを置き換えます。 最後のタスクでは、ufwモジュールを使用して、ポート80でtcpアクセスを有効にします。これは、初期サーバーセットアップガイドで推奨されているようにファイアウォールを有効にしている場合です。
ansible-practiceディレクトリにplaybook-11.ymlという名前の新しいファイルを作成します。
nano ~/ansible-practice/playbook-11.yml
次のコンテンツを新しいプレイブックファイルに追加します。
〜/ ansible-practice / playbook-11.yml
---
- hosts: all
become: yes
vars:
page_title: My Landing Page
page_description: This is my landing page description.
tasks:
- name: Install Nginx
apt:
name: nginx
state: latest
- name: Apply Page Template
template:
src: files/landing-page.html.j2
dest: /var/www/html/index.nginx-debian.html
- name: Allow all access to tcp port 80
ufw:
rule: allow
port: '80'
proto: tcp
このプレイブックを実行する場合は、sudo権限が必要なため、-Kオプションを指定することを忘れないでください。
ansible-playbook -i inventory playbook-11.yml -u sammy -K
OutputBECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Install Nginx] ************************************************************************************ changed: [203.0.113.10] TASK [Apply Page Template] ****************************************************************************** changed: [203.0.113.10] TASK [Allow all access to tcp port 80] ****************************************************************** changed: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
再生が終了すると、ブラウザからWebサーバーのパブリックIPアドレスにアクセスできます。 次のようなページが表示されます。
つまり、プレイブックは期待どおりに機能し、デフォルトのNginxページは作成したテンプレートに置き換えられました。