Установить массив как значение по умолчанию в Ansible
Я хотел бы установить массив по умолчанию, если переменная пуста. Установка пустого массива в фильтр по умолчанию описана здесь. Установка массива, который хранится в переменной, - нет.
В примере
run_targets
является
undefined
,
targets
следует использовать вместо этого.
- name: Set vars
vars:
targets: [target1, target2, target3]
- name: Include run sql task
include: tasks/sql.yml
with_items: "{{ run_targets | defult(targets) }}"
Есть какой-либо способ сделать это?
1 ответ
Ваш playbook недействителен.
vars
это не модуль, который можно запустить в задаче. Вы либо используете
set_fact
или объявить
vars
на игровом уровне. Следующий полный пример демонстрирует, что он работает без проблем:
---
- name: Demo of default from var
hosts: localhost
gather_facts: false
vars:
default_targets:
- target1
- target2
- target3
tasks:
- name: Show run targets else defaults
debug:
msg: "{{ run_targets | default(default_targets) }}"
Который дает:
$ ansible-playbook playbook.yml
PLAY [Demo of default from var] ************************************************
TASK [Show run targets else defaults] ******************************************
ok: [localhost] => {
"msg": [
"target1",
"target2",
"target3"
]
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e "{run_targets: [a,b,c]}"
PLAY [Demo of default from var] ************************************************
TASK [Show run targets else defaults] ******************************************
ok: [localhost] => {
"msg": [
"a",
"b",
"c"
]
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0