鉴于一个大型剧本也有许多剧本包括,我想有一些抽象的剧本,可以由具体用户定制。那个抽象的剧本不应该对具体的剧本有所了解,但要用一些通配符来包含它们。与OOP中的template method相当的东西。
在Ansible(2.2)中可以为任务包括:
执行此操作tasks:
- include: "{{item}}"
with_fileglob: "dir/*.yml"
不幸的是,不可能为playbook包括:
- include: "{{item}}"
with_fileglob: "dir/*.yml"
Ansible失败
ERROR! 'with_fileglob'不是PlaybookInclude
的有效属性
也许可以使用某种预处理器创建一个包含所有现有文件的文件,但这似乎很容易出错。
有什么想法吗?
答案 0 :(得分:0)
由于目前还没有更好的解决方案,我创建了一个角色来创建这样的包含文件
角色/创建-包括/任务/ main.yml
- template:
src: include.j2
dest: "./include-{{inc_dir}}.yml"
vars:
idir: "{{inc_dir}}/*"
fdir: "{{ lookup('fileglob',idir )}}"
files: "{{ fdir.split(',') if fdir | length > 0 else []}}"
角色/创建-包括/模板/ include.j2
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- debug:
msg: "include playbook"
{% for i in files %}
- include: "{{i}}"
{% endfor %}
然后可以调用它,指定目录:
roles:
- { role: create-include, inc_dir: deploy_tasks }
这将在playbook根目录
中生成包含文件