Example #1
0
    def clean(self):
        cleaned_data = super(UpdateInterface, self).clean()
        cleaned_data['iftype'] = cleaned_data.get('iftypedata')
        cleaned_data.pop('iftypedata', None)

        ifclass = cleaned_data.get('ifclass')
        interface_id = cleaned_data.get('id')
        networks = cleaned_data.pop('networks', [])
        interface_networks = sysinv.interface_network_list_by_interface(
            self.request, interface_id)
        network_ids = []
        networks_to_add = []
        networks_to_remove = []
        interface_networks_to_remove = []
        if ifclass == 'platform' and networks:
            for i in interface_networks:
                networks_to_remove.append(i.network_id)
            for n in networks:
                network = sysinv.network_get(self.request, n)
                network_ids.append(str(network.id))
                if network.id in networks_to_remove:
                    networks_to_remove.remove(network.id)
                else:
                    networks_to_add.append(str(network.id))
            for i in interface_networks:
                if i.network_id in networks_to_remove:
                    interface_networks_to_remove.append(i.uuid)
        else:
            for i in interface_networks:
                interface_networks_to_remove.append(i.uuid)
        cleaned_data['networks'] = network_ids
        cleaned_data['networks_to_add'] = networks_to_add
        cleaned_data['interface_networks_to_remove'] = \
            interface_networks_to_remove
        return cleaned_data
Example #2
0
    def clean(self):
        cleaned_data = super(UpdateInterface, self).clean()
        cleaned_data['iftype'] = cleaned_data.get('iftypedata')
        cleaned_data.pop('iftypedata', None)

        ifclass = cleaned_data.get('ifclass')
        interface_id = cleaned_data.get('id')
        networks = cleaned_data.pop('networks', [])
        interface_networks = sysinv.interface_network_list_by_interface(
            self.request, interface_id)

        network_ids = []
        networks_to_add = []
        networks_to_remove = []
        interface_networks_to_remove = []
        if ifclass == 'platform' and networks:
            for i in interface_networks:
                networks_to_remove.append(i.network_id)
            for n in networks:
                network = sysinv.network_get(self.request, n)
                network_ids.append(network.uuid)
                if network.id in networks_to_remove:
                    networks_to_remove.remove(network.id)
                else:
                    networks_to_add.append(network.uuid)
            for i in interface_networks:
                if i.network_id in networks_to_remove:
                    interface_networks_to_remove.append(i.uuid)
        else:
            for i in interface_networks:
                interface_networks_to_remove.append(i.uuid)
        cleaned_data['networks'] = network_ids
        cleaned_data['networks_to_add'] = networks_to_add
        cleaned_data['interface_networks_to_remove'] = \
            interface_networks_to_remove

        datanetwork_names = cleaned_data.pop('datanetworks', [])
        interface_datanetworks = \
            sysinv.interface_datanetwork_list_by_interface(
                self.request, interface_id)
        datanetwork_uuids = []
        datanetworks_to_add = []
        datanetworks_to_remove = []
        interface_datanetworks_to_remove = []
        if ifclass in ['data', 'pci-passthrough', 'pci-sriov'] and \
                datanetwork_names:
            for i in interface_datanetworks:
                datanetworks_to_remove.append(i.datanetwork_name)
            datanetworks_list = sysinv.data_network_list(self.request)
            for n in datanetwork_names.split(","):
                for dn in datanetworks_list:
                    if dn.name == n:
                        datanetwork_uuids.append(dn.uuid)
                        if dn.name in datanetworks_to_remove:
                            datanetworks_to_remove.remove(dn.name)
                        else:
                            datanetworks_to_add.append(dn.uuid)
            for i in interface_datanetworks:
                if i.datanetwork_name in datanetworks_to_remove:
                    interface_datanetworks_to_remove.append(i.uuid)
        else:
            for i in interface_datanetworks:
                interface_datanetworks_to_remove.append(i.uuid)
        cleaned_data['datanetworks'] = datanetwork_uuids
        cleaned_data['datanetworks_to_add'] = datanetworks_to_add
        cleaned_data['interface_datanetworks_to_remove'] = \
            interface_datanetworks_to_remove

        return cleaned_data
Example #3
0
    def handle(self, request, data):
        host_id = data['host_id']

        try:
            del data['host_id']

            if data['ports']:
                del data['uses']
            else:
                uses = data['uses'][:]
                data['uses'] = uses
                del data['ports']

            datanetwork_uuids = []
            if data['datanetworks']:
                datanetworks_list = sysinv.data_network_list(self.request)
                for n in data['datanetworks'].split(","):
                    for dn in datanetworks_list:
                        if dn.name == n:
                            datanetwork_uuids.append(dn.uuid)

            if not data['vlan_id'] or data['iftype'] != 'vlan':
                del data['vlan_id']
            else:
                data['vlan_id'] = str(data['vlan_id'])

            network_ids = []
            network_uuids = []
            network_types = []
            if data['networks']:
                for n in data['networks']:
                    network = sysinv.network_get(request, n)
                    network_ids.append(str(network.id))
                    network_uuids.append(network.uuid)
                    network_types.append(network.type)

            if any(network_type in ['mgmt', 'cluster-host', 'oam', 'storage']
                   for network_type in network_types):
                del data['imtu']
            else:
                data['imtu'] = str(data['imtu'])

            if data['iftype'] != 'ae':
                del data['txhashpolicy']
                del data['aemode']
                del data['primary_reselect']
            elif data['aemode'] == 'active_standby':
                del data['txhashpolicy']
            elif data['aemode'] != 'active_standby':
                del data['primary_reselect']

            if 'sriov_numvfs' in data:
                data['sriov_numvfs'] = str(data['sriov_numvfs'])

            if 'sriov_vf_driver' in data:
                data['sriov_vf_driver'] = str(data['sriov_vf_driver'])

            if data['ifclass'] != 'pci-sriov':
                del data['sriov_numvfs']
                del data['sriov_vf_driver']

            del data['datanetworks']
            del data['networks']
            interface = sysinv.host_interface_create(request, **data)

            ifnet_data = {}
            for n in network_uuids:
                ifnet_data['interface_uuid'] = interface.uuid
                ifnet_data['network_uuid'] = n
                sysinv.interface_network_assign(request, **ifnet_data)

            for n in datanetwork_uuids:
                ifnet_data['interface_uuid'] = interface.uuid
                ifnet_data['datanetwork_uuid'] = n
                sysinv.interface_datanetwork_assign(request, **ifnet_data)

            msg = _('Interface "%s" was successfully'
                    ' created.') % data['ifname']
            LOG.debug(msg)
            messages.success(request, msg)

            return interface
        except exc.ClientException as ce:
            # Allow REST API error message to appear on UI
            messages.error(request, ce)
            LOG.error(ce)

            # Redirect to failure page
            redirect = reverse(self.failure_url, args=[host_id])
            return shortcuts.redirect(redirect)
        except Exception:
            msg = _('Failed to create interface "%s".') % data['ifname']
            LOG.info(msg)
            redirect = reverse(self.failure_url, args=[host_id])
            exceptions.handle(request, msg, redirect=redirect)
Example #4
0
    def handle(self, request, data):
        host_id = data['host_id']

        try:
            del data['host_id']

            if data['ports']:
                del data['uses']
            else:
                uses = data['uses'][:]
                data['uses'] = uses
                del data['ports']

            if not data['datanetworks']:
                del data['datanetworks']

            if not data['vlan_id'] or data['iftype'] != 'vlan':
                del data['vlan_id']
            else:
                data['vlan_id'] = str(data['vlan_id'])

            network_ids = []
            network_types = []
            if data['networks']:
                for n in data['networks']:
                    network = sysinv.network_get(request, n)
                    network_ids.append(str(network.id))
                    network_types.append(network.type)
                data['networks'] = network_ids

            if any(network_type in ['mgmt', 'infra', 'oam']
                   for network_type in network_types):
                del data['imtu']
            else:
                data['imtu'] = str(data['imtu'])

            if data['iftype'] != 'ae':
                del data['txhashpolicy']
                del data['aemode']
            elif data['aemode'] == 'active_standby':
                del data['txhashpolicy']

            interface = sysinv.host_interface_create(request, **data)
            msg = _('Interface "%s" was successfully'
                    ' created.') % data['ifname']
            LOG.debug(msg)
            messages.success(request, msg)

            return interface
        except exc.ClientException as ce:
            # Allow REST API error message to appear on UI
            messages.error(request, ce)
            LOG.error(ce)

            # Redirect to failure page
            redirect = reverse(self.failure_url, args=[host_id])
            return shortcuts.redirect(redirect)
        except Exception:
            msg = _('Failed to create interface "%s".') % data['ifname']
            LOG.info(msg)
            redirect = reverse(self.failure_url, args=[host_id])
            exceptions.handle(request, msg, redirect=redirect)