在子元素中分割字符串

时间:2019-07-22 16:56:32

标签: loops ansible nested-loops

我有一个字典列表,我想遍历字典列表,然后有一个内部循环,从每个字典中拆分一个字符串,然后遍历该拆分字符串。有没有办法做到这一点?

我尝试了一些事情:

from shutil import copy
import os

tools_dir = os.path.expanduser('~/tools/HTML_tools')
copy(os.path.join(tools_dir, 'template.html'), '.')

字典列表:

- debug:
     msg: '{{ "Group: " + item.Group + ", AddMembers: " + item.1 }}'
  with_nested:
     - '{{ domainGroups.list | selectattr("AddMembers", "ne", "") | list }}'
     - '{{ AddMembers.split("|") }}'

- debug: 
    msg: '{{ "Group: " + item.Group + ", AddMembers: " + item.1 }}'
  loop: '{{ domainGroups.list | selectattr("AddMembers", "ne", "" ) | list | subelements(AddMembers.split("|")) }}'

我希望我尝试过的一种方法能起作用,但是通常我会得到“未定义AddMembers”或“ unicode事物没有属性“ AddMembers””的一些变体

1 个答案:

答案 0 :(得分:1)

让我们在第一步中简化字典。以下任务

- set_fact:
    domainGroups_selected: "{{ domainGroups_selected|default([]) +
                               [ {'Group': item.Group,
                                  'AddMembers': item.AddMembers.split('|')}] }}"
  loop: "{{ domainGroups }}"
  when: item.AddMembers|length > 0
- debug:
    var: item
  loop: "{{ domainGroups_selected }}"

给予

"item": {
    "AddMembers": [
        "members1", 
        "members2"
    ], 
    "Group": "Group2"
}
...
"item": {
    "AddMembers": [
        "members1", 
        "members2", 
        "members3"
    ], 
    "Group": "Group3"
}

然后用子元素循环列表。下面的任务

- debug:
    msg: "Group: {{ item.0.Group }} AddMember: {{ item.1 }}"
  loop: "{{ domainGroups_selected|subelements('AddMembers')|list }}"

给予

"msg": "Group: Group2 AddMember: members1"
"msg": "Group: Group2 AddMember: members2"
"msg": "Group: Group3 AddMember: members1"
"msg": "Group: Group3 AddMember: members2"
"msg": "Group: Group3 AddMember: members3"