--extra-vars オプション - コマンドラインから変数を渡す

2019/06/15

Ansible

 Ansible Documentation

 機能

  •  vars セクションで定義した変数の設定を上書きする(定義し直す)
  •  変数を定義する
  • ファイルに YAML/JSON 形式で定義した変数を取り込む

 例

■ 変数を上書き
---
- hosts: all
  gather_facts: no

  vars:
    var1: "{{ now(False, '%Y%m%d_%H%M%S') }}"
    var3:
  vars_prompt:
    - name: var2
      prompt: "var2 の値を入力してください。"
      private: no

  tasks:
    - name: var1 の値
      debug:
        var: var1
    - name: var2 の値
      debug:
        var: var2
実行結果です。vars セクションで定義した変数がコマンドラインで指定した変数に初期値を含めて上書きされています。
ansibleman@ubuntu-pc:~/ansible/vars$ ansible-playbook -i hosts.yml --extra-vars 'var1=123, var2="abc"' site.yml

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

TASK [var1 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var1": "123,"
}

TASK [var2 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var2": "abc"
}

PLAY RECAP *********************************************************************************************************
node-c0706                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

ansibleman@ubuntu-pc:~/ansible/vars$ 

■ 変数を定義
---
- hosts: all
  gather_facts: no

  tasks:
    - name: var1 の値
      debug:
        var: var1
    - name: var2 の値
      debug:
        var: var2
実行結果です。play に変数は定義されていません。コマンドラインで指定した変数 var1 と var2 が play 内で参照されています。
nsibleman@ubuntu-pc:~/ansible/vars$ ansible-playbook -i hosts.yml --extra-vars 'var1=123, var2="abc"' site.yml

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

TASK [var1 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var1": "123,"
}

TASK [var2 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var2": "abc"
}

PLAY RECAP *********************************************************************************************************
node-c0706                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 
ansibleman@ubuntu-pc:~/ansible/vars$
変数を定義(指定)する場合、YAML 形式で指定できます。
ansibleman@ubuntu-pc:~/ansible/vars$ ansible-playbook -i hosts.yml --extra-vars '{ "var1":123, "var2":"abc" }' site.
yml

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

TASK [var1 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var1": 123
}

TASK [var2 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var2": "abc"
}

PLAY RECAP *********************************************************************************************************
node-c0706                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ansibleman@ubuntu-pc:~/ansible/vars$

■ 変数をファイルで取り込み
---
- hosts: all
  gather_facts: no

  tasks:
    - name: var1 の値
      debug:
        var: var1
    - name: var2 の値
      debug:
        var: var2
ファイル variablefile.yml の内容
---
var1: 123
var2: "abc"
実行結果です。play に変数は定義されていません。コマンドラインで指定したファイル variablefile.yml が読み込まれています。vars_files ディレクティブに似た使い方ができます。
ansibleman@ubuntu-pc:~/ansible/vars$ ansible-playbook -i hosts.yml --extra-vars '@variablefile.yml' site.yml

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

TASK [var1 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var1": 123
}

TASK [var2 の値] ***************************************************************************************************
**
ok: [node-c0706] => {
    "var2": "abc"
}

PLAY RECAP *********************************************************************************************************
node-c0706                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 

ansibleman@ubuntu-pc:~/ansible/vars$ 

■ --extra-vars を複数指定した例
---
- hosts: all
  gather_facts: no

  tasks:
    - name: var1 の値
      debug:
        var: var1
    - name: var2 の値
      debug:
        var: var2
    - name: var3 の値
      debug:
        var: var3
実行結果です。
nsibleman@ubuntu-pc:~/ansible/vars$ ansible-playbook -i hosts.yml --extra-vars '@variablefile.yml' --extra-vars 'var3="xyz"' site.yml

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

TASK [var1 の値] *******************************************************************************************************
**
ok: [node-c0706] => {
    "var1": 123
}

TASK [var2 の値] *******************************************************************************************************
**
ok: [node-c0706] => {
    "var2": "abc"
}

TASK [var3 の値] *******************************************************************************************************
**
ok: [node-c0706] => {
    "var3": "xyz"
}

PLAY RECAP *************************************************************************************************************
node-c0706                 : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ansibleman@ubuntu-pc:~/ansible/vars$ 

カテゴリー

目次

QooQ