Если вы напишите это:
port: {{ env_dc }}{{item.ports}}
Вы не создаете новый форматированный список, объединяя значение в env_dc
с каждым элементом в item.ports
; вы просто создаете новую строку с содержимым env_dc
, за которым следует строковое представление item.ports
. То есть, в вашем примере это оценило бы что-то вроде:
uk['p1', 'p2', 'p3', 'p4']
Вы можете решить эту проблему, используя фильтр map
(который может применить фильтр ко всем элементам в списке) и фильтр regex_replace
, например:
---
- hosts: localhost
gather_facts: false
vars:
env_dc: uk
my_list:
- name: switch1
ports:
- p1
- p2
- p3
- p4
tasks:
- debug:
msg: "ports: {{ item.ports|map('regex_replace', '^', env_dc)|list }}"
with_items: "{{ my_list }}"
Что с учетом данных вашего примера будет оцениваться в:
TASK [debug] **********************************************************************************
ok: [localhost] => (item={u'name': u'switch1', u'ports': [u'p1', u'p2', u'p3', u'p4']}) => {
"msg": "ports: [u'ukp1', u'ukp2', u'ukp3', u'ukp4']"
}