89 lines
2.7 KiB
Python
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()
|