Динамическое расширение словарных переменных в Ansible - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь унифицировать способ установки пакетов, у меня есть следующее

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 как отдельные списки, это работает. Но я хотел бы создать эту структуру словаря, так как она хорошо организовывает переменные. Есть ли способ динамического расширения переменных словаря, подобно списочным переменным?

1 Ответ

0 голосов
/ 03 мая 2018

Понял, работает с: "{{ packages.system[ansible_distribution] }}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...