Search in sources :

Example 1 with MsoNetworkNotFound

use of org.onap.so.openstack.exceptions.MsoNetworkNotFound in project so by onap.

the class MsoNeutronUtils method updateNetwork.

/**
 * Update a network with the specified parameters in the given cloud/tenant.
 *
 * Specifically, this call is intended to update the VLAN segments on a multi-provider network. The provider
 * segments will be replaced with the supplied list of VLANs.
 * <p>
 * Note that updating the 'segments' array is not normally supported by Neutron. This method relies on a Platform
 * Orchestration extension (using SDN controller to manage the virtual networking).
 *
 * @param cloudSiteId The cloud site ID (may be a region) in which to update the network.
 * @param tenantId Openstack ID of the tenant in which to update the network
 * @param networkId The unique Openstack ID of the network to be updated
 * @param type The network type (Basic, Provider, Multi-Provider)
 * @param provider The provider network name. This should not change.
 * @param vlans The list of VLAN segments to replace
 * @return a NetworkInfo object which describes the updated network
 * @throws MsoNetworkNotFound Thrown if the requested network does not exist
 * @throws MsoOpenstackException Thrown if the Openstack API call returns an exception
 * @throws MsoCloudSiteNotFound
 */
public NetworkInfo updateNetwork(String cloudSiteId, String tenantId, String networkId, NetworkType type, String provider, List<Integer> vlans) throws MsoException {
    // Obtain the cloud site information where we will create the stack
    CloudSite cloudSite = cloudConfig.getCloudSite(cloudSiteId).orElseThrow(() -> new MsoCloudSiteNotFound(cloudSiteId));
    Quantum neutronClient = getNeutronClient(cloudSite, tenantId);
    // Check that the network exists
    Network network = findNetworkById(neutronClient, networkId);
    if (network == null) {
        // Network not found. Throw an exception
        logger.error("{} Network {} on Cloud site {} for Tenant {} not found {}", MessageEnum.RA_NETWORK_NOT_FOUND, networkId, cloudSiteId, tenantId, ErrorCode.DataError.getValue());
        throw new MsoNetworkNotFound(networkId, tenantId, cloudSiteId);
    }
    // Overwrite the properties to be updated
    if (type == NetworkType.PROVIDER) {
        if (provider != null && vlans != null && vlans.size() > 0) {
            network.setProviderPhysicalNetwork(provider);
            network.setProviderNetworkType("vlan");
            network.setProviderSegmentationId(vlans.get(0));
        }
    } else if (type == NetworkType.MULTI_PROVIDER) {
        if (provider != null && vlans != null && vlans.size() > 0) {
            List<Segment> segments = new ArrayList<>(vlans.size());
            for (int vlan : vlans) {
                Segment segment = new Segment();
                segment.setProviderPhysicalNetwork(provider);
                segment.setProviderNetworkType("vlan");
                segment.setProviderSegmentationId(vlan);
                segments.add(segment);
            }
            network.setSegments(segments);
        }
    }
    try {
        OpenStackRequest<Network> request = neutronClient.networks().update(network);
        Network newNetwork = executeAndRecordOpenstackRequest(request);
        return new NetworkInfoMapper(newNetwork).map();
    } catch (OpenStackBaseException e) {
        // Convert Neutron exception to an MsoOpenstackException
        MsoException me = neutronExceptionToMsoException(e, "UpdateNetwork");
        throw me;
    } catch (RuntimeException e) {
        // Catch-all
        MsoException me = runtimeExceptionToMsoException(e, "UpdateNetwork");
        throw me;
    }
}
Also used : MsoCloudSiteNotFound(org.onap.so.openstack.exceptions.MsoCloudSiteNotFound) MsoException(org.onap.so.openstack.exceptions.MsoException) OpenStackBaseException(com.woorea.openstack.base.client.OpenStackBaseException) Segment(com.woorea.openstack.quantum.model.Segment) Quantum(com.woorea.openstack.quantum.Quantum) MsoNetworkNotFound(org.onap.so.openstack.exceptions.MsoNetworkNotFound) CloudSite(org.onap.so.db.catalog.beans.CloudSite) Network(com.woorea.openstack.quantum.model.Network) NetworkInfoMapper(org.onap.so.openstack.mappers.NetworkInfoMapper) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

OpenStackBaseException (com.woorea.openstack.base.client.OpenStackBaseException)1 Quantum (com.woorea.openstack.quantum.Quantum)1 Network (com.woorea.openstack.quantum.model.Network)1 Segment (com.woorea.openstack.quantum.model.Segment)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 CloudSite (org.onap.so.db.catalog.beans.CloudSite)1 MsoCloudSiteNotFound (org.onap.so.openstack.exceptions.MsoCloudSiteNotFound)1 MsoException (org.onap.so.openstack.exceptions.MsoException)1 MsoNetworkNotFound (org.onap.so.openstack.exceptions.MsoNetworkNotFound)1 NetworkInfoMapper (org.onap.so.openstack.mappers.NetworkInfoMapper)1