hostapps/hostapps/update.py
2022-05-28 14:14:08 -05:00

89 lines
2.7 KiB
Python

"""Install desktop entries."""
import ipaddress
import os
import pathlib
import json
import click
import pynetbox
@click.command()
def main():
data = json.load(open(f"/run/user/{os.getuid()}/secrets/netbox.json"))
nb = pynetbox.api(
data["url"],
token=data["token"],
threading=True,
)
appdir = pathlib.Path("~/.config/nixpkgs/hostapps.json").expanduser().resolve()
data = {}
cisco = nb.dcim.manufacturers.get(name="Cisco")
network = nb.dcim.device_roles.get(name="Network")
for device in nb.dcim.devices.filter(
manufacturer_id=cisco.id,
role_id=network.id,
status="active",
has_primary_ip="true",
):
if device.virtual_chassis is not None:
name = device.virtual_chassis.name
else:
name = device.name
services = nb.ipam.services.filter(device_id=device.id)
for service in services:
if service.name.lower() in ["ssh", "telnet"]:
for port in service.ports:
data[f"{name}:{service.name.lower()}:{port}"] = {
"name": name,
"type": service.name.lower(),
"comment": " ".join(name.split("-")),
"address": str(
ipaddress.ip_interface(device.primary_ip.address).ip
),
"port": port,
"username": "jcollie",
}
print(name, str(ipaddress.ip_interface(device.primary_ip.address).ip))
schneider = nb.dcim.manufacturers.get(name="Schneider")
power_protection = nb.dcim.device_roles.get(name="Power Protection")
for device in nb.dcim.devices.filter(
manufacturer_id=schneider.id,
role_id=power_protection.id,
status="active",
has_primary_ip="true",
):
name = device.name
services = nb.ipam.services.filter(device_id=device.id)
for service in services:
if service.name.lower() in ["ssh", "telnet"]:
for port in service.ports:
data[f"{name}:{service.name.lower()}:{port}"] = {
"name": name,
"type": service.name.lower(),
"comment": " ".join(name.split("-")),
"address": str(
ipaddress.ip_interface(device.primary_ip.address).ip
),
"port": port,
"username": "apc",
}
print(name, str(ipaddress.ip_interface(device.primary_ip.address).ip))
open(appdir, "w").write(json.dumps(data, indent=2))
if __name__ == "__main__":
main()