Учитывая роль
shell> cat roles/davidwittman_redis/tasks/main.yml
- debug:
var: dictionary
Удалить with_dict
. Пособие
shell> cat playbook.yml
- hosts: localhost
vars_files:
- some_vars_file.yml
tasks:
- name: Install and setup redis
include_role:
name: davidwittman_redis
loop: "{{ redis_config }}"
loop_control:
loop_var: dictionary
дает
shell> ansible-playbook playbook.yml
PLAY [localhost] **********************************************
TASK [Install and setup redis] ********************************
TASK [davidwittman_redis : debug] *****************************
ok: [localhost] =>
dictionary:
vars:
redis_bind: 127.0.0.1
redis_databases: 1
redis_port: 6379
redis_version: 6.0.6
TASK [davidwittman_redis : debug] ******************************
ok: [localhost] =>
dictionary:
vars:
redis_bind: 127.0.0.1
redis_databases: 1
redis_port: 6380
redis_version: 6.0.6
Q: «Может быть проблема, связанная с переменной совокупностью при вызове роли?»
О: Да. Это может. См. Приоритет переменных . vars_files
- это приоритет 14. Любой более высокий приоритет имеет приоритет перед ним. Решите, как структурировать данные, и при необходимости используйте include_vars
(приоритет 18). Например,
shell> cat playbook.yml
- hosts: localhost
tasks:
- include_vars: some_vars_file.yml
- name: Install and setup redis
include_role:
name: davidwittman_redis
loop: "{{ redis_config }}"
loop_control:
loop_var: dictionary
В конечном итоге командная строка - extra-vars переопределит все предыдущие настройки
shell> ansible-playbook playbook.yml --extra-vars "@some_vars_file.yml"
Q: «Может, нельзя задать секцию vars напрямую через внешний словарь?»
A: Можно, конечно. Пример в этом ответе наглядно это доказывает.