他の言語で読む:
 英語,
 英語,  日本語,
 日本語,  ブラジルポルトガル語,
 ブラジルポルトガル語,  フランス語,
 フランス語,  スペイン語.
 スペイン語.
演習 1.5 では、Ansible 内での Jinja2 テンプレーティングが紹介されます。これは、テンプレートから動的なファイルを生成するための強力な機能です。ホスト固有のデータを組み込んだテンプレートを作成する方法を学び、管理されている各ホストに合わせた設定ファイルを作成できるようになります。
Ansible は Jinja2 を活用しています。Jinja2 は Python 用の広く使用されているテンプレート言語で、ファイル内で動的なコンテンツの生成を可能にします。この機能は、ホストごとに異なる必要がある設定ファイルを構成する場合に特に便利です。
テンプレートは .j2 拡張子で終わり、静的なコンテンツと `` で囲まれた動的なプレースホルダーを混在させます。
次の例では、動的なホスト情報を含む「本日のメッセージ」(MOTD) のテンプレートを作成しましょう。
テンプレートを整理するために、lab_inventory ディレクトリ内にテンプレートディレクトリが存在することを確認してください。
mkdir -p ~/lab_inventory/templates
テンプレートディレクトリに motd.j2 という名前のファイルを作成し、以下の内容を含めます:
 へようこそ。
OS:  
アーキテクチャ: 
このテンプレートは、管理されている各ホストのホスト名、OS の配布、バージョン、およびアーキテクチャを動的に表示します。
プレイブック内で ansible.builtin.template モジュールを使用して、管理されているホストにテンプレートを配布し、レンダリングします。
以下の内容で system_setup.yml プレイブックを変更します:
---
- name: 基本的なシステム設定
  hosts: all
  become: true
  vars:
    user_name: 'Roger'
    package_name: httpd
  tasks:
    - name: セキュリティ関連のパッケージをすべて更新
      ansible.builtin.package:
        name: '*'
        state: latest
        security: true
        update_only: true
    - name: 新しいユーザーを作成
      ansible.builtin.user:
        name: ""
        state: present
        create_home: true
    - name: Web サーバーに Apache をインストール
      ansible.builtin.package:
        name: ""
        state: present
      when: inventory_hostname in groups['web']
    - name: firewalld をインストール
      ansible.builtin.package:
        name: firewalld
        state: present
      when: inventory_hostname in groups['web']
    - name: firewalld が実行中であることを確認
      ansible.builtin.service:
        name: firewalld
        state: started
        enabled: true
      when: inventory_hostname in groups['web']
    - name: Web サーバーで HTTP トラフィックを許可
      ansible.posix.firewalld:
        service: http
        permanent: true
        state: enabled
      when: inventory_hostname in groups['web']
      notify: ファイアウォールをリロード
    - name: Jinja2 テンプレートから MOTD を更新
      ansible.builtin.template:
        src: templates/motd.j2
        dest: /etc/motd
  handlers:
    - name: ファイアウォールをリロード
      ansible.builtin.service:
        name: firewalld
        state: reloaded
ansible.builtin.template モジュールは motd.j2 テンプレートを取り、各ホストに /etc/motd ファイルを生成し、テンプレートのプレースホルダーを実際のホストの事実で埋めます。
管理されているすべてのホストにカスタム MOTD を適用するために、プレイブックを実行します:
[student@ansible-1 lab_inventory]$ ansible-navigator run system_setup.yml -m stdout
PLAY [基本的なシステムセットアップ] *********************************************
.
.
.
TASK [Jinja2 テンプレートから MOTD を更新] **************************************
changed: [node1]
changed: [node2]
changed: [node3]
changed: [ansible-1]
RECAP ************************************************************************
ansible-1                  : ok=6    changed=1    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
node1                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ノードにSSHで接続して変更を確認し、その日のメッセージが表示されるはずです:
[rhel@control ~]$ ssh node1
Welcome to node1.
OS: RedHat 8.7
Architecture: x86_64
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Mon Jan 29 16:30:31 2024 from 10.5.1.29
次の演習に進む前に、SSHセッションを終了してコントロールノードに戻ります:
[rhel@node1 ~]$ exit
logout
Connection to node1 closed.
[rhel@control ~]$