paint-brush
Ansible 101: ファクトとテンプレートの操作@cloudkungfu
892 測定値
892 測定値

Ansible 101: ファクトとテンプレートの操作

cloud-kung-fu4m2024/01/30
Read on Terminal Reader

長すぎる; 読むには

Ansible は、変数、ファクト、テンプレートを利用して、適応可能な自動化ワークフローを作成します。変数によって動的な構成管理が可能になり、ファクトによってシステム固有の情報が提供され、テンプレートによってカスタマイズ可能な構成ファイルが生成されます。このアプローチにより、Playbook はさまざまな環境にわたって再利用可能で柔軟になります。
featured image - Ansible 101: ファクトとテンプレートの操作
cloud-kung-fu HackerNoon profile picture
0-item

Ansible では、変数とファクトは、テンプレートとともに、柔軟な自動化ワークフローを作成するための基本的なツールです。変数を使用すると、構成を動的に管理および変更できます。ファクトは、Ansible がリモート システムから収集する変数の特別なサブセットであり、コンテキスト固有の情報を提供します。


テンプレートを使用すると、変数駆動型の構成ファイルを生成できるため、Playbook がさまざまな環境やシナリオに適応できるようになります。


これらのツールにより、Playbook が再利用可能かつ適応可能になり、値のハードコーディングを回避し、さまざまな環境に合わせてカスタマイズできるようになります。

変数と事実

変数を使用すると、Playbook のコア ロジックを変更せずにパラメーターを変更できます。

ファクト、変数、テンプレートがどのように連携するか

  • 変数の種類:
    • ブール値: True または False の値。

    • リスト:順序付けられたアイテムのコレクション。

    • ディクショナリ:複雑なデータ構造のキーと値のペア。

    • 登録された変数:プレイブックで後で使用するためにタスクの出力をキャプチャします。

    • 事実:管理しているリモート システムに関する詳細を提供する自動収集された変数。


注意:括弧表記を使用して、変数名の競合を避けてください。


 - name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"

テンプレートとファイル

Ansible のテンプレートは、Jinja2 テンプレート言語を使用して、変数補間、ループ、条件文を使用してファイルを動的に作成します。


 - name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file

練習する

OS ファミリを使用して、Lighttpd の NGINX をインストールするかどうかを決定し、ホスト名をハードコーディングせずに、NGINX を含むリモート ホストにカスタム ホームページをデプロイします。


  1. リポジトリのクローンを作成します。
 git clone https://github.com/perplexedyawdie/ansible-learn.git


2. ディレクトリを「facts-and-templates」に変更します。

 cd ansible-learn/facts-and-templates


3. docker-compose を使用して環境をスピンアップする

docker compose up -d --build


4. Ansible サーバーに SSH で接続します

ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123

変数と事実

5. server_setup.yamlという名前の Playbook を作成します。ここでは、NGINX と Lighttpd をセットアップし、各リモート ホストのディストリビューションの名前を出力します。


 - name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"


6. ansible-lint.

 ansible-lint server_setup.yaml


7. プレイブックを実行します。

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml


8. セットアップが成功したことを確認します。

 ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v

テンプレートとファイル

index.html.j2という名前の Jinja2 テンプレート ファイルを作成します。


OS ファミリとディストリビューションが自動的に入力されます。


 <html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>


custom_homepage.yaml.


上記で作成したカスタム ホームページを NGINX にデプロイし、サーバーを再起動します。


 - name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1


11. リンターを実行します。

 ansible-lint custom_homepage.yaml


12. プレイブックを実行します。

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml


13. ブラウザでhttp://localhost:2203にアクセスして、展開を確認します。

要約

すごい努力ですね! 🙌 プレイブックで変数とファクトを使用する方法と、テンプレートを使用して動的ファイルを作成する方法を学びました。次に、モジュール化とエラー処理について見ていきます。それまで気をつけてね!