Das folgende ist eine exemplarische Liste von Filtern, die Sie am ehesten begegnen oder benötigen werden.
Zum Glück gibt es viele andere. Sie könnten sogar Ihre eigene implementieren!
Daten können von einem Typ in einen anderen umgewandelt werden.
Um den Typ der Daten (der Typ in der Python-Sprache) zu erfahren, müssen Sie den type_debug Filter verwenden.
Beispiel:
- name: Display the type of a variable
debug:
var: true_boolean|type_debug
dies ergibt:
TASK [Display the type of a variable] ******************************************************************
ok: [localhost] => {
"true_boolean|type_debug": "bool"
}
Es ist möglich, einen Integer in einen String umzuwandeln:
- name: Transforming a variable type
debug:
var: zero|string
- name: Transforming a variable type
debug:
var: zero_string|int
oder eine Variable in Boolean:
- name: Display an integer as a boolean
debug:
var: non_zero | bool
- name: Display a string as a boolean
debug:
var: true_non_boolean | bool
- name: Display a string as a boolean
debug:
var: false_non_boolean | bool
- name: Display a string as a boolean
debug:
var: whatever | bool
Ein String kann in Groß- oder Kleinschreibung umgewandelt werden:
- name: Lowercase a string of characters
debug:
var: whatever | lower
- name: Upercase a string of characters
debug:
var: whatever | upper
dies ergibt:
TASK [Lowercase a string of characters] *****************************************************
ok: [localhost] => {
"whatever | lower": "it's false!"
}
TASK [Upercase a string of characters] *****************************************************
ok: [localhost] => {
"whatever | upper": "IT'S FALSE!"
}
Der replace-Filter erlaubt es Ihnen, Zeichen durch andere zu ersetzen.
Hier entfernen wir Leerzeichen oder ersetzen sogar ein Wort:
- name: Replace a character in a string
debug:
var: whatever | replace(" ", "")
- name: Replace a word in a string
debug:
var: whatever | replace("false", "true")
dies ergibt:
TASK [Replace a character in a string] *****************************************************
ok: [localhost] => {
"whatever | replace(\" \", \"\")": "It'sfalse!"
}
TASK [Replace a word in a string] *****************************************************
ok: [localhost] => {
"whatever | replace(\"false\", \"true\")": "It's true !"
}
Der split-Filter teilt einen String in eine Liste basierend auf einem Zeichen auf:
- name: Cutting a string of characters
debug:
var: whatever | split(" ", "")
TASK [Cutting a string of characters] *****************************************************
ok: [localhost] => {
"whatever | split(\" \")": [
"It's",
"false!"
]
}
Häufig müssen die verschiedenen Elemente einer Liste in einem einzigen String zusammengefasst werden. Wir können dann ein Zeichen oder einen String angeben, der zwischen den Elementen eingefügt werden soll.
- name: Joining elements of a list
debug:
var: my_simple_list|join(",")
- name: Joining elements of a list
debug:
var: my_simple_list|join(" | ")
dies ergibt:
TASK [Joining elements of a list] *****************************************************************
ok: [localhost] => {
"my_simple_list|join(\",\")": "value_list_1,value_list_2,value_list_3"
}
TASK [Joining elements of a list] *****************************************************************
ok: [localhost] => {
"my_simple_list|join(\" | \")": "value_list_1 | value_list_2 | value_list_3"
}
Umwandlung von Dictionaries in Listen (und umgekehrt)¶
Die Filter dict2items und itemstodict, etwas komplexer zu implementieren, werden häufig verwendet, besonders in Schleifen.
Beachten Sie, dass es möglich ist, den Namen des Schlüssels und des Wertes für die Transformation anzugeben.
- name: Display a dictionary
debug:
var: my_dictionary
- name: Transforming a dictionary into a list
debug:
var: my_dictionary | dict2items
- name: Transforming a dictionary into a list
debug:
var: my_dictionary | dict2items(key_name='key', value_name='value')
- name: Transforming a list into a dictionary
debug:
var: my_list | items2dict(key_name='element', value_name='value')
TASK [Display a dictionary] *************************************************************************
ok: [localhost] => {
"my_dictionary": {
"key1": "value1",
"key2": "value2"
}
}
TASK [Transforming a dictionary into a list] *************************************************************
ok: [localhost] => {
"my_dictionary | dict2items": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
]
}
TASK [Transforming a dictionary into a list] *************************************************************
ok: [localhost] => {
"my_dictionary | dict2items (key_name = 'key', value_name = 'value')": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
]
}
TASK [Transforming a list into a dictionary] ************************************************************
ok: [localhost] => {
"my_list | items2dict(key_name='element', value_name='value')": {
"element1": "value1",
"element2": "value2"
}
}
Default-Werte, optionale Variablen und Variablen schützen¶
Sie werden schnell mit Fehlern bei der Ausführung Ihrer Playbooks konfrontiert, wenn Sie keine Default-Werte für Ihre Variablen angeben oder wenn Sie sie nicht schützen.
Der Wert einer Variable kann durch eine andere ersetzt werden, wenn sie nicht mit dem Filter default existiert:
- name: Default value
debug:
var: variablethatdoesnotexists | default(whatever)
Schließlich kann eine optionale Variable in einem Modul ignoriert werden, wenn sie nicht mit dem Schlüsselwort omit im Filter default vorhanden ist, was Ihnen einen Fehler bei der Laufzeit erspart.
- name: Add a new user
ansible.builtin.user:
name: "{{ user_name }}"
comment: "{{ user_comment | default(omit) }}"
Manchmal müssen Sie eine Bedingung verwenden, um einer Variable einen Wert zuzuweisen, in diesem Fall ist es üblich, einen set_fact Schritt zu durchlaufen.
Dies kann durch Verwendung des ternary Filter vermieden werden:
{{ 10000 | random }}: Wie der Name andeutet, gibt einen zufälligen Wert an.
{{ my_simple_list | first }}: Extrahiert das erste Element der Liste.
{{ my_simple_list | length }}: gibt die Länge (einer Liste oder einer Zeichenkette) an.
{{ ip_list | ansible.netcommon.ipv4 }}: zeigt nur IPv4-Adressen an. Ohne auf das Thema einzugehen, gibt es bei Bedarf viele Filter, die dem Netzwerk gewidmet sind.
{{ user_password | password_hash('sha512') }}: generiert ein Passwort in sha512.