2017-11-12 1 views
0

私は、文字列を作成するために改行文字と結合したい文字列のリストを持っています。これは、ファイルに書き込まれると一連の行になります。しかし、私がjoin()フィルターを使用すると、内部リスト、文字列内の文字で動作し、外側のリストではなく、文字列自体で動作します。Ansibleで文字列のリストに参加するには?

One fish 
Two fish 
Red fish 
Blue Fish 

私が代わりに取得することです:

TASK: [Examine the joined string] ********************************************* 
ok: [hana-np-11.cisco.com] => { 
    "msg": "B\nl\nu\ne\n \nf\ni\ns\nh" 
} 
ok: [hana-np-12.cisco.com] => { 
    "msg": "B\nl\nu\ne\n \nf\ni\ns\nh" 
} 
ok: [hana-np-13.cisco.com] => { 
    "msg": "B\nl\nu\ne\n \nf\ni\ns\nh" 
} 
ok: [hana-np-14.cisco.com] => { 
    "msg": "B\nl\nu\ne\n \nf\ni\ns\nh" 
} 
ok: [hana-np-15.cisco.com] => { 
    "msg": "B\nl\nu\ne\n \nf\ni\ns\nh" 
} 

私が正しく文字列のリストを連結するにはどうすればよい私はのような出力を取得したい

# Usage: ansible-playbook tst3.yaml --limit <GRP> 
--- 
- hosts: all 
    remote_user: root 

    tasks: 

    - name: Create the list 
    set_fact: 
     my_item: "{{ item }}" 
    with_items: 
     - "One fish" 
     - "Two fish" 
     - "Red fish" 
     - "Blue fish" 
    register: my_item_result 

    - name: Extract items and turn into a list 
    set_fact: 
     my_list: "{{ my_item_result.results | map(attribute='ansible_facts.my_item') | list }}" 

    - name: Examine the list 
    debug: 
     msg: "{{ my_list }}" 

    - name: Concatenate the public keys 
    set_fact: 
     my_joined_list: "{{ item | join('\n') }}" 
    with_items: 
     - "{{ my_list }}" 

    - name: Examine the joined string 
    debug: 
     msg: "{{ my_joined_list }}" 

:ここに私のサンプルコードです改行文字で?

答えて

3

ソリューション

joinフィルタは、リスト上で動作しますので、あなたのリストに適用されます。

- name: Concatenate the public keys 
    set_fact: 
    my_joined_list: "{{ my_list | join('\n') }}" 

説明

あなたの例ではmy_listがリストされますが、 with_itemsを使用すると、各繰り返しでon itemは文字列です。文字列は文字のリストとして扱われるため、joinはそれらを分割します。

ループ内にループfor i in (one, two, three)があり、そのループ内でiを参照すると、セット全体ではなく、繰り返しごとに1つの値しか得られません。


備考

  • debugモジュールを使用していませんが、contentcopy\nが改行として表示しています。

  • リストを作成する方法はかなり面倒です。必要なのは、(引用符も必要ありません)です。

    - name: Create the list 
        set_fact: 
        my_list: 
         - "One fish" 
         - "Two fish" 
         - "Red fish" 
         - "Blue fish" 
    
+0

それが正しい変数にフィルタを適用するのに役立ちますので。そして、それが正しい変数であるかどうかを知る学習曲線上のところです。もう一度、ありがとう! – awrobinson

関連する問題