将变量传递给包含的Ansible playbook

时间:2017-01-04 12:26:17

标签: ansible ansible-playbook ansible-2.x

我想将变量传递给包含的Ansible playbook,如下所示:

---
- hosts: localhost
  connection: local
  vars:
    my_group: foo

- include: site.yml hosts={{ my_group }}

然后,在site.yml ...

---
- hosts: "{{ hosts }}"
...

很遗憾,我收到一条错误消息,指出my_groupsite.yml未定义。 Ansible docs请说:

  

请注意,在将一个剧本包含在另一个剧本中时,您无法进行变量替换。

这是我的情况吗?有办法吗?

1 个答案:

答案 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&gt; = 2.1.1.0中,必须有一个库存文件,为动态内存库存指定工作。在旧版本中,它与Ansible一起执行ad hoc,没有库存文件,但现在您必须使用ansible-playbook运行-i inventory_file或通过ansible.cfg定义库存文件。 < / p>