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 変数を使用してチェックすると原因がわかるかもしれません。