Example of MD-transcribing for network 78/18778/1
authorEd Warnicke <hagbard@gmail.com>
Tue, 21 Apr 2015 18:13:21 +0000 (11:13 -0700)
committerEd Warnicke <hagbard@gmail.com>
Tue, 21 Apr 2015 20:04:39 +0000 (13:04 -0700)
Change-Id: I2d13631bebbed685eb531e978ed45a4a66288cde
Signed-off-by: Ed Warnicke <hagbard@gmail.com>
29 files changed:
features/production/pom.xml
features/production/src/main/features/features.xml
model/pom.xml
model/src/main/yang/neutron-binding.yang
model/src/main/yang/neutron-fwaas.yang
model/src/main/yang/neutron-vpnaas.yang
model/src/main/yang/neutron.yang
transcriber/pom.xml
transcriber/src/main/java/org/opendaylight/neutron/transcriber/AbstractNeutronInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallPolicyInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallRuleInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFloatingIPInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerHealthMonitorInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerListenerInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolMemberInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronMeteringLabelInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronMeteringLabelRuleInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronNetworkInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronPortInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronRouterInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronSecurityGroupInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronSecurityRuleInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronSubnetInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronVPNIKEPolicyInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronVPNIPSECSiteConnectionsInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronVPNServiceInterface.java

index c70252936b32856677f117f09c4651b43d349ab0..0f5828da794c7ce3b0290c203953fbb6792f391e 100644 (file)
       <type>xml</type>
       <classifier>features</classifier>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>features-restconf</artifactId>
+      <type>xml</type>
+      <classifier>features</classifier>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.aaa</groupId>
       <artifactId>features-aaa</artifactId>
       <artifactId>northbound-api</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>transcriber</artifactId>
index 9be5b00c49978a64fdfda9245852d75006cfa3dd..c1909b393772a62570b8e410fd217efcda894410 100644 (file)
@@ -4,6 +4,9 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
    <repository>mvn:org.opendaylight.aaa/features-aaa/${aaa.version}/xml/features</repository>
+   <repository>mvn:org.opendaylight.yangtools/features-yangtools/${yangtools.version}/xml/features</repository>
+   <repository>mvn:org.opendaylight.controller/features-mdsal/${mdsal.version}/xml/features</repository>
+   <repository>mvn:org.opendaylight.controller/features-restconf/${mdsal.version}/xml/features</repository>
    <feature name='odl-neutron-service' version='${project.version}' description="OpenDaylight :: Neutron :: API">
     <feature version='${project.version}'>odl-neutron-spi</feature>
     <feature version='${project.version}'>odl-neutron-northbound-api</feature>
     <bundle>mvn:org.osgi/org.osgi.core/${osgi.core.version}</bundle>
   </feature>
   <feature name='odl-neutron-transcriber' version='${project.version}' description="OpenDaylight :: Neutron :: Implementation">
-    <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
     <feature version='${project.version}'>odl-neutron-spi</feature>
     <feature>war</feature>
+    <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
     <bundle>mvn:org.opendaylight.neutron/transcriber/${project.version}</bundle>
+    <bundle>mvn:org.opendaylight.neutron/model/${project.version}</bundle>
     <bundle>mvn:org.osgi/org.osgi.core/${osgi.core.version}</bundle>
-    <configfile finalname="etc/opendaylight/karaf/neutron-transriber-default-config.xml">mvn:org.opendaylight.neutron/transcriber/${project.version}/xml/config</configfile>
+    <configfile finalname="etc/opendaylight/karaf/neutron-transcriber-default-config.xml">mvn:org.opendaylight.neutron/transcriber/${project.version}/xml/config</configfile>
   </feature>
 </features>
index 3d96c300cf6e2b98786ca3fe6d40e2214e24841d..7e2749515bfa00c09e815dcaf10ea6e5446e9293 100644 (file)
@@ -19,7 +19,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.neutron</groupId>
   <artifactId>model</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
+  <version>0.5.0-SNAPSHOT</version>
+  <packaging>bundle</packaging>
 
   <dependencies>
     <dependency>
@@ -49,4 +50,4 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <tag>HEAD</tag>
     <url>https://wiki.opendaylight.org/view/NeutronNorthBound:Main</url>
   </scm>
-</project>
\ No newline at end of file
+</project>
index 9e871bd1a2fcbc9b0f51f87d0bf96c8101450433..4beeb8bcc08c7d3308a474fa46457222868fa6b6 100644 (file)
@@ -27,6 +27,11 @@ module neutron-binding {
 
     description "This YANG module defines binding attributes that are used by Openstack
         Juno Port YANG modules.";
+    
+    revision "2014-10-02" {
+        description
+                "Initial version";
+    }
 
     grouping binding-attrs {
         leaf host-id {
index 9b82c4193ffd5b3e6ef5142c1ad6ec2d08e059c9..774eb00fd877c26d264cd1386cc5f00cd096d421 100644 (file)
@@ -23,6 +23,11 @@ module neutron-fwaas {
     contact "R. Moats <rmoats@us.ibm.com>";
 
     description "This YANG module defines Openstack Juno House Neutron VPNaaS model";
+    
+    revision "2014-10-02" {
+        description
+                "Initial version";
+    }
 
     grouping firewall-attrs {
         leaf descr {
index bda00fc68cdbe013b813f75cb766536cb3cf102a..b03489b22ef2144c0cbc1ae09ad3ca212a545eff 100644 (file)
@@ -23,6 +23,11 @@ module neutron-vpnaas {
     contact "R. Moats <rmoats@us.ibm.com>";
 
     description "This YANG module defines Openstack Juno House Neutron VPNaaS model";
+    
+    revision "2014-10-02" {
+        description
+                "Initial version";
+    }
 
     grouping vpnservices-attrs {
         leaf descr {
index 19c1f267736aeb5a544baefbc5b6f588a5d8aac8..8d5e807482dda3cb0ffe3db62a41968f0fba5fdb 100644 (file)
@@ -10,7 +10,7 @@ module neutron {
 
     yang-version 1;
 
-    namespace "urn:opendaylight:neutron-L3";
+    namespace "urn:opendaylight:neutron";
 
     prefix neutron-L3;
 
index aa614400535f75bc9f006c5e3c2e782f5d5d4e19..abadfd7aa4ed49282d1a19c8b27cd30d5264f19a 100644 (file)
       <artifactId>neutron-spi</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.neutron</groupId>
+      <artifactId>model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.core</artifactId>
index a5d007bde49e25e7ff945f4c2102c57e13104b19..d8d5ad39dfb016b8faaa1701403ca214e8b7c029 100644 (file)
@@ -1,9 +1,24 @@
 package org.opendaylight.neutron.transcriber;
 
+import java.util.concurrent.ExecutionException;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicates;
+import com.google.common.util.concurrent.CheckedFuture;
 
-public abstract class AbstractNeutronInterface implements AutoCloseable {
+public abstract class AbstractNeutronInterface<T extends DataObject,S> implements AutoCloseable {
+    private static final Logger logger = LoggerFactory.getLogger(AbstractNeutronInterface.class);
 
     private ProviderContext providerContext;
     private DataBroker db;
@@ -17,6 +32,77 @@ public abstract class AbstractNeutronInterface implements AutoCloseable {
         return db;
     }
 
+    protected abstract InstanceIdentifier<T> createInstanceIdentifier(T item);
+
+    protected abstract T toMd(S neutronObject);
+
+    protected abstract T toMd(String uuid);
+
+    protected boolean addMd(S neutronObject) {
+        // TODO think about adding existence logic
+        WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
+        T item = toMd(neutronObject);
+        InstanceIdentifier<T> iid = createInstanceIdentifier(item);
+        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item,true);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            logger.warn("Transation failed ",e);
+            return false;
+        }
+        return true;
+    }
+
+    protected boolean updateMd(S neutronObject) {
+        WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
+        T item = toMd(neutronObject);
+        InstanceIdentifier<T> iid = createInstanceIdentifier(item);
+        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item,true);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            logger.warn("Transation failed ",e);
+            return false;
+        }
+        return true;
+    }
+
+    protected boolean removeMd(T item) {
+        WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
+        InstanceIdentifier<T> iid = createInstanceIdentifier(item);
+        transaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        return true;
+    }
+
+    protected Uuid toUuid(String uuid) {
+        Preconditions.checkNotNull(uuid);
+        Uuid result;
+        try {
+            result = new Uuid(uuid);
+        } catch(IllegalArgumentException e) {
+            // OK... someone didn't follow RFC 4122... lets try this the hard way
+            String dedashed = uuid.replace("-", "");
+            if(dedashed.length() == 32) {
+                String redashed = dedashed.substring(0, 8) // 8 chars
+                        + "-"
+                        + dedashed.substring(8, 12) // 4 chars
+                        + "-"
+                        + dedashed.substring(12, 16) // 4 chars
+                        + "-"
+                        + dedashed.substring(16, 20) // 4 chars
+                        + "-"
+                        + dedashed.substring(20, 32); // 12 chars
+                result = new Uuid(redashed);
+            } else {
+                throw e;
+            }
+        }
+        return result;
+    }
+
     @Override
     public void close() throws Exception {
         // TODO Auto-generated method stub
index 0de80b33734295cdac9fabbfb73721b068c7bbc4..1904dc7eceeed0cb149357e9d4a739ec31da7914 100644 (file)
@@ -11,6 +11,8 @@ package org.opendaylight.neutron.transcriber;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallCRUD;
 import org.opendaylight.neutron.spi.NeutronFirewall;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -127,5 +129,23 @@ public class NeutronFirewallInterface extends AbstractNeutronInterface implement
         return !neutronFirewallExists(firewallUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 
 }
index 798c6f5e75e0e188d3da3e8da374b0e33092e500..716fb52ff6459389465b7914994884fa588b431b 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallPolicyCRUD;
 import org.opendaylight.neutron.spi.NeutronFirewallPolicy;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -126,4 +128,22 @@ public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface imp
         return !neutronFirewallPolicyExists(firewallPolicyUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index d36f0179b94c90bec929de07047f1b451bd4a93d..9ce22f044eba579d69f86bdaa18e9eeddcfbe0b3 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
 import org.opendaylight.neutron.spi.NeutronFirewallRule;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -126,4 +128,22 @@ public class NeutronFirewallRuleInterface extends AbstractNeutronInterface imple
         return !neutronFirewallRuleExists(firewallRuleUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index a0e2e23ca00cb2ad365bce3c9131f452b28c667e..2579e2db5c94687a58651b72b0a54bde4656dd4f 100644 (file)
@@ -26,6 +26,8 @@ import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
 import org.opendaylight.neutron.spi.NeutronFloatingIP;
 import org.opendaylight.neutron.spi.NeutronPort;
 import org.opendaylight.neutron.spi.NeutronSubnet;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -165,4 +167,22 @@ public class NeutronFloatingIPInterface extends AbstractNeutronInterface impleme
         target.setFixedIPAddress(delta.getFixedIPAddress());
         return true;
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 1f83f96e072c9123d413d75dc7e08e39f0b2f1cf..3aea6c84f76d610935094248f2dab050e25340e5 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,4 +121,22 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
     public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
         return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 2982199aebed9c73edce4ad782047bb9994a827d..2639b790da9e9ab360406411009c3f193d064084 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancer;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,4 +122,22 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface imple
         return !neutronLoadBalancerExists(loadBalancerUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index b414fdd8932fe65505ee2bef14d74ea54e3fdb43..995b8120a8ffddcfea66b4d6b1e5af2ba93a12fb 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerListenerCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerListener;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,4 +121,22 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
     public boolean neutronLoadBalancerListenerInUse(String loadBalancerListenerUUID) {
         return !neutronLoadBalancerListenerExists(loadBalancerListenerUUID);
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 8e08dc6256af1a0c0267668e36dbdbc2c13fee92..a8b0be62cde55f8bd0968c055e30824a973c0256 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,4 +122,22 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface i
         return !neutronLoadBalancerPoolExists(loadBalancerPoolUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index e1894205826d5fe626d0c9aac43d4c873c67a51a..beee91f4f372fce623def2a28149f905021172bc 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,4 +122,22 @@ public class NeutronLoadBalancerPoolMemberInterface
     public boolean neutronLoadBalancerPoolMemberInUse(String loadBalancerPoolMemberID) {
         return !neutronLoadBalancerPoolMemberExists(loadBalancerPoolMemberID);
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index c30baf60668efb9a16f9d840c8f8fc5d7180333a..dd46db24b98b2a40fe59f5dc65145edec6fad5c5 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronMeteringLabelCRUD;
 import org.opendaylight.neutron.spi.NeutronMeteringLabel;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -122,4 +124,22 @@ public class NeutronMeteringLabelInterface extends AbstractNeutronInterface impl
         }
         return false;
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 84ea3d01c14d32ae6f6e0035dffb89fe04bb03f0..20717aae35929d56a991d778cee14c233aa6cbff 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronMeteringLabelRuleCRUD;
 import org.opendaylight.neutron.spi.NeutronMeteringLabelRule;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -124,4 +126,22 @@ public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface
         }
         return false;
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 7a39f0520e85e09b090062b165fc1e0f2d739988..69560f51f0df6e56d460b9a0e54bdae45cc05f8d 100644 (file)
@@ -20,10 +20,16 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
 import org.opendaylight.neutron.spi.NeutronNetwork;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.Networks;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NeutronNetworkInterface extends AbstractNeutronInterface implements INeutronNetworkCRUD {
+public class NeutronNetworkInterface extends AbstractNeutronInterface<Network,NeutronNetwork> implements INeutronNetworkCRUD {
     private static final Logger logger = LoggerFactory.getLogger(NeutronNetworkInterface.class);
     private ConcurrentMap<String, NeutronNetwork> networkDB = new ConcurrentHashMap<String, NeutronNetwork>();
 
@@ -94,6 +100,7 @@ public class NeutronNetworkInterface extends AbstractNeutronInterface implements
             return false;
         }
         networkDB.putIfAbsent(input.getID(), input);
+        addMd(input);
       //TODO: add code to find INeutronNetworkAware services and call newtorkCreated on them
         return true;
     }
@@ -104,6 +111,7 @@ public class NeutronNetworkInterface extends AbstractNeutronInterface implements
             return false;
         }
         networkDB.remove(uuid);
+        removeMd(toMd(uuid));
       //TODO: add code to find INeutronNetworkAware services and call newtorkDeleted on them
         return true;
     }
@@ -114,6 +122,7 @@ public class NeutronNetworkInterface extends AbstractNeutronInterface implements
             return false;
         }
         NeutronNetwork target = networkDB.get(uuid);
+        updateMd(delta);
         return overwrite(target, delta);
     }
 
@@ -128,4 +137,47 @@ public class NeutronNetworkInterface extends AbstractNeutronInterface implements
         }
         return false;
     }
+
+    protected Network toMd(NeutronNetwork network) {
+        NetworkBuilder networkBuilder = new NetworkBuilder();
+        networkBuilder.setAdminStateUp(network.getAdminStateUp());
+        if (network.getNetworkName() != null) {
+            networkBuilder.setName(network.getNetworkName());
+        }
+        if (network.getShared() != null) {
+            networkBuilder.setShared(network.getShared());
+        }
+        if (network.getStatus() != null) {
+            networkBuilder.setStatus(network.getStatus());
+        }
+        if (network.getSubnets() != null) {
+            List<Uuid> subnets = new ArrayList<Uuid>();
+            for( String subnet : network.getSubnets()) {
+                subnets.add(toUuid(subnet));
+            }
+            networkBuilder.setSubnets(subnets);
+        }
+        if (network.getTenantID() != null) {
+            networkBuilder.setTenantId(toUuid(network.getTenantID()));
+        }
+        if (network.getNetworkUUID() != null) {
+            networkBuilder.setUuid(toUuid(network.getNetworkUUID()));
+        } else {
+            logger.warn("Attempting to write neutron network without UUID");
+        }
+        return networkBuilder.build();
+    }
+
+    protected Network toMd(String uuid) {
+        NetworkBuilder networkBuilder = new NetworkBuilder();
+        networkBuilder.setUuid(toUuid(uuid));
+        return networkBuilder.build();
+    }
+
+    @Override
+    protected InstanceIdentifier<Network> createInstanceIdentifier(Network network) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Networks.class)
+                .child(Network.class,network.getKey());
+    }
 }
index dd8de161669235389caaa29720b26c233708be38..bba66731ec9c07dd62705c505c9bbbd3e7fed0d3 100644 (file)
@@ -27,6 +27,8 @@ import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.neutron.spi.NeutronPort;
 import org.opendaylight.neutron.spi.NeutronSubnet;
 import org.opendaylight.neutron.spi.Neutron_IPs;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -220,4 +222,22 @@ public class NeutronPortInterface extends AbstractNeutronInterface implements IN
         }
         return null;
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 32a4d83c3937b7d4bc296d058722458fc9ab5322..4d75637ee0789c2a1484df9381af77fcdbecc9d1 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronRouterCRUD;
 import org.opendaylight.neutron.spi.NeutronRouter;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -125,4 +127,22 @@ public class NeutronRouterInterface extends  AbstractNeutronInterface implements
         return (target.getInterfaces().size() > 0);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index 45452fd03a30d1330bf972fa9538c23abcdab7ae..4c01a0c2d7dc958fe9bbdf96acea4ce1b23c8cf9 100644 (file)
@@ -21,6 +21,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
 import org.opendaylight.neutron.spi.NeutronSecurityGroup;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,4 +122,22 @@ public class NeutronSecurityGroupInterface extends AbstractNeutronInterface impl
         return !neutronSecurityGroupExists(securityGroupUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index eb57052019cc4dc8359d7e6ddc3eb95b8928bb16..133f251a8817984fe498f5a3da9ba90181b30d1e 100644 (file)
@@ -21,6 +21,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronSecurityRuleCRUD;
 import org.opendaylight.neutron.spi.NeutronSecurityRule;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,4 +121,22 @@ public class NeutronSecurityRuleInterface extends AbstractNeutronInterface imple
         return !neutronSecurityRuleExists(securityRuleUUID);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index 32322b361928c464789f6c1be0330d842aca818c..87ca027913037cfe7298372712eacc4482789dd1 100644 (file)
@@ -23,6 +23,8 @@ import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
 import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.neutron.spi.NeutronSubnet;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -136,4 +138,22 @@ public class NeutronSubnetInterface extends AbstractNeutronInterface implements
         NeutronSubnet target = subnetDB.get(subnetUUID);
         return (target.getPortsInSubnet().size() > 0);
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 91a562b1c4ceb250631068641f5a6b9d3384dd62..8c66360c9dc5668c7d0a9de4e3d9da4ee4a67062 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronVPNIKEPolicyCRUD;
 import org.opendaylight.neutron.spi.NeutronVPNIKEPolicy;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -124,4 +126,25 @@ public class NeutronVPNIKEPolicyInterface extends AbstractNeutronInterface imple
         }
         return false;
     }
+
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 209e21e31618f1c21e3a0a513ab5fb30ccfb7907..a7cb399e356e1a05d56c4f13b1ddb0facd9dec89 100644 (file)
@@ -19,6 +19,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronVPNIPSECSiteConnectionsCRUD;
 import org.opendaylight.neutron.spi.NeutronVPNIPSECSiteConnection;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,4 +121,22 @@ public class NeutronVPNIPSECSiteConnectionsInterface extends AbstractNeutronInte
         }
         return false;
     }
+
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
\ No newline at end of file
index a89cd3b855f0b7bcd6837d19da45fb8543676a9e..d25d9753355697252ccf64e7ed6ecf39c24eeda3 100644 (file)
@@ -20,6 +20,8 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronVPNServiceCRUD;
 import org.opendaylight.neutron.spi.NeutronVPNService;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -117,4 +119,22 @@ public class NeutronVPNServiceInterface extends AbstractNeutronInterface impleme
         return !neutronVPNServiceExists(uuid);
     }
 
+    @Override
+    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(Object neutronObject) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected DataObject toMd(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }