在我的Ansible脚本中,导入剧本时是否可以引用路径变量?
我在导入和包含剧本和变量文件时要在Ansible文件层次结构中设置不同变量的路径,以供参考。路径变量是在group_vars / all /目录中的文件中定义的,因此它们会自动加载。
当我尝试导入一个剧本并引用我的一个路径变量时,出现一个错误,指出该变量未定义。
这是一个例子。我创建了一个简单的剧本文件,称为include.yml:
---
- name: Include playbook
import_playbook: "{{ base_dir }}/foo.yml"
该剧本在变量base_dir定义的目录中导入另一个名为foo.yml的剧本。
这是foo.yml:
---
- name:
hosts: localhost
gather_facts: no
tasks:
- name: Check that group_vars/all variable loaded
debug:
var: test_dir
在group_vars / all /目录中,我在名为dirs.yml的文件中定义base_dir和test_dir:
base_dir: "{{ playbook_dir }}"
test_dir: "{{ base_dir }}/foo"
当我跑步时:
ansible-playbook include.yml
我希望Ansible将导入并运行foo.yml,该命令将输出引用base_dir的test_dir变量的值。
相反,我得到了错误:
ERROR! 'base_dir' is undefined
如果我运行:
ansible-playbook include.yml --extra-vars base_dir="."
然后它会按预期运行。
看来导入是在加载group_vars变量之前发生的。
如果为true,这是不方便的,因为我想在可以由多个剧本引用的全局变量中定义文件路径,而不是在所有剧本中对其进行硬编码。有没有解决这个问题的方法?
问:“我想在可以被多个剧本引用的全局变量中定义文件路径,而不是在所有剧本中对其进行硬编码。是否有解决此问题的方法?
答:可以合理预期在导入剧本之前可能已经加载了group_vars / all。但是,无论是剧本还是与清单相关的group_vars / all都无法通过这种方式工作。此主题(locked and limited conversation to collaborators on Apr 27
)上有已解决的问题,例如playbook_vars_root无法用于导入playbook#34239。
没有解决方法。这些变量的作用范围就是发挥作用。在播放中确定主机之前,无法加载goup_vars。
FWIW。ansible-runner是一种以系统且灵活的方式运行剧本的选项。请参阅“跑步者输入目录层次结构和正在运行的剧本”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句