微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 Ansible 从起始值和结束值生成 IP 地址列表

有没有办法使用 Ansible (v2.9) 在两个任意 IP(不是来自子网/范围)之间生成 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') }}"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。