def print_orphans(parsed_args):
    netbox_api = NetboxAPI(**get_config()["netbox"])
    devices_mapper = NetboxMapper(netbox_api, "dcim", "devices")

    threads = parsed_args.threads
    if parsed_args.device_role_id:
        iter_devices = devices_mapper.get(
            role_id=parsed_args.device_role_id, limit=threads
        )
    else:
        iter_devices = devices_mapper.get(limit=threads)

    with ThreadPoolExecutor(max_workers=threads) as executor:
        futures = {}
        for d in tqdm.tqdm(iter_devices):
            future = executor.submit(
                connection_present_for_device, d, netbox_api
            )
            futures[future] = d

        for f in concurrent.futures.as_completed(futures):
            if not f.result():
                print(futures[f].name)
Esempio n. 2
0
def create_devices(netbox_api, devices, role_id, site_id, threads=10):
    device_types_mapper = NetboxMapper(netbox_api, "dcim", "device-types")
    platforms_mapper = NetboxMapper(netbox_api, "dcim", "platforms")
    caches = {
        "device_types":
        LRU(on_miss=lambda slug: next(device_types_mapper.get(slug=slug))),
        "platforms":
        LRU(on_miss=lambda slug: next(platforms_mapper.get(slug=slug)))
    }
    device_mapper = NetboxMapper(netbox_api, "dcim", "devices")

    with ThreadPoolExecutor(max_workers=threads) as executor:
        futures = []
        for name, props in devices.items():
            future = executor.submit(_thread_push_device, device_mapper,
                                     caches, name, props, role_id, site_id)
            futures.append(future)

        try:
            [future.result() in concurrent.futures.as_completed(futures)]
        except requests.exceptions.HTTPError as e:
            print(e.response.data)
            raise
Esempio n. 3
0
def create_manufacturers(netbox_api):
    mapper = NetboxMapper(netbox_api, "dcim", "manufacturers")
    manufacturers = {}

    for name in ("Cisco", "Juniper"):
        name = str(name)
        try:
            manufacturer = next(mapper.get(slug=name.lower()))
        except StopIteration:
            manufacturer = mapper.post(name=name, slug=name.lower())

        manufacturers[name.lower()] = manufacturer

    return manufacturers
Esempio n. 4
0
def create_device_type_interfaces(netbox_api, manufacturer, device_type,
                                  ports):
    mapper = NetboxMapper(netbox_api, "dcim", "interface-templates")

    for port_type, nb in ports.items():
        if nb > 1:
            start = 1 if manufacturer == "cisco" else 0
            port_names = ("{}/{}".format(port_type, i)
                          for i in range(start, nb + start))
        else:
            port_names = (port_type, )

        upstream_ports = {
            p.name
            for p in mapper.get(devicetype_id=device_type)
        }
        for name in port_names:
            if name not in upstream_ports:
                mapper.post(name=name, device_type=device_type)
Esempio n. 5
0
def create_device_types(netbox_api, types, manufacturers):
    mapper = NetboxMapper(netbox_api, "dcim", "device-types")
    for name, props in types.items():
        manufacturer_name = props.pop("manufacturer")

        name = str(name)
        try:
            t = next(mapper.get(slug=name.lower()))
        except StopIteration:
            t = mapper.post(model=name,
                            slug=name.lower(),
                            manufacturer=manufacturers[manufacturer_name])

        update_netbox_obj_from(t, props)
        # Until issue #2272 is fixed on netbox
        t.__upstream_attrs__.remove("subdevice_role")
        t.put()

        create_device_type_interfaces(netbox_api, manufacturer_name, t,
                                      props["ports"])