paulbsd-salt/states/_modules/net.py
Paul c6d9d7af72
All checks were successful
continuous-integration/drone/push Build is passing
updated modules
2024-05-21 16:00:09 +02:00

49 lines
1.7 KiB
Python

#!/usr/bin/python3
import re
import json
import urllib
from urllib.request import urlopen, Request
from urllib.parse import urljoin
from urllib.error import HTTPError
MIN_CIDR=32
CIDR_REGEX = re.compile(r"(.*)/(.*)")
POSTFIX_FORMAT = lambda ip: "[{}]/{}".format(CIDR_REGEX.findall(ip)[0][0],
CIDR_REGEX.findall(ip)[0][1])
def __virtual__():
return True
def get_public_ip(url="https://ip.paulbsd.com"):
req = Request(url=url)
req.add_header("Accept", "*/*")
res = urlopen(req)
ret = json.loads(res.read())
if res.status == 200:
return "{}/{}".format(ret["ip"],MIN_CIDR)
return None
def get_internal_networks(tgt="*", fmt="std"):
res = []
res.extend([net for k, net in __salt__["mine.get"](tgt=tgt, fun='public_ip', tgt_type='compound').items()])
res.extend([net for k, nets in __salt__["mine.get"](tgt=tgt, fun='ip_networks', tgt_type='compound').items() for net in nets if __salt__['network.is_private'](net.split("/")[0])])
if fmt == "std":
res.extend([net for k, nets in __salt__["mine.get"](tgt=tgt, fun='ip_networks6', tgt_type='compound').items() for net in nets])
elif fmt == "postfix":
res.extend([POSTFIX_FORMAT(net) for k, nets in __salt__["mine.get"](tgt=tgt, fun='ip_networks6', tgt_type='compound').items() for net in nets])
res = list(set(res))
res.sort()
return res
def get_nat_networks(tgt="*"):
res = []
res.extend([net for k, nets in __salt__["mine.get"](tgt=tgt, fun='ip_networks', tgt_type='compound').items() for net in nets if __salt__['network.is_private'](net.split("/")[0])])
res = list(set(res))
res.sort()
return res