我有一个设备列表,每个设备都有必须在设备上创建的不同属性列表,一次一个。有没有办法构建一组嵌套的循环来做到这一点?with_nested 构造将每个属性应用于每个设备;每次调用我只需要每个设备一个属性。
这个剧本展示了我的尝试(Ansible 2.7.1,Python 2.7.1):
- name: Test nested list traversal
hosts: localhost
connection: local
vars:
Stuff:
- Name: DeviceA
Info: AInfo
Values:
- ValueA1
- ValueA2
- Name: DeviceB
Info: BInfo
Values:
- ValueB1
- ValueB2
- ValueB3
tasks:
- name: Loop test
debug: msg="{{ item.Name }},{{ item.Info }}, {{ item.Values }}"
with_items:
- "{{ Stuff }}"
Run Code Online (Sandbox Code Playgroud)
What I get: (One call per device, containing all attributes at once)
ok: [localhost] => (item={u'Info': u'AInfo', u'Values': [u'ValueA1', u'ValueA2'], u'Name': u'DeviceA'}) …Run Code Online (Sandbox Code Playgroud) 关于用换行符分割字符串的问题的答案, Split bash string by newline characters,似乎说换行符是默认的分隔符,所以我们应该将分隔符更改为空,然后对其进行分割。为什么换行符上的分割不起作用?我所期望的(在我的用例中也是希望的)是输入字符串中的行和 \n 之间存在 1:1 的相关性(因此必须添加 \n 才能获取最后一行),并且空白行、前导/嵌入空格等将被保留。
引用 Mark Gerolimatos 的话,他似乎在问同样的问题:
在 OS-X/Macland 中,您必须使用 bash 3.2(或至少不更新 BASH)。因此,必须使用神秘的 read -rd ' '(并且有效!)我发现在线手册页对此非常神秘(ss64.com/bash/read.html)...这非常令人费解...确实如此意思是“关闭\n,然后用空作为分隔符?”