it-swarm.com.de

Wie genau analysiert Ansible boolesche Variablen?

In Ansible gibt es mehrere Stellen, an denen Variablen definiert werden können: im Inventar, in einem Playbook, in Variablendateien usw. Kann jemand die folgenden Beobachtungen erklären, die ich gemacht habe?

  1. Wenn eine Boolesche Variable in einem Inventar definiert wird, MUSS sie in Großbuchstaben geschrieben werden (d. H. Wahr/Falsch). Andernfalls (d. H. Wahr/Falsch) wird sie nicht als Boolesche Variable, sondern als Zeichenfolge interpretiert.
  2. In allen mit YAML formatierten Dateien (Playbooks, Rollen usw.) werden sowohl True/False als auch True/False als Boolean interpretiert.

Zum Beispiel habe ich zwei Variablen in einem Inventar definiert:

abc=false
xyz=False

Und beim Debuggen des Typs dieser Variablen in einer Rolle ...

- debug:
    msg: "abc={{ abc | type_debug }}  xyz={{ xyz | type_debug }}"

... dann wird abc zu unicode, aber xyz wird als bool interpretiert:

ok: [localhost] => {
    "msg": "abc=unicode  xyz=bool"
}

Wenn Sie jedoch dieselben Variablen in einem Playbook definieren, gehen Sie wie folgt vor:

  vars:
    abc: false
    xyz: False

... dann werden beide Variablen als bool erkannt.

Ich musste dies auf die harte Tour erkennen, nachdem ich ein Playbook in der Produktion ausgeführt hatte und etwas ausgeführt hatte, das aufgrund einer Variablen, die in einem Inventar auf 'false' anstelle von 'False' gesetzt war, nicht ausgeführt werden sollte. Daher möchte ich wirklich eine klare Antwort darauf finden, wie Ansible Boolesche Werte versteht und wie dies davon abhängt, wo/wie die Variable definiert ist. Soll ich aus Sicherheitsgründen einfach immer das großgeschriebene "Wahr/Falsch" verwenden? Ist es gültig zu sagen, dass Boolesche Werte in YAML-Dateien (mit dem Format key: value) Groß- und Kleinschreibung wird nicht berücksichtigt, während in Eigenschaftendateien (mit dem Format key=value) Groß- und Kleinschreibung beachten? Alle tieferen Einblicke wäre sehr dankbar.

15
dokaspar

In YAML-Dateien definierte Variablen (Wiedergabebücher, vars_files, Inventare im YAML-Format)


YAML-Prinzipien

Playbooks, vars_files und in YAML geschriebene Inventardateien werden zuerst von einem YAML-Parser verarbeitet. Es sind mehrere Aliase für Werte zulässig, die als Boolean gespeichert werden: yes/no, true/false, on/off, in mehreren Fällen definiert: true/True/TRUE (daher wird die Groß- und Kleinschreibung nicht beachtet).

YAML-Definition gibt mögliche Werte an als:

y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

Ansible-Dokumente bestätigen dies :

Sie können auch einen booleschen Wert (true/false) in verschiedenen Formen angeben:

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false


In Inventardateien im INI-Format definierte Variablen


Python-Prinzipien

Wenn Ansible ein Inventar im INI-Format liest, verarbeitet es die Variablen nter Verwendung von Python integrierten Typen :

Mit der Syntax key=value Übergebene Werte werden als Python Literalstruktur (Zeichenfolgen, Zahlen, Tupel, Listen, Diktate, Boolesche Werte, Keine) oder als Zeichenfolge interpretiert. Beispiel: var=FALSE Würde einen String erstellen, der gleich FALSE ist.

Wenn der angegebene Wert mit der Zeichenfolge True oder False (beginnend mit einem Großbuchstaben) übereinstimmt, wird der Typ auf Boolean festgelegt, andernfalls wird er als Zeichenfolge behandelt (sofern er nicht mit einem anderen Typ übereinstimmt).



Variablen, die mit dem CLI-Parameter --extra_vars Definiert wurden


Alle Saiten

Alle Variablen, die in CLI als zusätzliche Variablen übergeben werden, sind vom Typ Zeichenfolge.

28
techraf