我有一本可读的剧本:
---
- hosts: 127.0.0.1
tasks:
- name: test nested loops
shell: echo "a={{ item.0 }} b={{ item.1 }}"
with_together:
- [ 'vol1', 'vol2', 'vol3', 'vol4', 'vol5']
- [ 'cmp01', 'cmp02', 'cmp03']目前我得到了这样的结果:
changed: [127.0.0.1] => (item=['vol1', 'cmp01'])
changed: [127.0.0.1] => (item=['vol2', 'cmp02'])
changed: [127.0.0.1] => (item=['vol3', 'cmp03'])
changed: [127.0.0.1] => (item=['vol4', None])
changed: [127.0.0.1] => (item=['vol5', None])而不是这个结果,我希望最后一个列表重复一遍。
changed: [127.0.0.1] => (item=['vol1', 'cmp01'])
changed: [127.0.0.1] => (item=['vol2', 'cmp02'])
changed: [127.0.0.1] => (item=['vol3', 'cmp03'])
changed: [127.0.0.1] => (item=['vol4', 'cmp01'])
changed: [127.0.0.1] => (item=['vol5', 'cmp02'])这是一个简短的例子,但它有很多可能性。这是因为我想使用它将VOL1委托给CMP01等等。
备注:我不能使用嵌套循环,因为这样我就可以得到以下内容:
changed: [127.0.0.1] => (item=['vol1', 'cmp01'])
changed: [127.0.0.1] => (item=['vol1', 'cmp02'])
changed: [127.0.0.1] => (item=['vol1', 'cmp03'])
changed: [127.0.0.1] => (item=['vol2', 'cmp01'])
changed: [127.0.0.1] => (item=['vol2', 'cmp02'])
changed: [127.0.0.1] => (item=['vol2', 'cmp03'])
changed: [127.0.0.1] => (item=['vol3', 'cmp01'])
changed: [127.0.0.1] => (item=['vol3', 'cmp02'])
changed: [127.0.0.1] => (item=['vol3', 'cmp03'])
changed: [127.0.0.1] => (item=['vol4', 'cmp01'])
changed: [127.0.0.1] => (item=['vol4', 'cmp02'])
changed: [127.0.0.1] => (item=['vol4', 'cmp03'])
changed: [127.0.0.1] => (item=['vol5', 'cmp01'])
changed: [127.0.0.1] => (item=['vol5', 'cmp02'])
changed: [127.0.0.1] => (item=['vol5', 'cmp03'])即使我包含了一个run_once: true选项,它也不起作用,这是非常符合逻辑的。
Ansible-documentation: loops.html
发布于 2015-12-16 17:26:19
我不认为Ansible提供了一个with循环来完成您想要的任务。您最好的选择可能是编写您自己的自定义循环迭代器,它的行为完全符合您的需要。
发布于 2015-12-16 18:03:47
这就是我在在一起中看到的,没有人支持您所要求的内容。你有两个选择。编写您自己的lookup_plugin (推荐)或修补您的不可安装(可能有一些副作用),以完成您的要求。
"""
Transpose a list of arrays:
[1, 2, 3], [4, 5, 6] -> [1, 4], [2, 5], [3, 6]
Replace any empty spots in 2nd array with None:
[1, 2], [3] -> [1, 3], [2, None]
"""https://stackoverflow.com/questions/34318098
复制相似问题