将变量传递给包含的剧本?

时间:2016-05-12 21:30:05

标签: ansible ansible-playbook

我想有一个大师剧本,其中包括其他剧本。是否可以将变量传递给包含的剧本?

用于将变量传递给包含任务的常规语法不起作用(见下文)

- include: someplaybook.yml variable=value

- include: someplaybook.yml
  vars:
    variable: value

我正在运行v2.0.2.0。

4 个答案:

答案 0 :(得分:2)

另外,我建议你读这个, http://docs.ansible.com/ansible/latest/playbooks_reuse.html 在这种情况下尝试使用角色,它会在这样的情况下有所帮助,你试图在一个主要的剧本中包含/导入多个剧本。 关于将值传递给include语句,您可以将其添加到角色的vars main.yml中。 或者,如果要传递的变量是单个主要playbook中上一个任务的结果,请使用“register”并将输出保存为变量。

- debug: msg="{{result.stdout_lines}}"

这里,结果是注册变量。 使用调试模块确切地知道要传递给剧本的内容。 希望这会有所帮助。

答案 1 :(得分:1)

我唯一看到缺失的是引号。

- include: someplaybook.yml variable='value'

它对我有用,也适合你。如果不分享您所面临的错误。

确保您拥有此变量"变量"在角色的任务中定义,从这里你只是将值传递给该变量。

答案 2 :(得分:0)

在ansible 2.4上测试

- import_playbook: any_playbook.yml variable='value'

答案 3 :(得分:0)

在我看来,将变量传递给包含的剧本以及当前剧本中的另一个剧本的最一致的方法是使用:

 set_fact:
      global_var_name: "{{ your_var }}"

之前

 - import_playbook: your_playbook.yml

设置事实后,它可以从剧本中的任何剧本和导入的剧本中访问,例如在“your_playbook”中,你可以这样称呼它:

 debug:
      var: global_var_name

如果您使用:

 - import_playbook: someplaybook.yml variable='value'

如果您尝试传递 var 值,则只能传递固定的“值”(也包含在包含中):

 - import_playbook: someplaybook.yml internal_var="{{ your_var }}"

当你在'someplaybook.yml'中调用internal_var时你会得到NOT DEFINED

所有这一切都适用于 2021 年初的 ansible 2.9*,他们很有可能会“修复”import_playbook,顺便说一下,我想要这个。