2014-12-03 2 views
0

Файл вара определяются следующим образом:Выбор переменных динамически в анзибле

packages: 
    - python-pycurl 
    - name: tmux 
    files: 
     tmux.conf: /etc/tmux/conf 
     tmux2.conf: /etc/tmux/conf2 

Так пакет список имен пакетов или словарей, если требуется расширенная настройка. Я хотел бы установить все пакеты с помощью одной задачи независимо от того, определено ли имя пакета в списке или с помощью словаря. Я прыгал то вроде следующего может быть достигнуто:

- name: Install Base Packages 
    apt: name={{ [item.name, item] | select('defined') }} 
    with_items: packages 

Я знаю, что я могу сделать это с 2 TAKS использованием when строфу, но это не то, что я хочу, как это не DRY.

Вторая часть также представляет проблему, так как первый пакет не имеет файлы, определенные таким образом, это жалуется:

- name: Copy package customizations 
    copy: src={{item.key}} dest={{item.value}} 
    with_subelements: 
     - packages 
     - files 

ли это вообще возможно, чтобы использовать этот вид установки или я должен быть слишком разговорчивым, даже для те элементы, которые этого не требуют?

ответ

2

В конце концов вы получите какой-то уродливый код Ansible, чтобы сделать то, что вы хотите, ваша лучшая ставка будет либо сделать ваши пакеты var uniform, либо разбить на два vars, один список пакетов и второй который отображает список файлов в пакеты. Последний подход не идеален, поскольку вы будете повторять имя пакета.

Первое, что вы хотите сделать, это возможно, но это не то, что я бы рекомендовал:

name={% if 'name' in item %}{{ item['name'] }}{% else %}{{ item }}{% endif %} 

Вторая вещь, которую вы хотите сделать, это, вероятно, не представляется возможным, потому что with_subelements ожидает увидеть элемент, когда его перебирает список.

Смежные вопросы