当我尝试根据库存文件中设置的变量设置条件语句时,我遇到了问题。以下是详细信息。我的库存文件如下所示。
[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用于网络和其他用于应用程序。请让我知道可能是什么问题。
答案 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