我安装了以下版本: 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文件中定义主变量。
答案 0 :(得分:8)
如果您将integration
变量作为额外变量传递:
ansible-playbook -e integration=int60 myplaybook.yml
播放“标题”中使用的任何变量都应在Ansible分析剧本之前定义。
在您的示例中,您将integration
定义为主机事实。事实只在任务级别定义,而不是游戏级别。
更新,您可以使用其他方式传递变量,而不仅仅是额外的变量。 例如:
- hosts: "{{ lookup('env','DYN_HOSTS') }}"
也可以。