Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 在角色任务中包含变量_Ansible_Ansible Playbook - Fatal编程技术网

Ansible 在角色任务中包含变量

Ansible 在角色任务中包含变量,ansible,ansible-playbook,Ansible,Ansible Playbook,在一个角色中,我试图从另一个角色加载一些变量。(如果该角色包含在当前剧本中,变量将是可访问的,但事实并非如此。) 所以我试了一下: - include_vars: ../../another_role/defaults/main.yml 但是它不工作,没有错误,但是变量仍然没有定义。 所以我试着聪明一点,将文件符号链接到我想要使用vars的角色中的vars/other_role\u defaults.yml,然后像这样包含它: - include_vars: another_role_defa

在一个角色中,我试图从另一个角色加载一些变量。(如果该角色包含在当前剧本中,变量将是可访问的,但事实并非如此。)

所以我试了一下:

- include_vars: ../../another_role/defaults/main.yml
但是它不工作,没有错误,但是变量仍然没有定义。 所以我试着聪明一点,将文件符号链接到我想要使用vars的角色中的
vars/other_role\u defaults.yml
,然后像这样包含它:

- include_vars: another_role_defaults.yml
- include_vars: ../../another_role/defaults/main.yml

- debug: msg={{ variable }}
  tags: foo
  ansible-playbook -vvvv playbook.yml --tags foo
- include_vars: ../../another_role/defaults/main.yml
  tags: foo

- debug: msg={{ variable }}
  tags: foo
同样的结果,没有错误(如果找不到文件,为什么不抛出错误??),但变量仍然未定义。我也试过了,但还是没有雪茄

- include_vars: ../vars/another_role_defaults.yml

我做错了什么?

最后是我自己的错。。。我使用
debug
模块和
tags
进行了测试,如下所示:

- include_vars: another_role_defaults.yml
- include_vars: ../../another_role/defaults/main.yml

- debug: msg={{ variable }}
  tags: foo
  ansible-playbook -vvvv playbook.yml --tags foo
- include_vars: ../../another_role/defaults/main.yml
  tags: foo

- debug: msg={{ variable }}
  tags: foo
然后像这样执行剧本:

- include_vars: another_role_defaults.yml
- include_vars: ../../another_role/defaults/main.yml

- debug: msg={{ variable }}
  tags: foo
  ansible-playbook -vvvv playbook.yml --tags foo
- include_vars: ../../another_role/defaults/main.yml
  tags: foo

- debug: msg={{ variable }}
  tags: foo
一旦我忽略了标签,它就会工作(当然)。问题是,我应该像这样将标签添加到
include_vars
命令中:

- include_vars: another_role_defaults.yml
- include_vars: ../../another_role/defaults/main.yml

- debug: msg={{ variable }}
  tags: foo
  ansible-playbook -vvvv playbook.yml --tags foo
- include_vars: ../../another_role/defaults/main.yml
  tags: foo

- debug: msg={{ variable }}
  tags: foo

如果从其他角色导入文件,则接受的解决方案在我的案例中不起作用。通过特殊变量稍微修改的方法对我有效:

- include_vars: "{{ role_path }}/../another_role/defaults/main.yml"
  tags: foo

-当前运行角色的目录路径

自ansible core 2.11起,您可以执行以下操作:

-包括变量:../../nrpe/vars/standard\u nrpe\u checks.yml
名称:标准检查
-调试:
msg:{{标准检查}”
要获得相同的结果,您还可以使用查找插件使用
set\u fact

-调试:
msg:{{lookup('file','../../nrpe/vars/standard_nrpe_checks.yml')}
我想提到的是,你是否正在使用收藏并分发一本你可以使用的剧本

playbooks
  |_vars/
    |_standard_nrpe_checks.yml
在这个例子中,我现在可以在集合中共享变量,因为它位于查找路径中,所以我不需要相对地指定它。也就是说,不要让列表成为nrpe角色默认值,而是为两个角色读入列表并将其保存在一个位置

-包括变量:标准检查.yml
名称:标准检查
-调试:
msg:{{标准检查}”

伟大的“特色”。就花了半个小时。感谢您发布回复。半小时而不是半天)