2 * Copyright (c) 2013, 2015 IBM Corporation 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.neutron.transcriber;
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.neutron.spi.INeutronFloatingIPCRUD;
19 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
20 import org.opendaylight.neutron.spi.INeutronPortCRUD;
21 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
22 import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
23 import org.opendaylight.neutron.spi.NeutronFloatingIP;
24 import org.opendaylight.neutron.spi.NeutronSubnet;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev141002.floatingips.attributes.Floatingips;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev141002.floatingips.attributes.floatingips.Floatingip;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev141002.floatingips.attributes.floatingips.FloatingipBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.osgi.framework.BundleContext;
32 import org.osgi.framework.ServiceRegistration;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
36 public class NeutronFloatingIPInterface extends AbstractNeutronInterface<Floatingip, NeutronFloatingIP> implements INeutronFloatingIPCRUD {
37 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFloatingIPInterface.class);
39 NeutronFloatingIPInterface(ProviderContext providerContext) {
40 super(providerContext);
43 // IfNBFloatingIPCRUD interface methods
46 public boolean floatingIPExists(String uuid) {
51 public NeutronFloatingIP getFloatingIP(String uuid) {
56 public List<NeutronFloatingIP> getAll() {
57 Set<NeutronFloatingIP> allIPs = new HashSet<NeutronFloatingIP>();
58 Floatingips fips = readMd(createInstanceIdentifier());
60 for (Floatingip fip: fips.getFloatingip()) {
61 allIPs.add(fromMd(fip));
64 LOGGER.debug("Exiting getAllFloatingIPs, Found {} FloatingIPs", allIPs.size());
65 List<NeutronFloatingIP> ans = new ArrayList<NeutronFloatingIP>();
71 public List<NeutronFloatingIP> getAllFloatingIPs() {
76 public boolean addFloatingIP(NeutronFloatingIP input) {
81 public boolean removeFloatingIP(String uuid) {
86 public boolean updateFloatingIP(String uuid, NeutronFloatingIP delta) {
87 NeutronFloatingIP target = getFloatingIP(uuid);
91 delta.setPortUUID(target.getPortUUID());
92 delta.setFixedIPAddress(target.getFixedIPAddress());
93 return updateMd(delta);
97 protected Floatingip toMd(String uuid) {
98 FloatingipBuilder floatingipBuilder = new FloatingipBuilder();
99 floatingipBuilder.setUuid(toUuid(uuid));
100 return floatingipBuilder.build();
104 protected Floatingip toMd(NeutronFloatingIP floatingIp) {
105 FloatingipBuilder floatingipBuilder = new FloatingipBuilder();
106 if (floatingIp.getFixedIPAddress() != null) {
107 floatingipBuilder.setFixedIpAddress(new IpAddress(floatingIp.getFixedIPAddress().toCharArray()));
109 if(floatingIp.getFloatingIPAddress() != null) {
110 floatingipBuilder.setFloatingIpAddress(new IpAddress(floatingIp.getFloatingIPAddress().toCharArray()));
112 if (floatingIp.getFloatingNetworkUUID() != null) {
113 floatingipBuilder.setFloatingNetworkId(toUuid(floatingIp.getFloatingNetworkUUID()));
115 if (floatingIp.getPortUUID() != null) {
116 floatingipBuilder.setPortId(toUuid(floatingIp.getPortUUID()));
118 if (floatingIp.getRouterUUID() != null) {
119 floatingipBuilder.setRouterId(toUuid(floatingIp.getRouterUUID()));
121 if (floatingIp.getStatus() != null) {
122 floatingipBuilder.setStatus(floatingIp.getStatus());
124 if (floatingIp.getTenantUUID() != null) {
125 floatingipBuilder.setTenantId(toUuid(floatingIp.getTenantUUID()));
127 if (floatingIp.getID() != null) {
128 floatingipBuilder.setUuid(toUuid(floatingIp.getID()));
131 LOGGER.warn("Attempting to write neutron floating IP without UUID");
133 return floatingipBuilder.build();
136 protected NeutronFloatingIP fromMd(Floatingip fip) {
137 NeutronFloatingIP result = new NeutronFloatingIP();
138 result.setID(String.valueOf(fip.getUuid().getValue()));
139 if (fip.getFloatingNetworkId() != null) {
140 result.setFloatingNetworkUUID(String.valueOf(fip.getFloatingNetworkId().getValue()));
142 if (fip.getPortId() != null) {
143 result.setPortUUID(String.valueOf(fip.getPortId().getValue()));
145 if (fip.getFixedIpAddress() != null ) {
146 result.setFixedIPAddress(String.valueOf(fip.getFixedIpAddress().getValue()));
148 if (fip.getFloatingIpAddress() != null) {
149 result.setFloatingIPAddress(String.valueOf(fip.getFloatingIpAddress().getValue()));
151 if (fip.getTenantId() != null) {
152 result.setTenantUUID(String.valueOf(fip.getTenantId().getValue()));
154 if (fip.getRouterId() != null) {
155 result.setRouterUUID(String.valueOf(fip.getRouterId().getValue()));
157 result.setStatus(fip.getStatus());
162 protected InstanceIdentifier<Floatingip> createInstanceIdentifier(
164 return InstanceIdentifier.create(Neutron.class)
165 .child(Floatingips.class)
166 .child(Floatingip.class,item.getKey());
169 protected InstanceIdentifier<Floatingips> createInstanceIdentifier() {
170 return InstanceIdentifier.create(Neutron.class)
171 .child(Floatingips.class);
174 public static void registerNewInterface(BundleContext context,
175 ProviderContext providerContext,
176 List<ServiceRegistration<?>> registrations) {
177 NeutronFloatingIPInterface neutronFloatingIPInterface = new NeutronFloatingIPInterface(providerContext);
178 ServiceRegistration<INeutronFloatingIPCRUD> neutronFloatingIPInterfaceRegistration = context.registerService(INeutronFloatingIPCRUD.class, neutronFloatingIPInterface, null);
179 if (neutronFloatingIPInterfaceRegistration != null) {
180 registrations.add(neutronFloatingIPInterfaceRegistration);