У меня есть переменная, которая выглядит (реальность намного длиннее):
deploy_dirs:
conf:
base: '/etc/projects/'
subs:
apache: '/httpd'
modsec: '/modsec'
php: '/php'
haproxy: '/haproxy'
varnish: '/varnish'
logs:
base: '/var/log/projects/'
subs:
apache: '/httpd'
modsec: '/modsec'
php: '/php'
haproxy: '/haproxy'
varnish: '/varnish'
Тогда у меня есть задача, которая выглядит следующим образом:
- debug:
msg: '{{ item.0.value.base }}SOME-OTHER-VAR{{ item.1 }}'
loop: '{{ deploy_dirs | dict2items | subelements("value.subs") }}'
Который я бы хотелна вывод:
/etc/projects/SOME-OTHER-VAR/httpd
/etc/projects/SOME-OTHER-VAR/modsec
/etc/projects/SOME-OTHER-VAR/php
/etc/projects/SOME-OTHER-VAR/haproxy
/etc/projects/SOME-OTHER-VAR/varnish
/var/log/projects/SOME-OTHER-VAR/httpd
/var/log/projects/SOME-OTHER-VAR/modsec
/var/log/projects/SOME-OTHER-VAR/php
/var/log/projects/SOME-OTHER-VAR/haproxy
/var/log/projects/SOME-OTHER-VAR/varnish
Эти переменные повторно используются в разных местах по всем моим книгам, и структура имеет смысл для меня и кажется достаточно простой.
Я пробовализменение фильтра subelements()
на фильтр product()
(эквивалент with_nested
), но, похоже, он не может ссылаться на переменную из более раннего цикла так же, как фильтр subelements()
.
Очевидно, проблема с вышесказанным в том, что subelements()
нужен список, а не словарь.Я не могу преобразовать аргумент "value.subs"
в список, так как не могу найти способ для вложения таких фильтров ..?
У кого-нибудь есть идеи, как заставить это работать?
Спасибо!
ОБНОВЛЕНИЕ : Если у меня также есть:
www:
base: '/srv/www/projects/'
subs: {}
И я просто хочу вывести:
/srv/www/projects/SOME-OTHER-VAR
Знаете ли вы, как я могу развернуть бит subs
, чтобы он работал и генерировал ожидаемый результат?На данный момент это просто пропускает.т.е. для www
.
петли не возникают