Exemple #1
0
    def save(self, *args, **kwargs):

        # Search for a available slot for laggX interface
        interface_names = [
            v[0]
            for v in models.Interfaces.objects.all()
            .values_list('int_interface')
        ]
        candidate_index = 0
        while ("lagg%d" % (candidate_index)) in interface_names:
            candidate_index += 1
        lagg_name = "lagg%d" % candidate_index
        lagg_protocol = self.cleaned_data['lagg_protocol']
        lagg_member_list = self.cleaned_data['lagg_interfaces']
        with DBSync():
            model_objs = []
            try:
                # Step 1: Create an entry in interface table that
                # represents the lagg interface
                lagg_interface = models.Interfaces(
                    int_interface=lagg_name,
                    int_name=lagg_name,
                    int_dhcp=False,
                    int_ipv6auto=False
                )
                lagg_interface.save()
                model_objs.append(lagg_interface)
                # Step 2: Write associated lagg attributes
                lagg_interfacegroup = models.LAGGInterface(
                    lagg_interface=lagg_interface,
                    lagg_protocol=lagg_protocol
                )
                lagg_interfacegroup.save()
                model_objs.append(lagg_interfacegroup)
                # Step 3: Write lagg's members in the right order
                order = 0
                for interface in lagg_member_list:
                    lagg_member_entry = models.LAGGInterfaceMembers(
                        lagg_interfacegroup=lagg_interfacegroup,
                        lagg_ordernum=order,
                        lagg_physnic=interface,
                    )
                    model_objs.append(models.Interfaces.objects.create(
                        int_interface=interface,
                        int_name=f'member of {lagg_name}',
                    ))
                    lagg_member_entry.save()
                    model_objs.append(lagg_member_entry)
                    order = order + 1
            except Exception:
                for obj in reversed(model_objs):
                    obj.delete()
                raise
        self.instance = lagg_interfacegroup
        return lagg_interfacegroup
Exemple #2
0
    def save(self, *args, **kwargs):

        # Search for a available slot for laggX interface
        interface_names = [
            v[0]
            for v in models.Interfaces.objects.all()
            .values_list('int_interface')
        ]
        candidate_index = 0
        while ("lagg%d" % (candidate_index)) in interface_names:
            candidate_index += 1
        lagg_name = "lagg%d" % candidate_index
        lagg_protocol = self.cleaned_data['lagg_protocol']
        lagg_member_list = self.cleaned_data['lagg_interfaces']
        with DBSync():
            with transaction.atomic():
                # Step 1: Create an entry in interface table that
                # represents the lagg interface
                lagg_interface = models.Interfaces(
                    int_interface=lagg_name,
                    int_name=lagg_name,
                    int_dhcp=False,
                    int_ipv6auto=False
                )
                lagg_interface.save()
                # Step 2: Write associated lagg attributes
                lagg_interfacegroup = models.LAGGInterface(
                    lagg_interface=lagg_interface,
                    lagg_protocol=lagg_protocol
                )
                lagg_interfacegroup.save()
                # Step 3: Write lagg's members in the right order
                order = 0
                for interface in lagg_member_list:
                    lagg_member_entry = models.LAGGInterfaceMembers(
                        lagg_interfacegroup=lagg_interfacegroup,
                        lagg_ordernum=order,
                        lagg_physnic=interface,
                        lagg_deviceoptions='up'
                    )
                    lagg_member_entry.save()
                    order = order + 1
        self.instance = lagg_interfacegroup
        return lagg_interfacegroup