В старом стиле Ansible я использовал with_items
вместе со словарями. Для приведенных потенциальных примеров:
- name: deploy files
template:
src: "files/{{ item.src }}"
dest: "{{ item.dest }}"
with_items:
- {src: 'foo', dest: "/path/to/somewhere"}
- {src: 'bar', dest: "/somewhere/else"}
- {src: 'baz', dest: "/different/path/"}
- name: Install packages
npm:
name: '{{ item.name }}'
version: '{{ item.version }}'
with_items:
- {src: 'foo', version: '1.0'}
- {src: 'bar', version: '1.5'}
- {src: 'baz', version: '1.2'}
В эти дни мы должны использовать loop
. при попытке замены в качестве вставки это будет похоже на
- name: deploy files
template:
src: "files/{{ item.src }}"
dest: "{{ item.dest }}"
loop:
- {src: 'foo', dest: "/path/to/somewhere"}
- {src: 'bar', dest: "/somewhere/else"}
- {src: 'baz', dest: "/different/path/"}
, если произойдет сбой с
TASK [deploy files] ************
fatal: [host]: FAILED! => {
"msg": "'src_path' is undefined"
}
Действительно, руководство по миграции (и StackOverflow отвечает на такие как Ansible: перебрать список словарей - l oop против with_items ) сказать и свести к «использованию flatten
» для словарей. Но это предполагает, что список диктов хранится в переменной. Но что, если это не так, как это определено в строке? Нужно ли просто перемещать данные в именованную переменную?
РЕДАКТИРОВАТЬ: для попытки с заменой вставки.