def submit_interface( self, name, type, default_name=None, mac=None, description=None, aggregated_interface=None, enabled_protocols=None, ifindex=None, hints=None, ): enabled_protocols = enabled_protocols or [] iface = self.get_interface_by_name(name) if iface: ignore_empty = ["ifindex"] if self.is_confdb_source: ignore_empty = ["ifindex", "mac"] # Interface exists changes = self.update_if_changed( iface, { "default_name": default_name, "type": type, "mac": mac, "description": description, "aggregated_interface": aggregated_interface, "enabled_protocols": enabled_protocols, "ifindex": ifindex, "hints": hints or [], }, ignore_empty=ignore_empty, ) self.log_changes("Interface '%s' has been changed" % name, changes) else: # Create interface self.logger.info("Creating interface '%s'", name) iface = Interface( managed_object=self.object.id, name=name, type=type, mac=mac, description=description, aggregated_interface=aggregated_interface, enabled_protocols=enabled_protocols, ifindex=ifindex, ) iface.save() self.set_interface(name, iface) if mac: self.interface_macs.add(mac) return iface
def api_set_interface(self, request, id): def get_or_none(c, v): if not v: return None return c.objects.get(id=v) o = self.get_object_or_404(ManagedObject, id=int(id)) if not o.has_access(request.user): return self.response_forbidden("Access denied") d = orjson.loads(request.body) if "id" in d: i = self.get_object_or_404(Interface, id=d["id"]) if i.managed_object.id != o.id: return self.response_not_found() else: i = Interface(managed_object=o.id, type="physical") # Set name if "name" in d: i.name = o.get_profile().convert_interface_name(d["name"]) if "description" in d: i.description = d["description"].strip() # Set profile if "profile" in d: p = get_or_none(InterfaceProfile, d["profile"]) i.profile = p if p: i.profile_locked = True # Project if "project" in d: i.project = get_or_none(Project, d["project"]) # State if "state" in d: i.state = get_or_none(ResourceState, d["state"]) # VC Domain if "vc_domain" in d: i.vc_domain = get_or_none(VCDomain, d["vc_domain"]) # i.save() return {"success": True}
def maybe_create_interface(self, mo: ManagedObject, name: str) -> Optional[Interface]: """ Auto-create remote interface, if possible :param mo: :param name: :return: """ if self.object.object_profile.ifdesc_symmetric: return None # Meaningless for symmetric ifdesc if (mo.object_profile.enable_box_discovery_interface or not mo.object_profile.enable_interface_autocreation): return None # Auto-creation is disabled # Create interface self.logger.info("Auto-creating interface %s:%s", mo.name, name) iface = Interface(managed_object=mo, type="physical", name=name) iface.save() # Adjust cache if mo.id in self.if_cache: self.if_cache[mo.id][iface.name] = iface return iface
def submit_interface(self, name, type, mac=None, description=None, aggregated_interface=None, enabled_protocols=None, ifindex=None): enabled_protocols = enabled_protocols or [] iface = Interface.objects.filter(managed_object=self.object.id, name=name).first() if iface: # Interface exists changes = self.update_if_changed(iface, { "type": type, "mac": mac, "description": description, "aggregated_interface": aggregated_interface, "enabled_protocols": enabled_protocols, "ifindex": ifindex }, ignore_empty=["ifindex"]) self.log_changes("Interface '%s' has been changed" % name, changes) else: # Create interface self.info("Creating interface '%s'" % name) iface = Interface(managed_object=self.object.id, name=name, type=type, mac=mac, description=description, aggregated_interface=aggregated_interface, enabled_protocols=enabled_protocols, ifindex=ifindex) iface.save() return iface