2016-03-22 3 views
0

Я пытаюсь использовать include_vars на основе when состояния следующим образом:Как сделать Ansible условным include_vars? не

- include_vars: clouderamanager.yml 
    when: '{{ inventory_hostname }}' in groups['hadoop-clouderamanager'] 

- include_vars: hadoop-namenode.yml 
    when: '{{ inventory_hostname }}' in groups['hadoop-namenode'] 

- include_vars: resourcemanager.yml 
    when: '{{ inventory_hostname }}' in groups['hadoop-resourcemanager'] 

- include_vars: spark-history-server.yml 
    when: '{{ inventory_hostname }}' in groups['spark-history-server'] 

я получаю ERROR! Syntax Error while loading YAML.

The error appears to have been in '~/ansible/roles/hadoop-master/tasks/main.yml': line 4, column 36, but may be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 

- include_vars: clouderamanager.yml 
    when: '{{ inventory_hostname }}' in groups['hadoop-clouderamanager'] 
           ^here 

ответ

0

Если значение начинается в кавычки, все значение должно быть заключено в кавычки до конца или парсер YAML получает эпилептическую атаку.

Это означает, что вы должны определить условия, как это:

when: "'{{ inventory_hostname }}' in groups['hadoop-clouderamanager']" 

К сожалению, сообщения об ошибках в анзибль 2 не ясно, как в анзибль 1, где она фактически указал на это.


Просто, чтобы убедиться, что ... Вы знаете о group_vars? Вы можете определить свои переменные в group_vars/hadoop-clouderamanager, и вам не нужно будет включать его самостоятельно, так как Ansible автоматически загружает все переменные всех соответствующих групп.

+0

, когда: "{{inventory_hostname}} 'в группах [ 'Hadoop-clouderamanager']" не работало – roy

+0

я думаю, что для group_vars мне нужно создать различные роли , здесь я пытаюсь сделать все в одной роли. – roy

+1

group_vars не связаны с ролями. Они живут вне ролей. И роли IMHO должны быть полностью независимы от конфигурации хоста/группы и должны работать с любой конфигурацией переменной, предоставляемой внешними (host/group_vars, параметрами ролей и т. Д.). Во всяком случае, если это * не сработало *, вы должны глубже понять, почему он не дал или не предоставил более подробную информацию. Потому что так оно и есть. :) Сравните [this] (http://yaml-online-parser.appspot.com/?yaml=-+foo%3A+%27bar%27+baz%0A&type=json) с [this] (http: // yaml -online-parser.appspot.com/?yaml=-+foo%3A+%22%27bar%27+baz%22%0A&type=json) – udondan

1

Изменения при выполнении условия следующего работало

when: inventory_hostname in groups['hadoop-clouderamanager'] 
Смежные вопросы