2016-05-12 80 views
6

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

正常的语法,用于传递变量包括任务不工作(见下文)

- include: someplaybook.yml variable=value 

- include: someplaybook.yml 
    vars: 
    variable: value 

我跑v2.0.2.0。

+0

你知道角色吗?这是什么正常的语法不起作用? – Nasr

+1

就我所知,变量在整个Playbook的运行时间范围内是全局的,所以你只需要在任意点定义变量 – ydaetskcoR

+0

@Nasr是的我知道角色 - 他们在这种情况下不会帮助。我添加了正常的语法。 Ansible对不同类型的变量有不同的范围。简单地使用set_facts不起作用。 – CamHart

回答

0

我发现唯一缺少的是引号。

- include: someplaybook.yml variable='value' 

它适用于我,也应该为你工作。如果不分享你面对的错误。

确保您在角色的任务中定义了此变量“变量”,并且从这里您只是将该值传递给该变量。

+3

这适用于任务包括 - 不包括手册。 – CamHart

+0

在上面的命令中我已经包含了playbook。什么意思的任务包括?你可以请分享代码使用这个变量,这样我可以得到更多的信息,你想如何使用它? –

+2

Playbook包括包括您要包含的文件在内的播放内容,即它们指定要在这些主机上运行的“主机”机器和角色/任务。任务包括只指定要运行的任务。 – CamHart

0

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

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

这里,结果是注册变量。 使用调试模块准确知道你想传递给剧本的内容。 希望这有助于。

+1

当我问这个问题时,我不记得确切的上下文,但是如果你阅读关于原始问题的评论,我很清楚,角色不能用来解决这个问题。我已经在使用角色 - 这与角色能够处理的情况略有不同。我忘记了确切的细节。 – CamHart