ansible block内でのset_factはblock外にも影響するか
検証用playbook
site.yml
---
- hosts: all
gather_facts: false
tasks:
- set_fact:
foo: 外側
- block:
- set_fact:
foo: 内側
- debug:
var: foo
- debug:
var: foo
実行結果
$ ansible-playbook -i localhost, -c local site.yml
PLAY [all] *********************************************************************
TASK [set_fact] ****************************************************************
ok: [localhost]
TASK [set_fact] ****************************************************************
ok: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"foo": "内側"
}
TASK [debug] *******************************************************************
ok: [localhost] => {
"foo": "内側"
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
結論: blockは(予想通り)set_factによる変数設定を隠蔽しない
set_factによる設定はグローバル相当
そもそも全てのplayで参照可能!!
インベントリ、varsプラグイン、またはset_factやinclude_varsなどのモジュールを使用して定義された変数は、「ホストスコープ」変数と呼ばれ、すべてのプレイで使用できる。