Ger*_*rry 2 file-io yaml configurationmanager include ansible
如果文件存在,我正在寻找一种有条件地将文件包含在 Ansible 播放中的方法。不幸的是,如果文件不存在,使用“include”会引发致命错误。我正在遍历一堆包并安装它们,我想检查每个包的可选配置文件。请参阅下面的简化示例:
---
- name: Basic setup of an Ubuntu box
hosts: all
vars:
packages:
- ack-grep
- vim
- zsh
- htop
- openssh-server
- cowsay
tasks:
- name: Run package configuration
action: apt name=$item
include: "packages/${item}.yml"
with_items: $packages
Run Code Online (Sandbox Code Playgroud)
一旦脚本尝试包含不存在的文件,它就会停止并显示错误。我确定我只是想以错误的方式做某事,但我已经在这工作了几个小时并尝试了我能想到的一切,但没有结果。
你不应该这样做,因为它是在https://github.com/ansible/ansible/issues/2726上描述的 特别看看这个评论:
是的 include + with_items 不是人们应该使用的东西。
我们不应该记录它。
虽然我知道您现在的变量中有该特定结构,但最好在任务中使用 with_items。
它不适用于库存变量,所以这就是为什么要在任务/角色中放置循环的原因。
Ansible 1.5 甚至不支持它。如果你尝试运行它,你会得到这个错误:
错误:[已弃用]:include + with_items 是已删除的已弃用功能。请更新您的剧本。Ansible 未能成功完成。任何错误输出都应该在上面可见。请修复这些错误,然后重试。
在您的剧本中使用包含其他变量和任务的最佳方法是使用角色。看看http://docs.ansible.com/playbooks_roles.html#task-include-files-and-encourage-reuse
| 归档时间: |
|
| 查看次数: |
5252 次 |
| 最近记录: |