2 * Copyright © 2016 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.netvirt.renderers.neutron;
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.netvirt.utils.mdsal.utils.MdsalUtils;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.common.rev151227.NetworkTypeBase;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l2.networks.rev151227.l2.networks.L2Network;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l2.networks.rev151227.l2.networks.L2NetworkBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l2.networks.rev151227.l2.networks.L2NetworkKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
21 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
26 * Data processor for Neutron Network
28 public class NeutronNetworkDataProcessor implements DataProcessor<Network> {
29 private static final Logger LOG = LoggerFactory.getLogger(NeutronNetworkDataProcessor.class);
30 private final MdsalUtils mdsalUtils;
36 public NeutronNetworkDataProcessor(DataBroker db) {
37 mdsalUtils = new MdsalUtils(db);
41 * Remove a netvirt network from mdsal
43 * @param identifier - the whole path to DataObject
44 * @param change - port to be removed
47 public void remove(final InstanceIdentifier<Network> identifier,
48 final Network change) {
49 Preconditions.checkNotNull(change, "Removed object can not be null!");
50 LOG.debug("Delete Neutron Network model data changes for key: {} delete: {}", identifier, change);
52 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l2.networks.rev151227.l2.networks.L2Network> networkIid =
53 MdsalHelper.createL2NetworkInstanceIdentifier(change.getUuid());
55 LOG.debug("Remove netvirt network uuid {} from mdsal", change.getUuid());
57 boolean result = mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, networkIid);
59 LOG.debug("Remove netvirt network from mdsal success. Result: {}", result);
61 LOG.warn("Remove nevtirt network failed. Result: {}", result);
63 } catch (Exception e) {
64 LOG.warn("Remove netvirt network failed: exception {}", e);
69 * Update a netvirt network in mdsal
71 * @param identifier - the whole path to DataObject
72 * @param original - original DataObject (for update)
73 * @param change - network to be updated
77 public void update(final InstanceIdentifier<Network> identifier,
78 final Network original, final Network change) {
79 Preconditions.checkNotNull(original, "Updated original object can not be null!");
80 Preconditions.checkNotNull(change, "Updated change object can not be null!");
81 LOG.debug("Update Neutron Network model data changes for key: {} delete: {}", identifier, change);
82 remove(identifier, original);
83 add(identifier, change);
86 private void addExtensions(L2NetworkBuilder l2NetworkBuilder, Network network)
88 NetworkProviderExtension providerExtension = network.getAugmentation(NetworkProviderExtension.class);
89 if (providerExtension != null) {
90 if (providerExtension.getSegmentationId() != null) {
91 l2NetworkBuilder.setSegmentationId(providerExtension.getSegmentationId());
94 if (Constants.NETVIRT_NEUTRON_NETWORK_TYPE_MAP.get(providerExtension.getNetworkType().getSimpleName()) != null) {
95 l2NetworkBuilder.setNetworkType(Constants.NETVIRT_NEUTRON_NETWORK_TYPE_MAP.get(providerExtension.getNetworkType().getSimpleName()));
97 LOG.warn("Neutron Network Type not supported.. using Flat for network {}", network);
98 l2NetworkBuilder.setNetworkType(NetworkTypeBase.class);
104 * Add a netvirt Network to mdsal
106 * @param identifier - the whole path to new DataObject
107 * @param change - port to be added
110 public void add(final InstanceIdentifier<Network> identifier,
111 final Network change) {
112 Preconditions.checkNotNull(change, "Added object can not be null!");
113 LOG.debug("Create Neutron Network model data changes for identifier: {} change: {}", identifier, change);
114 L2NetworkBuilder l2NetworkBuilder = new L2NetworkBuilder();
116 InstanceIdentifier<L2Network> networkIid = MdsalHelper.createL2NetworkInstanceIdentifier(change.getUuid());
117 addExtensions(l2NetworkBuilder, change);
119 if (change.isAdminStateUp() != null) {
120 l2NetworkBuilder.setAdminStateUp(change.isAdminStateUp());
122 if (change.getName() != null) {
123 l2NetworkBuilder.setName(change.getName());
125 if (change.isShared() != null) {
126 l2NetworkBuilder.setShared(change.isShared());
128 if (change.getStatus() != null) {
129 l2NetworkBuilder.setStatus(change.getStatus());
131 if (change.getTenantId() != null) {
133 //l2NetworkBuilder.setTenantId(change.getTenantId());
135 if (change.getUuid() != null) {
136 l2NetworkBuilder.setUuid(change.getUuid());
137 l2NetworkBuilder.setKey(new L2NetworkKey(change.getUuid()));
140 LOG.debug("Add Netvirt network {} to mdsal", l2NetworkBuilder.build().toString());
142 boolean result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, networkIid, l2NetworkBuilder.build());
144 LOG.debug("createNetwork:addToMdSal success. Result: {}", result);
146 LOG.warn("createNetwork:addToMdSal failed. Result: {}", result);
148 } catch (Exception e) {
149 LOG.warn("create Netvirt Network : addToMdSal exception {}", e);