introduced SxpEndpointAugmentor 06/39606/9
authorMatej Perina <matej.perina@pantheon.sk>
Wed, 15 Jun 2016 11:25:13 +0000 (13:25 +0200)
committerMatej Perina <matej.perina@pantheon.sk>
Thu, 16 Jun 2016 13:38:36 +0000 (13:38 +0000)
    - endpoint-augmentor implementation for sgt
    - added domain-specific-registry to config of sxp-mapper

Change-Id: I153368992b59f476f87503bb2c8951a0b5237682
Signed-off-by: Matej Perina <matej.perina@pantheon.sk>
Signed-off-by: Michal Rehak <mirehak@cisco.com>
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
sxp-mapper/src/main/config/default-config.xml
sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModule.java
sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpEndpointAugmentorImpl.java [new file with mode: 0644]
sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperProviderImpl.java
sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImpl.java
sxp-mapper/src/main/yang/sxp-mapper-cfg.yang
sxp-mapper/src/main/yang/sxp-mapper-model.yang

index 9cb592bcbec01a92d157c3d01d92c022d16c9dff..0f2d59bb85c49c3c688a4821427d08b506035d69 100755 (executable)
                         <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
                         <name>binding-rpc-broker</name>
                     </rpc-registry>
+                    <domain-specific-registry>
+                        <type xmlns:gbp="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
+                            gbp:domain-specific-registry
+                        </type>
+                        <name>domain-specific-registry</name>
+                    </domain-specific-registry>
                 </module>
             </modules>
         </data>
index 8a78441ec48b4ae9480c6db3ac622bafb052994b..c7560b6755464135fb95b49331a0dd9b0a6c1948 100644 (file)
@@ -30,6 +30,7 @@ public class SxpMapperProviderModule extends org.opendaylight.controller.config.
 
     @Override
     public java.lang.AutoCloseable createInstance() {
-        return new SxpMapperProviderImpl(getDataBrokerDependency(), getRpcRegistryDependency());
+        return new SxpMapperProviderImpl(getDataBrokerDependency(), getRpcRegistryDependency(),
+                getDomainSpecificRegistryDependency());
     }
 }
diff --git a/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpEndpointAugmentorImpl.java b/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpEndpointAugmentorImpl.java
new file mode 100644 (file)
index 0000000..340336e
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.sxp.mapper.impl;
+
+import java.util.AbstractMap;
+import java.util.Map.Entry;
+
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.ContainmentEndpointWithLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointAugBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointRegAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAugBuilder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+public class SxpEndpointAugmentorImpl implements EndpointAugmentor {
+
+    @Override
+    public Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> buildAddressEndpointAugmentation(
+            AddressEndpointReg input) {
+        AddressEndpointRegAug addressEndpointRegAug = input.getAugmentation(AddressEndpointRegAug.class);
+        if (addressEndpointRegAug == null) {
+            return null;
+        }
+        AddressEndpointAug addressEndpointAug = new AddressEndpointAugBuilder(addressEndpointRegAug).build();
+        Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> entry =
+                new AbstractMap.SimpleEntry<>(AddressEndpointAug.class, addressEndpointAug);
+        return entry;
+    }
+
+    @Override
+    public Entry<Class<? extends Augmentation<ContainmentEndpoint>>, Augmentation<ContainmentEndpoint>> buildContainmentEndpointAugmentation(
+            ContainmentEndpointReg input) {
+        return null;
+    }
+
+    @Override
+    public Entry<Class<? extends Augmentation<AddressEndpointWithLocation>>, Augmentation<AddressEndpointWithLocation>> buildAddressEndpointWithLocationAugmentation(
+            AddressEndpoint input) {
+        AddressEndpointAug addressEndpointAug = input.getAugmentation(AddressEndpointAug.class);
+        if (addressEndpointAug == null) {
+            return null;
+        }
+        AddressEndpointWithLocationAug addressEndpointWithLocationAug =
+                new AddressEndpointWithLocationAugBuilder(addressEndpointAug).build();
+        Entry<Class<? extends Augmentation<AddressEndpointWithLocation>>, Augmentation<AddressEndpointWithLocation>> entry =
+                new AbstractMap.SimpleEntry<>(AddressEndpointWithLocationAug.class, addressEndpointWithLocationAug);
+        return entry;
+    }
+
+    @Override
+    public Entry<Class<? extends Augmentation<ContainmentEndpointWithLocation>>, Augmentation<ContainmentEndpointWithLocation>> buildContainmentEndpointWithLocationAugmentation(
+            ContainmentEndpoint input) {
+        return null;
+    }
+
+}
index 8cd816c87f50d1cc55b6991f48841060a8583368..7087231baed404342f2534819073ab10fc41b322 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.groupbasedpolicy.sxp.mapper.impl;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.DSAsyncDao;
 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.EPTemplateListener;
 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SimpleCachedDao;
@@ -38,17 +40,17 @@ public class SxpMapperProviderImpl implements AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(SxpMapperProviderImpl.class);
 
-    private final DataBroker dataBrokerDependency;
-    private final RpcProviderRegistry rpcRegistryDependency;
     private final MasterDatabaseBindingListenerImpl sxpDatabaseListener;
     private final SxpMapperReactor sxpMapperReactor;
     private final EPTemplateListener epPolicyTemplateListener;
     private final EPTemplateListener epForwardingTemplateListener;
+    private final DomainSpecificRegistry domainSpecificRegistry;
+    private final EndpointAugmentor sxpEndpointAugmentor;
 
-    public SxpMapperProviderImpl(final DataBroker dataBroker, final RpcProviderRegistry rpcRegistryDependency) {
+    public SxpMapperProviderImpl(final DataBroker dataBroker, final RpcProviderRegistry rpcRegistryDependency,
+            final DomainSpecificRegistry domainSpecificRegistry) {
         LOG.info("starting SxmMapper ..");
-        this.dataBrokerDependency = dataBroker;
-        this.rpcRegistryDependency = rpcRegistryDependency;
+        this.domainSpecificRegistry = domainSpecificRegistry;
 
         final BaseEndpointService endpointService = rpcRegistryDependency.getRpcService(BaseEndpointService.class);
         sxpMapperReactor = new SxpMapperReactorImpl(endpointService, dataBroker);
@@ -69,6 +71,8 @@ public class SxpMapperProviderImpl implements AutoCloseable {
                 masterDBBindingDao, epForwardingTemplateDao);
         epForwardingTemplateListener = new EPForwardingTemplateListenerImpl(dataBroker, sxpMapperReactor, epForwardingTemplateCachedDao,
                 masterDBBindingDao, epPolicyTemplateDao);
+        sxpEndpointAugmentor = new SxpEndpointAugmentorImpl();
+        domainSpecificRegistry.getEndpointAugmentorRegistry().register(sxpEndpointAugmentor);
         LOG.info("started SxmMapper");
     }
 
@@ -78,5 +82,6 @@ public class SxpMapperProviderImpl implements AutoCloseable {
         sxpDatabaseListener.close();
         epPolicyTemplateListener.close();
         epForwardingTemplateListener.close();
+        domainSpecificRegistry.getEndpointAugmentorRegistry().unregister(sxpEndpointAugmentor);
     }
 }
index 5723fae84ff91eee4214bb3c34d0c3e5298ae4a8..b93e3c0495a06a8020b63ae85e3cf8e9bf76d3c3 100644 (file)
@@ -32,6 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpo
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointRegAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointRegAugBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
@@ -78,18 +80,20 @@ public class SxpMapperReactorImpl implements SxpMapperReactor {
             .setNetworkDomainType(epForwardingTemplate.getNetworkContainment().getNetworkDomainType())
             .setNetworkDomainId(epForwardingTemplate.getNetworkContainment().getNetworkDomainId())
             .build())
-            .build();
-        final RegisterEndpointInput epInput = new RegisterEndpointInputBuilder()
-                .setAddressEndpointReg(Collections.singletonList(new AddressEndpointRegBuilder()
-                        .setAddressType(IpPrefixType.class)
-                        .setAddress(address.getValue())
-                        .setContextType(L3Context.class)
-                        .setContextId(epForwardingTemplate.getL3Context())
-                        .setNetworkContainment(networkContainment)
-                        .setCondition(epPolicyTemplate.getConditions())
-                        .setTenant(epPolicyTemplate.getTenant())
-                        .setEndpointGroup(epPolicyTemplate.getEndpointGroups())
-                        .build()))
+                    .build();
+        AddressEndpointRegAug sgtAugmentation =
+                new AddressEndpointRegAugBuilder().setSgt(masterDBBinding.getSecurityGroupTag()).build();
+        final RegisterEndpointInput epInput = new RegisterEndpointInputBuilder().setAddressEndpointReg(
+                Collections.singletonList(new AddressEndpointRegBuilder().setAddressType(IpPrefixType.class)
+                    .setAddress(address.getValue())
+                    .setContextType(L3Context.class)
+                    .setContextId(epForwardingTemplate.getL3Context())
+                    .setNetworkContainment(networkContainment)
+                    .setCondition(epPolicyTemplate.getConditions())
+                    .setTenant(epPolicyTemplate.getTenant())
+                    .setEndpointGroup(epPolicyTemplate.getEndpointGroups())
+                    .addAugmentation(AddressEndpointRegAug.class, sgtAugmentation)
+                    .build()))
                 .build();
                 epForwardingTemplate.getL3Context();
 
index 2d84ac8443e8c4bf5c28e1a1d4df8daec47e99b1..8373d9fdb79a2dfebf92fd6ada46ed8c20d28021 100644 (file)
@@ -13,6 +13,7 @@ module sxp-mapper-cfg {
 
     import config { prefix config; revision-date 2013-04-05; }
     import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+    import groupbasedpolicy-cfg {prefix gbpcfg; revision-date 2015-11-06; }
 
     description
         "This module contains the base YANG definitions for
@@ -54,6 +55,15 @@ module sxp-mapper-cfg {
                     }
                 }
             }
+            //Domain specific registry
+            container domain-specific-registry {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity gbpcfg:domain-specific-registry;
+                    }
+                }
+            }
         }
     }
 }
index 9252cae337e902177df8f9fedd5996261dae7c95..64bd4410113779d4334f45d5fdba09a3ca50432d 100644 (file)
@@ -15,6 +15,9 @@ module sxp-mapper-model {
     import gbp-common { prefix gbp-common; revision-date 2014-04-21; }
     import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
     import forwarding { prefix forwarding; revision-date 2016-04-27; }
+    import base-endpoint { prefix base-edpoint; revision-date 2016-04-27; }
+    import yang-ext { prefix ext; revision-date 2013-07-09; }
+    import renderer { prefix renderer; revision-date 2015-11-03; }
 
     description
         "This module contains the YANG definitions for
@@ -77,4 +80,27 @@ module sxp-mapper-model {
             }
         }
     }
+
+    grouping sxp-sgt {
+        description "SGT leaf dedicated for endpoint-rpc, endpoint container and renderer configuration
+            (attach by augmentation)";
+        leaf sgt {
+            type sxp-database:sgt;
+        }
+    }
+
+    augment "/base-endpoint:register-endpoint/base-endpoint:input/base-endpoint:address-endpoint-reg" {
+        ext:augment-identifier "address-endpoint-reg-aug";
+        uses sxp-sgt;
+    }
+
+    augment "/base-endpoint:endpoints/base-endpoint:address-endpoints/base-endpoint:address-endpoint" {
+        ext:augment-identifier "address-endpoint-aug";
+        uses sxp-sgt;
+    }
+
+    augment "renderer:renderers/renderer:renderer/renderer:renderer-policy/renderer:configuration/renderer:endpoints/renderer:address-endpoint-with-location" {
+        ext:augment-identifier "address-endpoint-with-location-aug";
+        uses sxp-sgt;
+    }
 }