Ansible では Playbook 内やテンプレートファイル内で変数を使用することができます。
変数を使用することで、管理対象機器別にパラメータを変更できたり、Playbook の再利用がしやすくなったりします。
変数の使用方法
◆ 公式ドキュメント
変数を使用する手順は以下の通りです。
- 変数を定義する
- Playbook などの変数を使用したい箇所で変数を使用するための記述を行う
変数の定義方法
変数を定義する主な方法として以下の3つがあります。
- Playbook 内で変数を定義する
- 変数を定義する変数ファイルを作成して Playbook で読み込む
- インベントリ内でグループ変数として定義する
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
―――――――――――――