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

Vet*_*emi 7 ansible ansible-playbook ansible-2.x

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

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

hosts: "{{integration}}"
Run Code Online (Sandbox Code Playgroud)

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

integration: "int60"
Run Code Online (Sandbox Code Playgroud)

主机文件看起来是这样的:

[int60] 
hostA

[int61]
hostB
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我还尝试以下列方式定义主机var:

[integration]
127.0.0.1 ansible_host="{{ integration_env }}"
Run Code Online (Sandbox Code Playgroud)

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

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

Kon*_*rov 8

如果您将integration变量作为额外变量传递,这将起作用:

ansible-playbook -e integration=int60 myplaybook.yml
Run Code Online (Sandbox Code Playgroud)

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

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

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

- hosts: "{{ lookup('env','DYN_HOSTS') }}"
Run Code Online (Sandbox Code Playgroud)

也会工作.