register 変数

2019/04/07

Ansible

 Ansible Documentation

Register Variables

 説明

  • タスクの実行結果を格納する変数
  • 変数は Ansible が用意するので vars セクションで定義しない

 shell モジュールを例にした具体例

次の play を実行します。
- name: test play
  hosts: all
  gather_facts: no

  tasks:
      - shell: cat /tmp/text
 changed: が表示されているので shell モジュール( cat コマンド)が正常に実行されたことはわかります。しかし、 shell モジュールの cat コマンドで表示された内容まではわかりません。
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml site.yml 
  
PLAY [test play] ***********************************************************************************
 
TASK [shell] ***************************************************************************************
changed: [node-c0706]
 
PLAY RECAP *****************************************************************************************
node-c0706                 : ok=1    changed=1    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
実行結果を確認するためタスクに register 変数を追加します。
- name: test play
  hosts: all
  gather_facts: no

  tasks:
      - shell: cat /tmp/text
        register: cat_result
      
      - debug:
          var: cat_result
 cat コマンドの実行結果は stdout: にセットされており、改行は \n で表示されています。この stdout: を \n の部分で 1 行ずつ分解したものが stdout_lines: にセットされています(詳細は shell モジュールの Retuen Values を確認ください)。
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml site.yml 
 
PLAY [test play] ***********************************************************************************
 
TASK [shell] ***************************************************************************************
changed: [node-c0706]
 
TASK [debug] ***************************************************************************************
ok: [node-c0706] => {
    "cat_result": {
        "changed": true, 
        "cmd": "cat /tmp/text", 
        "delta": "0:00:00.006565", 
        "end": "2019-04-07 21:47:46.931487", 
        "failed": false, 
        "rc": 0, 
        "start": "2019-04-07 21:47:46.924922", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "Hey everyone.\nThe weather is very good today.\nWatch out for injuries and enjoy yourself today.", 
        "stdout_lines": [
            "Hey everyone.", 
            "The weather is very good today.", 
            "Watch out for injuries and enjoy yourself today."
        ]
    }
}
 
PLAY RECAP *****************************************************************************************
node-c0706                 : ok=2    changed=1    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
次に stdout_lines: にセットされた値を 1 つずつ取り出して表示します。
- name: test play
  hosts: all
  gather_facts: no

  tasks:
      - shell: cat /tmp/text
        register: cat_result

      - debug:
          var: item
        loop: "{{ cat_result.stdout_lines }}"
 loop: の実行ごとに stdout_lines: にセットされた値が表示されていることが確認できます。
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml site.yml 
 
PLAY [test play] ***********************************************************************************
 
TASK [shell] ***************************************************************************************
changed: [node-c0706]
 
TASK [debug] ***************************************************************************************
ok: [node-c0706] => (item=Hey everyone.) => {
    "item": "Hey everyone."
}
ok: [node-c0706] => (item=The weather is very good today.) => {
    "item": "The weather is very good today."
}
ok: [node-c0706] => (item=Watch out for injuries and enjoy yourself today.) => {
    "item": "Watch out for injuries and enjoy yourself today."
}
 
PLAY RECAP *****************************************************************************************
node-c0706                 : ok=2    changed=1    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
今回は shell モジュールを例に説明しました。戻り値( Return Values )はモジュールごとに設定されています。 play の実行結果がが思ったとおりにならないときは register 変数を使用してチェックすると原因がわかるかもしれません。

カテゴリー

目次

QooQ