Example #1
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)
Example #2
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
Example #3
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"])