我想将变量传递给包含的Ansible playbook,如下所示:
---
- hosts: localhost
connection: local
vars:
my_group: foo
- include: site.yml hosts={{ my_group }}
然后,在site.yml
...
---
- hosts: "{{ hosts }}"
...
很遗憾,我收到一条错误消息,指出my_group
中site.yml
未定义。 Ansible docs请说:
请注意,在将一个剧本包含在另一个剧本中时,您无法进行变量替换。
这是我的情况吗?有办法吗?
答案 0 :(得分:1)
您可以使用此语法,但必须在全局级别定义my_group
。现在它是第一场比赛的本地化 - 从缩进中可以清楚地看出来。
您可以使用--extra-vars my_group=foo
。
但一般来说,您似乎想要实现的是使用内存中的库存文件和add_host
module。以此为例:
- hosts: localhost
gather_facts: no
vars:
target_host: foo
some_other_variable: bar
tasks:
- add_host:
name: "{{ target_host }}"
groups: dynamically_created_hosts
some_other_variable: "{{ some_other_variable }}"
- include: site.yml
site.yml
:
---
- hosts: dynamically_created_hosts
tasks:
- debug:
var: some_other_variable
我添加了some_other_variable
来回答您的评论中的问题“如何在游戏中全局提供变量”。它不是全球性的,但它作为“hostvar”被传递给另一个游戏。
从我所看到的(我无法解释原因)Ansible> = 2.1.1.0中,必须有一个库存文件,为动态内存库存指定工作。在旧版本中,它与Ansible一起执行ad hoc,没有库存文件,但现在您必须使用ansible-playbook
运行-i inventory_file
或通过ansible.cfg
定义库存文件。 < / p>