You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/filter_plugins/ip_net_rev.py

30 lines
772 B
Python

from netaddr import IPNetwork, IPSet
def ip_rev(orig, rev, net):
if orig.isdisjoint(IPSet(net)):
rev.add(net)
return
elif orig.issuperset(IPSet(net)):
return
else:
for net in net.subnet(net.prefixlen + 1):
ip_rev(orig, rev, net)
def ip_net_rev(addresses, version=None):
orig = IPSet(addresses)
rev = IPSet()
if version in [None, 4]:
ip_rev(orig, rev, IPNetwork('0.0.0.0/0'))
if version in [None, 6]:
ip_rev(orig, rev, IPNetwork('::/0'))
return [str(net) for net in rev.iter_cidrs()]
class FilterModule(object):
def filters(self):
return {'ip_net_rev': ip_net_rev}
if __name__ == '__main__':
import sys
for ip in ip_net_rev(sys.argv[1:]):
print(ip)