所以看起来这个功能已被弃用了,我真的不明白为什么,Ansible CTO说我们应该使用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中执行此操作时出现错误消息:
错误:[DEPRECATED]:include + with_items是已删除的已弃用功能。请更新你的剧本。
如何将此剧本转换为适用于此ansible版本的内容?
答案 0 :(得分:21)
不幸的是,没有直接替代品。你可以做的一些事情:
将列表传递给包含的文件并在那里进行迭代。在你的剧本中:
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重写为module(在python中,bash,等等),将其放在播放手册旁边的library
目录中。然后你可以这样做:
- bootstrap_site: site={{item}}
with_items: sites
更新:Ansible V2已经退出并带回了include + with_items combo loop!
答案 1 :(得分:1)
我找到了一个答案来规避blahblah弃用的消息......正如原帖中所要求的那样。
我添加了一个文件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
依旧......
此致 汤姆