2016-09-23 2 views
1

Есть ли способ добавить несколько массивов переменных в массив?Ansible: добавление к списку с переменными файлами

Конечной целью является, чтобы каждый файл добавить группу безопасности AWS для конфигурации запуска без необходимости копировать эти группы в каждом файле

например:

group_vars/all.yml 
group_vars/php.yml 
group_vars/web.yml 

all.yml:

aws_security_groups: 
    - sg-ssh 

php.yml

aws_security_groups: 
    - sg-mysql 

web.yml

aws_security_groups: 
    - sg-http 

отладки aws_security_groups производит:

TASK [Debugging] *************************************************************** 
ok: [XXX.XXX.XXX.XXX] => { 
    "aws_security_groups": [ 
     "sg-mysql" 
    ] 
} 

Мы имеем серверов API и внешние серверы, которые имеют различные полисы масштабирования. Я хотел бы, чтобы веб-серверы имели группы: sg-web и sg-ssh с серверами api: sg-web, sg-ssh и sg-mysql

+0

Я думаю, что вы могли бы лучше структурировать свою тетрадь, но я не могу дать лучшее руководство по этому поводу без дополнительного контекста. – smiller171

ответ

2

AFAIK не существует способа объединить переменные списка во время время определения в Ansible.
В качестве обходного пути, вы можете сделать Dict в вашем all.yml:

aws_security_groups: 
    all: 
    - sg-ssh 
    - sg-all 
    php: 
    - sg-mysql 
    web: 
    - sg-http 

Или определить каждый раздел (все, PHP, веб и т.д.) в соответствующей группе вары файл и использовать слияние hash_behavior (но изменение hash_behavior является обычно не рекомендуется).

И затем использовать эту магию, чтобы получить список групп безопасности:

- debug: msg="{{ (group_names + ['all']) | intersect(aws_security_groups.keys()) | map('extract', aws_security_groups) | sum(start=[]) }}" 

Это сделает простой список всех групп безопасности в зависимости от групп для текущего хоста.

+0

Это хороший ответ, так как он объединит ключи вместе. То, что я ищу, основано на теге для экземпляра, назначает разные группы без необходимости копировать группы в каждый групповой файл. Решение здесь означает, что все экземпляры получат все группы, назначенные для. +1 для всех фильтров – MANCHUCK

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