2016-10-26 3 views
0

ich diese in Standardwerte definiert/main.yml:yaml Syntaxfehler bei der Definition von Variablen verwenden, wenn

- mode : production 

- consul_server_address :192.168.1.5 
    when : mode == "production" 

- consul_server_address :192.168.2.5 
    when : mode == "staging" 

aber ich habe:

The offending line appears to be: 

- consul_server_address : 192.168.1.5 
    when : mode == "production" 
    ^here 

Als ich fügen Sie ein Leerzeichen nach Doppelpunkte auf consul_server_address, die Fehler Änderungen an:

ERROR! The default/main.yml file for role 'dnsmasq' must contain a dictionary of 
variables 

ich verbrachte einige Zeit auf YAML Syntax, aber ich denke, diese Idee falsch ist, und ich sollte usin tun g eine andere ansible-playbook-lösung.

+0

Dies ist kein gültiger YAML-Eingang, und der entsprechende Fehler ist kein YAML-Fehler, sondern ein anstehender Fehler. Ich nehme an, Sie liefern uns etwas anderes als die eigentlichen Eingabedaten, weil Sie damit einen anderen Fehler bekommen. – Anthon

+0

Sie haben Recht. Ich habe die Kurslinien übersprungen. Ich starte normalerweise defaults/main.yml mit: --- (\ n \ n) variable: value. Ich habe so etwas für diese Datei verwendet, aber ich habe Fehler bekommen und versucht, sie zu bearbeiten. Dies ist die endgültige Version. –

Antwort

1

Jemand auf Ansible IRC-Kanal schlug mir vor, groupvars/hostvars für diesen Zweck zu verwenden.

I edited meine hosts Inventardatei und tat etwas wie folgt aus:

[nginx-staging] 
IP_ADDRESS OR FQDN 

[nginx-staging:vars] 
... 
consul_server_address=192.168.2.5 


[nginx-production] 
IP_ADDRESS OR FQDN 

[nginx-production:vars] 
... 
consul_server_address=192.168.1.5 

und es funktionierte für mich mit einem einfacheren und straight forward Lösung.

+0

Weitere Informationen: http://docs.ansible.com/ansible/intro_inventory.html –

1

Sie beginnen Ihre YAML mit:

- mode : production 

- bezeichnet eine Sequenz Element, so dass diese Zeile definiert, dass das Wurzelelement des YAML Dokument eine Sequenz ist. Eine weitere Sequenz Artikel folgt:

- consul_server_address : 192.168.1.5 

Aber jetzt gibt es eine Linie, die nicht eine Sequenz Artikel ist:

when : mode == "production" 

Dies ist ungültig, weil wir bei Einrückungsebene 0 sind, die die Wurzel enthält Element, das eine Sequenz ist, die nur Sequenzelemente enthalten kann. Aber when : … ist ein Mapping-Schlüssel und daher hier illegal.

Was möchten Sie wahrscheinlich, dies zu tun ist:

- mode : production 

- consul_server_address : 192.168.1.5 
    when : mode == "production" 

- consul_server_address : 192.168.2.5 
    when : mode == "staging" 

Indem die when Linien Einrücken, sie sind Schlüssel der Zuordnung in der Reihenfolge Artikel enthalten sind.

+0

Eigentlich ist die Datei wie du geschrieben hast. Ein Tippfehler beim Einfügen des Dateiinhalts in den Post. Das tut mir leid. Ich habe den ursprünglichen Post bearbeitet. –

+0

Nun, der Fehler ist, dass Ihr Root-Objekt eine Sequenz ist, aber eine Zuordnung (namens * Dictionary * in der Fehlermeldung) wird erwartet. Ich weiß nicht, was gut genug ist, um dir zu sagen, wie ich das beheben kann. – flyx

Verwandte Themen