Esempio n. 1
0
 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
Esempio n. 2
0
    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}
Esempio n. 3
0
    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
Esempio n. 4
0
 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