Щоб дізнатися тип даних (тип на мові python), вам потрібно скористатися фільтром type_debug.
Приклад:
- name: Display the type of a variable
debug:
var: true_boolean|type_debug
що дає нам:
TASK [Display the type of a variable] ******************************************************************
ok: [localhost] => {
"true_boolean|type_debug": "bool"
}
Ціле число можна перетворити на рядок:
- name: Transforming a variable type
debug:
var: zero|string
- name: Transforming a variable type
debug:
var: zero_string|int
або змінну в логічне значення:
- 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
Рядок символів можна перетворити на верхній або нижній регістр:
- name: Lowercase a string of characters
debug:
var: whatever | lower
- name: Upercase a string of characters
debug:
var: whatever | upper
що дає нам:
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!"
}
Фільтр replace дозволяє замінювати символи іншими.
Тут ми видаляємо пробіли або навіть замінюємо слово:
- name: Replace a character in a string
debug:
var: whatever | replace(" ", "")
- name: Replace a word in a string
debug:
var: whatever | replace("false", "true")
що дає нам:
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 !"
}
Фільтр split розбиває рядок на список на основі символу:
- name: Cutting a string of characters
debug:
var: whatever | split(" ", "")
TASK [Cutting a string of characters] *****************************************************
ok: [localhost] => {
"whatever | split(\" \")": [
"It's",
"false!"
]
}
Фільтри dict2items і itemstodict, дещо складніші для реалізації, часто використовуються, особливо в циклах.
Зауважте, що можна вказати назву ключа та значення для використання в перетворенні.
- 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:
- name: Default value
debug:
var: variablethatdoesnotexists | default(whatever)
Нарешті, необов’язкову змінну в модулі можна проігнорувати, якщо вона не існує з ключовим словом omit у фільтрі default, що позбавить вас від помилки під час виконання.
- name: Add a new user
ansible.builtin.user:
name: "{{ user_name }}"
comment: "{{ user_comment | default(omit) }}"
Прив'язати значення відповідно до іншого (ternary)¶
Іноді вам потрібно використовувати умову, щоб призначити значення змінній, і в цьому випадку зазвичай потрібно виконати крок set_fact.
Цього можна уникнути за допомогою фільтра ternary: