Ansible:使用变量来定义playbook主机

时间:2016-12-06 10:03:30

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

我安装了以下版本: ansible 2.3.0(devel 2131eaba0c)

我想将主变量指定为外部变量,然后在 playbook 中使用它,类似于:

hosts: "{{integration}}"

在我的 group_vars / all 文件中,我有以下定义的变量:

integration: "int60"

主机文件如下所示:

[int60] 
hostA

[int61]
hostB

不幸的是,这不起作用。我还试图通过以下方式定义主机var

[integration]
127.0.0.1 ansible_host="{{ integration_env }}"

并在我的 group_vars / all 文件中指定了integration_env。在这种情况下,它似乎在本地运行任务而不是在所需的环境中。

有可能做这样的事吗?我会接受全新的做法。主要目标是在var文件中定义主变量。

1 个答案:

答案 0 :(得分:8)

如果您将integration变量作为额外变量传递:

,这将有效
ansible-playbook -e integration=int60 myplaybook.yml

播放“标题”中使用的任何变量都应在Ansible分析剧本之前定义。

在您的示例中,您将integration定义为主机事实。事实只在任务级别定义,而不是游戏级别。

更新,您可以使用其他方式传递变量,而不仅仅是额外的变量。 例如:

- hosts: "{{ lookup('env','DYN_HOSTS') }}"

也可以。