2016-03-22 6 views
0

Ich versuche include_vars basierend auf when Zustand wie folgt zu verwenden:Wie geht Ansible bedingte 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'] 

Ich 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 

Antwort

0

bekommen Wenn ein Wert beginnt zitiert, hat der gesamte Wert bis zum Ende zitiert werden oder Der YAML-Parser erhält einen epileptischen Angriff.

Das bedeutet, müssen Sie die Bedingungen wie folgt definieren:

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

Leider sind die Fehlermeldungen in ansible 2 sind nicht so klar wie in ansible 1, wo es tatsächlich diese haben darauf würde aus.


Nur um sicherzugehen ... Sie group_vars bewusst sind? Sie könnten Ihre Variablen in group_vars/hadoop-clouderamanager definieren und Sie müssten sie nicht selbst hinzufügen, da Ansible automatisch alle Variablen aller übereinstimmenden Gruppen lädt.

+0

wenn: " '{{inventory_hostname}}' in Gruppen [ 'hadoop-clouderamanager']" nicht – roy

+0

arbeitete dachte ich für group_vars ich verschiedene Rollen erstellen müssen , hier versuche ich alles in einer Rolle zu tun – roy

+1

group_vars sind nicht mit Rollen verbunden. Sie leben außerhalb von Rollen. Und IMHO-Rollen sollten vollständig unabhängig von der Host-/Gruppenkonfiguration sein und sollten mit der Variablen funktionieren, die von außen zur Verfügung gestellt wird (Host/Gruppenvars, Rollenparameter usw.). Wie auch immer, wenn das * nicht funktioniert hat, solltest du einen tieferen Blick darauf werfen, warum es nicht so war oder mehr Details liefern. Denn so geht es. :) Vergleichen Sie [dies] (http://yaml-online-parser.appspot.com/?yaml=-+foo%3A+%27bar%27+baz%0A&type=json) mit [dies] (http: // yaml -online-parser.appspot.com/?yaml=-+foo%3A+%22%27bar%27+baz%22%0A&type=json) – udondan

1

ändern, wenn die Bedingung

arbeitete folgenden
when: inventory_hostname in groups['hadoop-clouderamanager']