Ansible主机变量问题

时间:2018-01-18 03:09:12

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

当我尝试根据库存文件中设置的变量设置条件语句时,我遇到了问题。以下是详细信息。我的库存文件如下所示。

[webserver]
server1
server2

[appserver]
server1

[webserver:vars]
TYPE=w

[appserver:vars]
TYPE=a

现在,当我尝试在我的任务中添加一个条件,如

name: abc
  shell: run this task
when: TYPE == "w"

name: cde
  shell: run this task
when: TYPE == "a"

现在,当我运行Play 1时,它会拾取第一个变量并存储它,但是当它第二次尝试运行任务(Play2)时,它仍然具有相同的变量并且失败。我有两个播放1用于网络和其他用于应用程序。请让我知道可能是什么问题。

1 个答案:

答案 0 :(得分:0)

您无法在清单文件中两次定义同一变量,即使它属于另一个组也是如此。 解析库存文件后,Ansible已知的唯一“TYPE”将是库存文件中定义的最后一个。在你的情况下,这将是appserver中的一个。 如果你改变变量的顺序,我将面临完全相反的行为。

在我看来,你应该改变决定运行哪些任务的方法。

小例子:

- name: some task for webservers
  shell: run this webserver task
  when: run_webserver_task

- name: some task for appservers
  shell: run this appserver task
  when: run_appserver_task

请将此链接视为我大胆声明的证据: https://github.com/ansible/ansible/issues/6538

OR

您可以尝试以yamlish方式设计您的库存文件,而不是使用ini文件。请参阅: http://docs.ansible.com/ansible/latest/intro_inventory.html