Я пытаюсь унифицировать способ установки пакетов, у меня есть следующее
vars/main.yml:
---
packages:
system:
common:
- crudini
- dump
- duplicity
- git
- mdadm
- irssi
- lynx
- postfix
- powerline
- rsync
- tmux
- vim
Debian:
- ntp
Fedora:
- langpacks-en
- langpacks-nl
- livecd-tools
- rktime
- tmux-powerline
- tuned
- vim-powerline
И следующая задача:
- name: install ansible dependencies
package: name={{ item }} state=present
with_flattened:
- "{{ packages.system.common }}"
- "{{ packages.system.Fedora }}"
- "{{ vars['packages.system.' + ansible_distribution] }}"
when: ansible_distribution == "Fedora"
tags:
install_custom2
Что приводит к следующей ошибке:
TASK [common : install ansible dependencies] *******************************************************************************************
fatal: [host]: FAILED! => {"msg": "'dict object' has no attribute u'packages.system.Fedora'"}
Обратите внимание, что "{{ packages.system.Fedora }}"
работает нормально, но "{{ vars['packages.system.' + ansible_distribution] }}"
не работает (что также расширяется до packages.system.Fedora
). Это похоже на ошибку типа. Когда я организую имена пакетов в vars / main.yml как отдельные списки, это работает. Но я хотел бы создать эту структуру словаря, так как она хорошо организовывает переменные. Есть ли способ динамического расширения переменных словаря, подобно списочным переменным?