2017-08-15 9 views
0

私はあらゆる方法で検索して、リストを2つのリストに分割しました。 従来のフィルタなどはサポートされていませんでした。 リストを1つに結合する例と投稿がありましたが、逆もありません。不可能 - リストを2つのリストに分割する方法は?

私は以下のコードで開発しましたが、非常に奇妙な理由で動作しません。リストには属性0がありませんか?

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    - listA: ['a','b','c','d'] 
    - listB: [] 
    - listC: [] 

    tasks: 
    - block: 
     - debug: 
      var: listA[0] 
     - debug: 
      var: listB 
     - debug: 
      var: listC 
    - set_fact: 
     listB: "{{ listB + [listA[item]] }}" 
    with_sequence: start=0 end=3 stride=2 
    - set_fact: 
     listC: "{{ listC + [listA[item]] }}" 
    with_sequence: start=1 end=3 stride=2 

    - block: 
     - debug: 
      var: listA 
     - debug: 
      var: listB 
     - debug: 
      var: listC 

これは私が原因を見つけAnsible 2.1.1.0

$ ansible-playbook test_sequenceeasy.yml 
[WARNING]: log file at '{{planfile | dirname}}/AnsibleLog.txt' is not writeable and we cannot create it, aborting 


PLAY [localhost] *************************************************************** 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listA[0]": "a" 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listB": [] 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listC": [] 
} 

TASK [set_fact] **************************************************************** 
fatal: [localhost]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'list object' has no attribute u'0'\n\nThe error appears to have been in '/apps/infra/Tools/Ansible_WLNMiddleware/test_sequenceeasy.yml': line 17, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n   var: listC\n - set_fact:\n ^here\n"} 

NO MORE HOSTS LEFT ************************************************************* 
[WARNING]: Could not create retry file 'test_sequenceeasy.retry'.   [Errno 2] No such file or directory: '' 
+0

https://github.com/ansible/ansible/issues/17852ためtechraf – techraf

+0

感謝これを議論の対象とする – user3376413

答えて

0

とテスト実行結果です。

"リストオブジェクトには属性がありません"というエラーメッセージの問題は、Ansibleが数字として0を認識していないことですが、0は文字列だと思います。 何ですか?どのようにしてAnotherが反復を開始、終了、ストライドして値を "String"に格納することができますか? - 私は知らない。

しかし、コード更新の下で解決される問題:

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    - listA: ['a','b','c','d'] 
    - listB: [] 
    - listC: [] 

    tasks: 
    - block: 
     - debug: 
      var: listA[0] 
     - debug: 
      var: listB 
     - debug: 
      var: listC 
    - set_fact: 
     listB: "{{ listB + [ listA[item|int] ] }}" 
    with_sequence: start=0 end=3 stride=2 
    - set_fact: 
     listC: "{{ listC + [ listA[item|int] ] }}" 
    with_sequence: start=1 end=3 stride=2 

    - block: 
     - debug: 
      var: listA 
     - debug: 
      var: listB 
     - debug: 
      var: listC 

そして結果は次のとおりです。

$ ansible-playbook test_sequenceeasy.yml 
[WARNING]: log file at '{{planfile | dirname}}/AnsibleLog.txt' is not writeable and we cannot create it, aborting 


PLAY [localhost] *************************************************************** 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listA[0]": "a" 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listB": [] 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listC": [] 
} 

TASK [set_fact] **************************************************************** 
ok: [localhost] => (item=0) 
ok: [localhost] => (item=2) 

TASK [set_fact] **************************************************************** 
ok: [localhost] => (item=1) 
ok: [localhost] => (item=3) 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listA": [ 
     "a", 
     "b", 
     "c", 
     "d" 
    ] 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listB": [ 
     "a", 
     "c" 
    ] 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "listC": [ 
     "b", 
     "d" 
    ] 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=8 changed=0 unreachable=0 failed=0 
関連する問題