Ansible - 如何将列表拆分为两个列表?

时间:2017-08-15 21:34:43

标签: list loops ansible

我搜索并尝试各种方法将列表拆分为两个列表。 没有传统的过滤器或任何支持的东西。 有关于将列表合并为一个但不是相反的示例和帖子。

我开发了下面的代码,但它不能用于非常奇怪的原因,list没有属性0?

-p

这是Ansible 2.1.1.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

1 个答案:

答案 0 :(得分:2)

我找到了原因。

关于错误消息“'list object'没有属性u'0'”的问题是Ansible没有将0识别为数字,但它认为0是字符串。 什么? Ansible如何迭代开始,结束并跨步并将值存储到“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