Ansible 1.6 включает with_items устарела
Похоже, что эта функция устарела, я действительно не понимаю, почему, технический директор Ansible говорит, что мы должны использовать вместо этого with_nested, но, честно говоря, я понятия не имею, как это сделать,
Вот мой playboook:
- hosts: all
user: root
vars:
- sites:
- site: site1.com
repo: ssh://hg@bitbucket.org/orgname/reponame
nginx_ssl: true;
copy_init:
- path1/file1.txt
- path2/file2.php
- path2/file3.php
- site: site2.net
repo: ssh://hg@bitbucket.org/orgname/reposite2
- site: site4.com
repo: ssh://hg@bitbucket.org/orgname/reposite3
copy_init:
- path2/file2.php
tasks:
- name: Bootstrap Sites
include: bootstrap_site.yml site={{item}}
И сообщение об ошибке при попытке выполнить это в Ansible 1.6.6:
ОШИБКА: [УСТАРЕЛО]: include + with_items является удаленной устаревшей функцией. Пожалуйста, обновите ваши книги.
Как я могу преобразовать этот playbook во что-то, что работает с этой доступной версией?
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
DIR рядом с вашей пьесой. Тогда вы могли бы сделать:- bootstrap_site: site={{item}} with_items: sites
Обновление: Ansible V2 вышел и возвращает комбинированный цикл include + with_items!
Я нашел ответ, чтобы обойти сообщение, осуждаемое бла-бла... как и было задано в оригинальном сообщении.
Я добавил файл 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
и так далее....
С уважением, Том