使用 Ansible 从开始值和结束值生成 IP 地址列表

Generate list of IP addresses from start and end values with Ansible

有没有办法使用 Ansible (v2.9) 在两个任意 IP(不是来自 subnet/range)之间生成 IP 地址列表?

我已经搜索过,ipaddr 过滤器看起来是个不错的选择,但从文档中我无法确定它是否支持这个。

我正在寻找一种解决方案,可以让我获得像

这样的列表
[ '10.0.0.123', '10.0.0.124', ... , '10.0.1.23' ]

来自

这样的任务
- name: generate IP list
  set_fact:
    ip_list: "{{ '10.0.0.123' | ipaddr_something('10.0.1.23') }}"

Create a filter plugin。例如

shell> cat filter_plugins/netaddr.py
import netaddr

def netaddr_iter_iprange(ip_start, ip_end):
    return [str(ip) for ip in netaddr.iter_iprange(ip_start, ip_end)]

class FilterModule(object):
        ''' Ansible filters. Interface to netaddr methods.
            https://pypi.org/project/netaddr/
        '''

        def filters(self):
            return {
                'netaddr_iter_iprange' : netaddr_iter_iprange,
                }

然后,下面的任务将创建列表

    - set_fact:
        ip_list: "{{ '10.0.0.123'|netaddr_iter_iprange('10.0.1.23') }}"