使用jinja2(ansible)从列表生成对

时间:2017-08-30 03:31:02

标签: ansible jinja2

我正在尝试从ansible的主机列表中生成一对主机 我有以下库存

[webs]
test
test2
test3
test4
test5

如何生成主机对,例如test和test2,test3和test4,test5和test(从第一次开始重复)

我尝试了批处理,切片和with_items等过滤器,但似乎无法正常工作。

有没有一种简单的方法可以在ansible中生成这些对?

1 个答案:

答案 0 :(得分:1)

您可以进一步优化。

  tasks:
  - set_fact: total_hosts={{groups['webs'] | length }}
  - debug: msg={{groups['webs'] | slice(total_hosts | int // 2) | list}}
    when: "{{total_hosts |int is divisibleby 2}}"
  - debug: msg={{groups['webs'] | slice(total_hosts | int // 2 + 1, fill_with=groups['webs'][0]) | list}}
    when: "{{total_hosts |int is not divisibleby 2}}"

输出

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        [
            "test",
            "test2"
        ],
        [
            "test3",
            "test4"
        ],
        [
            "test5",
            "test"
        ]
    ]
}