首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务中的短列表不会在一起循环中重复。

任务中的短列表不会在一起循环中重复。
EN

Stack Overflow用户
提问于 2015-12-16 17:14:30
回答 2查看 152关注 0票数 0

我有一本可读的剧本:

代码语言:javascript
复制
---
- 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']

目前我得到了这样的结果:

代码语言:javascript
复制
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])

而不是这个结果,我希望最后一个列表重复一遍。

代码语言:javascript
复制
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等等。

备注:我不能使用嵌套循环,因为这样我就可以得到以下内容:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2015-12-16 17:26:19

我不认为Ansible提供了一个with循环来完成您想要的任务。您最好的选择可能是编写您自己的自定义循环迭代器,它的行为完全符合您的需要。

票数 1
EN

Stack Overflow用户

发布于 2015-12-16 18:03:47

这就是我在在一起中看到的,没有人支持您所要求的内容。你有两个选择。编写您自己的lookup_plugin (推荐)或修补您的不可安装(可能有一些副作用),以完成您的要求。

代码语言:javascript
复制
"""
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]
"""
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34318098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档