Ansible 1.6 включает with_items устарел

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

Вот мой плейбук:

- hosts: all
  user: root
  vars: 
   - sites:
     - site: site1.com
       repo: ssh://[email protected]/orgname/reponame
       nginx_ssl: true;
       copy_init:
        - path1/file1.txt
        - path2/file2.php
        - path2/file3.php

     - site: site2.net
       repo: ssh://[email protected]/orgname/reposite2

     - site: site4.com
       repo: ssh://[email protected]/orgname/reposite3
       copy_init:
        - path2/file2.php

  tasks:
     - name: Bootstrap Sites
      include: bootstrap_site.yml site={{item}}

И сообщение об ошибке при попытке выполнить это в Ansible 1.6.6:

ОШИБКА: [УСТАРЕЛО]: include + with_items — удаленная устаревшая функция. Пожалуйста, обновите свои плейбуки.

Как я могу преобразовать эту книгу во что-то, что работает с этой доступной версией?


person jmserra    schedule 08.07.2014    source источник
comment
Я что-то упускаю. Где with_items. Откуда item?   -  person Batandwa    schedule 05.11.2014


Ответы (2)


Сменной замены, к сожалению, нет. Вот что вы можете сделать:

  • Передайте список во включенный файл и выполните итерацию там. В вашем плейбуке:

    vars:
        sites:
           - site1
           - site2
    tasks:
        - include: bootstrap_site.yml sites={{sites}}
    

    И в bootstrap_site.yml:

    - some_Task: ...
      with_items: sites
    
    - another_task: ...
      with_items: sites
    
    ...
    
  • Перепишите bootstrap_site как модуль (на python, bash и т. д.), поместите его в каталог library рядом с вашей игрой. Тогда вы можете сделать:

    - bootstrap_site: site={{item}}
      with_items: sites
    

Обновление: Ansible V2 выпущен и возвращает включение + with_items комбинированный цикл!

person hkariti    schedule 14.07.2014
comment
Спасибо, на самом деле я уже пробовал использовать первое решение, которое вы предлагаете, но оно слишком громоздкое, так как есть задачи, которые уже циклически проходят через подэлементы, а получение вложенных циклов слишком сложно, но я бы с удовольствием выбрал второе решение! выглядит здорово, но .. я не могу сделать это в самом ansible? и .. кстати, есть понимание, почему это устарело? - person jmserra; 14.07.2014
comment
Он устарел, потому что предположительно люди использовали его в основном с переменными инвентаря, и по причинам реализации они не могут использоваться таким образом. Поэтому, чтобы избежать путаницы (почему одни переменные работают, а другие нет), они просто удалили эту функцию. Использование with_nested в вашем случае нецелесообразно? По поводу написания модулей на YAML, боюсь, никак не обойтись. - person hkariti; 16.07.2014
comment
Хорошо, спасибо, это довольно неприятно, поскольку кажется, что это действительно простая функция, учитывая количество вещей, которые вы можете делать с помощью ansible, это выглядит тривиально, но я думаю, это потому, что я не полностью понимаю, что происходит под капотом. with_nested гораздо сложнее использовать для подмассивов 3 или 4 уровня, поэтому я, наконец, выбрал другое решение, выполняя 1 задачу включения для каждого элемента массива, это не самое чистое, но работает... - person jmserra; 16.07.2014
comment
Спасибо за обновления. Приятно видеть, что он возвращается. Удаление функции, которую использовали так много людей, было большой ошибкой. - person udondan; 16.03.2015

Я нашел ответ, чтобы обойти устаревшее сообщение блабла ... как было задано в исходном сообщении.

Я добавил файл vars/filenames.yml:

  filenames:
  - file1
  - file2
  - file3

Затем я прочитал эти имена в начале пьесы:

  - name: read filenames
    include_vars: vars/filenames.yml

Затем я могу использовать их позже:

  - name: Copy files 1
    copy: src=/filesrc1/{{ item }} dest=/filedest1/{{ item }} owner=me group=we
    with_items: filenames

и так далее....

С уважением, Том

person Thomas Dieckmann    schedule 18.08.2015