テンプレートを使用すると、Jinja2テンプレートシステムに基づく事前定義されたモデルを使用してノード上に新しいファイルを作成できます。 Ansibleテンプレートは通常、.tplファイルとして保存され、変数、ループ、および条件式の使用をサポートします。

テンプレートは通常、プレイブック自体、含まれている変数ファイル、またはfactsを介して取得できる変数値に基づいてサービスを構成するために使用されます。 これにより、動的な情報に基づいて動作を適応させる、より用途の広いセットアップを作成できます。

実用的な例でこの機能を試すには、ansible-practiceディレクトリ内に非プレイブックファイルを保持する新しいディレクトリを作成します。

  1. mkdir ~/ansible-practice/files

次に、HTMLランディングページの新しいテンプレートファイルを作成します。 後で、Nginxでランディングページを提供するようにリモートノードを構成するプレイブックを設定します。

  1. 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_titlepage_descriptionを使用します。

次のハンドブックは、必要な変数を設定し、Nginxをインストールしてから、指定されたテンプレートを適用して、/var/www/html/index.nginx-debian.htmlにある既存のデフォルトのNginxランディングページを置き換えます。 最後のタスクでは、ufwモジュールを使用して、ポート80でtcpアクセスを有効にします。これは、初期サーバーセットアップガイドで推奨されているようにファイアウォールを有効にしている場合です。

ansible-practiceディレクトリにplaybook-11.ymlという名前の新しいファイルを作成します。

  1. 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オプションを指定することを忘れないでください。

  1. ansible-playbook -i inventory playbook-11.yml -u sammy -K
Output
BECOME 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アドレスにアクセスできます。 次のようなページが表示されます。

Screenshot showing custom landing page

つまり、プレイブックは期待どおりに機能し、デフォルトのNginxページは作成したテンプレートに置き換えられました。