Ansible 多重条件不起作用

Ansible multiple condition not working

Ansible 版本:2.2.1.0

主机文件:

[master] 54.65.104.4 [slaves] 52.69.71.248

tasks/main.yaml

 - name: Checking if the node is already having spark master installed (master)
   stat:
     path: /etc/init.d/spark-master
     register: spark-master
   when: inventory_hostname in groups['master']
 - name: Checking if the node is already having spark worker installed
   stat:
     path: /etc/init.d/spark-slave
     register: spark-slave
   when: inventory_hostname in groups['slaves']

  # Downloading to the master
 - include: download.yaml
   when: (inventory_hostname in groups['master']) and ( spark-master.stat.exists == false)

 # Downloading to the slaves
 - include: download.yaml
   when: (inventory_hostname in groups['slaves']) and ( spark-slave.stat.exists == False )

但是当我执行脚本时,我收到以下错误:

 fatal: [52.69.71.248]: FAILED! => {"failed": true, "msg": "The conditional check '(inventory_hostname in groups['slaves']) and ( spark-slave.stat.exists == False )' failed. The error was: error while evaluating conditional ((inventory_hostname in groups['slaves']) and ( spark-slave.stat.exists == False )): 'slave' is undefined\n\nThe error appears to have been in '/opt/ansible-role-spark/tasks/download.yaml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: Download Spark\n  ^ here\n"}

谁能帮我找出我犯的错误。

要么引用条件,如:

when: "(inventory_hostname in groups['master']) and ( spark-master.stat.exists == false)"

或者不使用括号。

有问题的错误是关于:

Variable names should be letters, numbers, and underscores.

参见docs

但是你的剧本中还有其他设计缺陷超出了这个问题。