В Ansible замените использование `with_items` на` loop` на список словарей, определенных в строке - PullRequest
0 голосов
/ 21 марта 2020

В старом стиле 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» для словарей. Но это предполагает, что список диктов хранится в переменной. Но что, если это не так, как это определено в строке? Нужно ли просто перемещать данные в именованную переменную?

РЕДАКТИРОВАТЬ: для попытки с заменой вставки.

1 Ответ

0 голосов
/ 22 марта 2020

Как оказалось, loop является заменой для with_items при использовании встроенного списка словарей.

(у меня была неопределенная переменная где-то в другом месте, которое просто «случилось», и которое было названо таким образом (src_path), который смутил меня переменными src dict…> _>)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...