2016-08-26 5 views
2

条件に合致している場合は、依存関係のある項目をリストに追加したいと思います。不可能な条件に応じてリストに項目を追加する

これは動作しません:

some_dictionary: 
    app: 
     - something 
     - something else 
     - something conditional # only want this item when some_condition == True 
     when: some_condition 

私はこれを行うための正しい方法を確認していません。どうにかしてsome_dictionaryapp値に追加する新しいタスクを作成できますか?

答えて

2

私はこれを回避しようと思いますが、条件付きのリストが絶対に必要であれば、あなたはこのトリックを使用することができます。

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    a: 1 
    b: 1 
    c: 2 
    some_dictionary: 
     app: "{{ '[\"something\", \"something else\"' + (a + b == c) | ternary(', \"something conditional\"',' ') + ']' }}" 
    tasks: 
    - debug: var=some_dictionary.app 

それは、配列のような文字列(["item1","item2","item3"])を形成し、ansible変数templatorが変換されますそれをappに割り当てる前にリストに入れてください。私は次のように開発したコンスタンチンのソリューションに基づいて

+0

これは魔法です。 ))))) –

0

- hosts: localhost 
    gather_facts: no 
    vars: 
    a: "{{ True if var1|d(True) else False }}" 
    b: "{{ True if var2|d(False) else False }}" 
    n: "{{ True if var2|d(True) else False }}" 
    some_list: "{{ '[' + 
        a|ternary('\"item1\",',' ') + 
        b|ternary('\"item2\",',' ') + 
        n|ternary('\"itemN\",',' ') + ']' }}" 
    tasks: 
    - debug: var=some_list 

これは、アイテムのリストを作成し、「ITEM1」「itemN」までが、対応するフラグが「本当」に展開されている場合、各項目は、添付されます。

希望、これは役立ちます。

2

あなたは一度にすべてをやる必要がありますか?

list1 + list2のように、別の変数に追加する項目を指定すると、これは非常に簡単です。

--- 
- hosts: localhost 
    gather_facts: False 
    connection: local 
    vars: 
    mylist: 
     - one 
     - two 
    mycondition: False 
    myconditionalitem: foo 
    tasks: 
    - debug: 
     msg: "{{ mylist + [myconditionalitem] if mycondition else mylist }}" 
関連する問題