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)
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
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"])