2017-03-17 11 views
2

鑑於一本也有很多劇本包括的大劇本,我想有一些可以由具體用戶定製的抽象劇本。這個抽象劇本不應該知道具體的劇本,但包括一些通配符。與OOP中的template method相當的東西。可能以某種方式在Playbook中使用通配符包括(或任何解決方法)?

有可能在Ansible(2.2),爲做任務,這包括:

tasks: 
    - include: "{{item}}" 
    with_fileglob: "dir/*.yml" 

不幸的是,它是不可能爲劇本做這包括:

- include: "{{item}}" 
    with_fileglob: "dir/*.yml" 

Ansible失敗

錯誤! 'with_fileglob'不是Playbook的有效屬性包含

也許可以創建一個文件,其中包含具有某種預處理器的所有現有文件,但這似乎很容易出錯。

任何想法?

+0

您可以編寫構建包含多個包含劇本的shell腳本包裝,然後執行它。 –

+0

@KonstantinSuvorov:我也想過,但我希望有更好的解決方案。無論如何,我已經添加了一個這樣做的完美答案。 – user140547

回答

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 []}}" 

角色/ create-包括/模板/ 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 } 

這會在劇本根目錄中生成包含文件

相關問題