Ansible:変数について(Ansible 2.9.6)

インフラサーバ

Ansible では Playbook 内やテンプレートファイル内で変数を使用することができます。

変数を使用することで、管理対象機器別にパラメータを変更できたり、Playbook の再利用がしやすくなったりします。

変数の使用方法

◆ 公式ドキュメント

Using Variables — Ansible Documentation

変数を使用する手順は以下の通りです。

  1. 変数を定義する
  2. Playbook などの変数を使用したい箇所で変数を使用するための記述を行う

変数の定義方法

変数を定義する主な方法として以下の3つがあります。

  1. Playbook 内で変数を定義する
  2. 変数を定義する変数ファイルを作成して Playbook で読み込む
  3. インベントリ内でグループ変数として定義する

Playbook 内で変数を定義する方法

Playbook 内で変数を定義する場合は、以下の例の様に vars の要素として記載します。

以下の例では、次の2つの変数を定義しています。

  • message1 という名前で値が 「Good morning Ansible!」 である変数
  • message2 という名前で値が 「Hello Ansible!」 である変数

■ playbook.yml

- hosts: all
  vars:
    - message1: 'Good morning Ansible!'
    - message2: 'Hello Ansible!'
  tasks:
    - name: variable test 1
      debug:
        msg: '{{ message1 }}'
    - name: variable test 2
      debug:
        msg: '{{ message2 }}'

変数ファイルを作成して Playbook で読み込む方法

Playbook 内で変数ファイルを読み込む場合は、以下の例の様に vars_files の要素に変数ファイルのパスを記載します。

以下の例では、Playbook と同じフォルダ内にある vars.yml を変数ファイルとして読み込んでいます。

■ playbook.yml

- hosts: all
  vars_files:
    - ./vars.yml
  tasks:
    - name: variable test 1
      debug:
        msg: '{{ message1 }}'
    - name: variable test 2
      debug:
        msg: '{{ message2 }}'

■ vars.yml

message1: 'Good morning Ansible!'
message2: 'Hello Ansible!'

インベントリ内でグループ変数として定義する方法

インベントリ内でグループ変数として定義する場合は、以下の例の様に [グループ名:vars] と記載しその配下に変数を記載します。

以下の例では remote グループ用の変数として message1 と message2 という名前の変数を定義しています。

管理対象機器が remote グループに属している場合は、[remote:vars] 配下で定義された変数の値が使用されることになります。

■ インベントリ

[remote]
localhost

[remote:vars]
message1='Good morning Ansible!'
message2='Hello Ansible!'

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=testuser
ansible_ssh_pass=testuser
ansible_sudo_pass=testuser

なお、[all:vars] 配下の変数は、すべてのホストグループで使用できる変数となります。

変数使用箇所での記述方法

変数を使用する箇所では、以下の例の様に ‘{{ 変数名 }}’ と記載してください。

シングルコーテーション ‘ の代わりにダブルコーテーション “ を使用しても問題ありません。

■ playbook.yml

- hosts: all
  vars:
    - message1: 'Good morning Ansible!'
    - message2: 'Hello Ansible!'
  tasks:
    - name: variable test 1
      debug:
        msg: '{{ message1 }}'
    - name: variable test 2
      debug:
        msg: '{{ message2 }}'

変数使用例

デバッグメッセージを表示させる処理でメッセージ内容に変数を使用してみます。

■ playbook1.yml

- hosts: all
  vars:
    - message1: 'Good morning Ansible!'
    - message2: 'Hello Ansible!'
  tasks:
    - name: variable test 1
      debug:
        msg: '{{ message1 }}'
    - name: variable test 2
      debug:
        msg: '{{ message2 }}'

■ Ansible 実行結果

PLAY [all] ********************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [localhost]

TASK [variable test 1] ********************************************************************************************
ok: [localhost] => {
    "msg": "Good morning Ansible!"
}

TASK [variable test 2] ********************************************************************************************
ok: [localhost] => {
    "msg": "Hello Ansible!"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

以下のように変数と定数を組み合わせて使用することも可能です。

■ playbook2.yml

- hosts: all
  vars:
    - message1: 'Good morning Ansible!'
    - message2: 'Hello Ansible!'
  tasks:
    - name: variable test 1
      debug:
        msg: 'message1: {{ message1 }}'
    - name: variable test 2
      debug:
        msg: 'message2: {{ message2 }}'

■ Ansible 実行結果

PLAY [all] ********************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [localhost]

TASK [variable test 1] ********************************************************************************************
ok: [localhost] => {
    "msg": "message1: Good morning Ansible!"
}

TASK [variable test 2] ********************************************************************************************
ok: [localhost] => {
    "msg": "message2: Hello Ansible!"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

―――――――――――――

タイトルとURLをコピーしました