ワークショップ演習 - 変数の使用

その他の言語はこちらをお読みください。
uk English, japan日本語, brazil Portugues do Brasil, france Française,Español Español.

目次

目的

Ansibleは、Playbook で使用できる値を格納するための変数をサポートしています。変数はさまざまな場所で定義でき、明確な優先順位があります。Ansible は、タスクの実行時に変数をその値に置き換えます。

この演習では、特に以下についての変数について説明します。

ガイド

変数の概要

変数は、変数名を二重中括弧で囲むことにより、AnsiblePlaybooks で参照されます。

こちらが変数です。{{ variable1 }}

変数とその値は、インベントリー、追加ファイル、コマンドラインなどのさまざまな場所で定義できます。

インベントリーで変数を使う場合は、host_varsgroup_vars という名前の 2 つのディレクトリーにあるファイルで変数を定義することが推奨されます。

ヒント

ホスト変数はグループ変数よりも優先されます (優先順位の詳細については、docs を参照してください)。

Step 1 - 変数ファイルの作成

理解を深め練習するためにも、ラボをみていきましょう。「Webサーバーを構築しましょう。1 つまたは 2 つ。またはそれ以上…」というテーマに続いて、index.html を変更し、サーバーがデプロイされている開発環境 (dev / prod) を表示します。

Ansible コントロールホストでは、student<X> ユーザーとして、~/ansible-files/ に変数定義を保持するディレクトリーを作成します。

[student<X>@ansible-1 ansible-files]$ mkdir host_vars group_vars

次に、変数定義を含む 2 つのファイルを作成します。異なる環境 dev または prod を参照する stage を定義します。

---
stage: dev
---
stage: prod

これはなんでしょうか。

Step 2 - web.html ファイルの作成

次に、~/ansible-files/files/ で 2 つのファイルを作成します。

1 つは、以下の内容の prod_web.html と呼ばれます。

<body>
<h1>これは稼働 Web サーバーです。それでは!</h1>
</body>

もう 1 つは、以下のない用の dev_web.html と呼ばれるファイルです。

<body>
<h1>これは開発用ウェブサーバーです。お楽しみください!</h1>
</body>

Step 3 - Playbook の作成

次に、「stage」変数にしたがって、prod または dev web.html ファイルをコピーする Playbook が必要です。

~/ansible-files/ ディレクトリーに deploy_index_html.yml という新しい Playbook を作成します。

ヒント

変数「stage」がどのように、コピーするファイルの名前で使用さているかに注意してください。

---
- name: Copy web.html
  hosts: web
  become: true
  tasks:
  - name: copy web.html
    copy:
      src: "{{ stage }}_web.html"
      dest: /var/www/html/index.html
[student<X>@ansible-1 ansible-files]$ ansible-playbook deploy_index_html.yml

Step 4 - 結果のテスト

Ansible Playbook は、さまざまなファイルを index.html としてホストにコピーし、curl を使用してテストします。

node1:

[student<X>@ansible-1 ansible-files]$ curl http://node1
<body>
<h1>This is a development webserver, have fun!</h1>
</body>

node2:

[student<X>@ansible-1 ansible-files]$ curl http://node2
<body>
<h1>This is a production webserver, take care!</h1>
</body>

node3:

[student<X>@ansible-1 ansible-files]$ curl http://node3
<body>
<h1>This is a development webserver, have fun!</h1>
</body>

ヒント

おそらくこのような考えがありませんでしょうか。ファイルの内容を変更する、もっと賢い方法があるはず…。その通りです。このラボは、変数の説明を行うためのものでした。次の章では、テンプレートについて学びます。

Step 5 - Ansible ファクト

Ansible ファクトは、管理対象ホストから Ansible によって自動的に検出される変数です。それぞれの ansible-playbook 実行の出力にリストされている「ファクトの収集」タスクを覚えていますか?その時点で、管理対象ノードごとにファクトが収集されます。ファクトは、setup モジュールでプルできます。これらには、管理者が再利用できる変数に格納された有用な情報が含まれています。

Ansible がデフォルトで収集するファクトを把握するには、コントロールノードで、student ユーザーとして次を実行します。

[student<X>@ansible-1 ansible-files]$ ansible node1 -m setup

多すぎる場合は、特定のファクトに出力を制限するフィルターを使用できます。使用する表現は、シェルスタイルのワイルドカードです。

[student<X>@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_eth0'

あるいは、メモリ関連のファクトだけを探すのはどうでしょうか。

[student<X>@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_*_mb'

Step 6 - チャレンジラボ: ファクト

ヒント

grep を使用してファクトを検索し、フィルターを適用して、このファクトのみを出力します。

警告

回答を以下に示します。

[student<X>@ansible-1 ansible-files]$ ansible node1 -m setup|grep distribution
[student<X>@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_distribution' -o

Step 7 - Playbook でのファクトの使用

もちろん、ファクトは、正しい名前を使用して、変数のように Playbook で使用できます。このプレイブックを次のように、~/ansible-files/ ディレクトリーに facts.yml として作成します。

---
- name: Output facts within a playbook
  hosts: all
  tasks:
  - name: Prints Ansible facts
    debug:
      msg: The default IPv4 address of {{ ansible_fqdn }} is {{ ansible_default_ipv4.address }}

ヒント

「debug」モジュールは、変数と式のデバッグを行うのに便利です。

それを実行して、ファクトがどのように出力されるかを確認します。

[student<X>@ansible-1 ansible-files]$ ansible-playbook facts.yml

PLAY [Output facts within a playbook] ******************************************

TASK [Gathering Facts] *********************************************************
ok: [node3]
ok: [node2]
ok: [node1]
ok: [ansible-1]

TASK [Prints Ansible facts] ****************************************************
ok: [node1] =>
  msg: The default IPv4 address of node1 is 172.16.190.143
ok: [node2] =>
  msg: The default IPv4 address of node2 is 172.16.30.170
ok: [node3] =>
  msg: The default IPv4 address of node3 is 172.16.140.196
ok: [ansible-1] =>
  msg: The default IPv4 address of ansible is 172.16.2.10

PLAY RECAP *********************************************************************
ansible-1                  : ok=2    changed=0    unreachable=0    failed=0
node1                      : ok=2    changed=0    unreachable=0    failed=0
node2                      : ok=2    changed=0    unreachable=0    failed=0
node3                      : ok=2    changed=0    unreachable=0    failed=0

ナビゲーション

前の演習 - 次の演習



こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop に戻ります