2017-03-17 13 views
2

また、多くのプレイブックが含まれている大きなプレイブックがあれば、具体的なユーザーがカスタマイズできる抽象的なプレイブックを用意したいと思います。その抽象的なプレイブックは、具体的なプレイブックについては何も知らず、いくつかのワイルドカードを含むべきです。 OOPでtemplate methodに匹敵するもの。何かとプレイリストにワイルドカードを使用することができます(または任意の回避策)?

それが含まれているタスクのためにこれを行うためにAnsible(2.2)で可能です:

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

残念ながら、それは脚本のためにこれを行うことはできません含まれています

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

Ansibleが

で失敗

エラー! 「with_fileglobは」これはプリプロセッサのいくつかの種類を持つすべての既存のファイルを含むファイルを作成するかもしれない可能でしょう

PlaybookInclude

のための有効な属性ではありませんが、これは、非常にエラーが発生しやすいようです。

アイデア?これまでのところは良い解決策がありませんので、私が作成する役割を作成している

+0

複数のインクルードでプレイブックを構築するシェルスクリプトラッパーを作成して実行することができます。 –

+0

@ ConstantinSuvorov:よく考えましたが、もっと良い解決策があると思っていました。とにかく、私はこれを行う責任を持った答えを加えました。 – 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-

01:これは、ディレクトリを指定し、呼び出すことができます/テンプレート/ include.j2

--- 
- hosts: localhost 
    connection: local 
    gather_facts: false 

    tasks: 
    - debug: 
     msg: "include playbook" 

{% for i in files %} 
- include: "{{i}}" 

{% endfor %} 

が含まれます

これは、プレイブックのルートディレクトリにインクルードファイルを生成します。

関連する問題