在Ansible中导入时,是否可以引用组变量?

蔡国强

在我的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Python 中导入时未解析的引用

python导入时,是否在“ import”语句中导入名称?

是否可以在SonarQube中导入OpenCover / result?

是否可以仅从包中导入功能?

是否可以在Azure中导入python脚本?

是否可以在 YAML 模板中导入脚本

是否可以从文件中导入 pip 模块

是否可以从另一个脚本导入函数而不从此类文件中导入变量?

变量是否可以引用自身

是否可以从Ansible组中删除主机?

在ObservableObject中导入变量

如何检测是否在 Python 3 中导入了类/变量?

是否可以在打字稿中导入通用诺言?

是否可以从Python包中导入单个模块?

是否可以模拟从golang包中导入的函数?

是否可以在ES2015中导入类方法

是否可以使用@import在sass中导入整个目录?

是否可以在文件夹中导入* .vue文件?

Symfony 2:是否可以在YAML文件中导入PHP文件?

是否可以在emcc编译的wasm代码中导入Javascript函数?

在TypeScript中导入时“找不到模块”

在 Python 中导入时执行代码

Ansible是否可以合并任何变量?

是否可以在定义变量之前引用它?

在Hybris PrepareInterceptor中导入导入时启动EventService

如果 aldrady 在 Angular 的父级中导入,是否可以省略显式重叠导入?

是否可以在本身导入GitHub存储库以起作用的Google Colab中导入python文件?

从ansml文件中导入变量

是否可以创建无需在scala中导入就可以访问的方法?