他の言語で読む:
英語,
日本語,
ブラジルポルトガル語,
フランス語,
スペイン語.
演習 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 ~]$