为什么 ansible returns 'ansible_local' 未定义
why ansible returns 'ansible_local' is undefined
我对 ansible_local 变量有疑问:
我在我的 ansible 目标
上定义了以下 facts.d
[role]
version=roles/version
我可以使用 ansible 设置模块或以下 playbook 成功访问此事实
- name: "test"
hosts: "{{ myhost }}"
gather_facts: yes
vars:
my_role_path: "{{ ansible_local.test.role.version }}"
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
标准输出:
TASK [debug] **************************************************************************************************
ok: [rhel8-test-2] => {
"msg": "roles/version"
}
PLAY RECAP **************************************************************************************************
rhel8-test-2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
现在,我想使用 var my_role_path 来调用位于我的 ansible 服务器的“my_role_path”文件夹中的名为“echo”的角色。
我添加以下声明:
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
roles:
- "{{ my_role_path }}/echo"
现在 ansible returns :
ERROR! {{ ansible_local.test.role.version }}: 'ansible_local' is undefined
是我变量的命名空间或范围的问题吗?欢迎提供任何线索。
谢谢。
静态导入(roles:
和 import_role
)发生在 playbook 解析时,因此用于导入操作的所有变量(例如在文件名中)必须在此时可用。事实是在剧本执行期间收集的,因此不能这样使用。 (可能可以通过启用事实缓存并确保缓存永不过期来实现这一点,但这是一个脆弱的前景。)
您应该改用 dynamic include,它将在执行期间而不是在解析期间进行处理。
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
- ansible.builtin.include_role:
name: "{{ my_role_path }}/echo"
我对 ansible_local 变量有疑问: 我在我的 ansible 目标
上定义了以下 facts.d[role]
version=roles/version
我可以使用 ansible 设置模块或以下 playbook 成功访问此事实
- name: "test"
hosts: "{{ myhost }}"
gather_facts: yes
vars:
my_role_path: "{{ ansible_local.test.role.version }}"
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
标准输出:
TASK [debug] **************************************************************************************************
ok: [rhel8-test-2] => {
"msg": "roles/version"
}
PLAY RECAP **************************************************************************************************
rhel8-test-2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
现在,我想使用 var my_role_path 来调用位于我的 ansible 服务器的“my_role_path”文件夹中的名为“echo”的角色。
我添加以下声明:
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
roles:
- "{{ my_role_path }}/echo"
现在 ansible returns :
ERROR! {{ ansible_local.test.role.version }}: 'ansible_local' is undefined
是我变量的命名空间或范围的问题吗?欢迎提供任何线索。 谢谢。
静态导入(roles:
和 import_role
)发生在 playbook 解析时,因此用于导入操作的所有变量(例如在文件名中)必须在此时可用。事实是在剧本执行期间收集的,因此不能这样使用。 (可能可以通过启用事实缓存并确保缓存永不过期来实现这一点,但这是一个脆弱的前景。)
您应该改用 dynamic include,它将在执行期间而不是在解析期间进行处理。
tasks:
- name: debug
ansible.builtin.debug:
msg: "{{ my_role_path }}"
- ansible.builtin.include_role:
name: "{{ my_role_path }}/echo"