aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--csit/scripts/dmaap-datarouter/docker-compose/node.properties3
-rwxr-xr-xcsit/scripts/dmaap-datarouter/docker-compose/provserver.properties5
-rw-r--r--datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java7
-rw-r--r--datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java2
-rw-r--r--datarouter-node/src/main/resources/node.properties3
-rw-r--r--datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java1
-rw-r--r--datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java15
-rw-r--r--datarouter-node/src/test/resources/node_test.properties3
-rw-r--r--datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/PublishServlet.java13
-rw-r--r--datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java37
-rwxr-xr-xdatarouter-prov/src/main/resources/provserver.properties6
-rwxr-xr-xdatarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java47
-rwxr-xr-xdatarouter-prov/src/test/resources/h2Database.properties3
-rw-r--r--datarouter-prov/src/test/resources/h2DatabaseTlsDisabled.properties36
-rwxr-xr-xdocs/apis/data-router-api.rst403
-rw-r--r--docs/apis/drAPI1.json4
-rw-r--r--docs/architecture.rst7
-rw-r--r--docs/conf.py94
-rw-r--r--docs/configuration.rst47
-rw-r--r--docs/images/dr_bc_prov.pngbin51556 -> 46093 bytes
-rw-r--r--docs/images/dr_pub_flow.pngbin72010 -> 94237 bytes
-rw-r--r--docs/requirements-docs.txt2
-rwxr-xr-xpom.xml2
-rw-r--r--releases/2.1.11-container.yaml12
-rw-r--r--version.properties2
25 files changed, 349 insertions, 405 deletions
diff --git a/csit/scripts/dmaap-datarouter/docker-compose/node.properties b/csit/scripts/dmaap-datarouter/docker-compose/node.properties
index 58639cfd..9f3ca40d 100644
--- a/csit/scripts/dmaap-datarouter/docker-compose/node.properties
+++ b/csit/scripts/dmaap-datarouter/docker-compose/node.properties
@@ -80,3 +80,6 @@ CadiEnabled = false
#
# AAF Props file path
AAFPropsFilePath = /opt/app/osaaf/local/org.onap.dmaap-dr.props
+
+# https security required for publish request
+TlsEnabled = true
diff --git a/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties b/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties
index b54868e2..b38c3f56 100755
--- a/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties
+++ b/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties
@@ -52,4 +52,7 @@ org.onap.dmaap.datarouter.provserver.aaf.feed.type = org.onap.dmaap-dr.fe
org.onap.dmaap.datarouter.provserver.aaf.sub.type = org.onap.dmaap-dr.sub
org.onap.dmaap.datarouter.provserver.aaf.instance = legacy
org.onap.dmaap.datarouter.provserver.aaf.action.publish = publish
-org.onap.dmaap.datarouter.provserver.aaf.action.subscribe = subscribe \ No newline at end of file
+org.onap.dmaap.datarouter.provserver.aaf.action.subscribe = subscribe
+org.onap.dmaap.datarouter.provserver.tlsenabled = true
+org.onap.dmaap.datarouter.nodeserver.https.port = 8443
+org.onap.dmaap.datarouter.nodeserver.http.port = 8080 \ No newline at end of file
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
index 5b5245da..3b950232 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
@@ -102,6 +102,7 @@ public class NodeConfigManager implements DeliveryQueueHelper {
private String aafType;
private String aafInstance;
private String aafAction;
+ private boolean tlsEnabled;
private boolean cadiEnabled;
private NodeAafPropsUtils nodeAafPropsUtils;
@@ -159,6 +160,8 @@ public class NodeConfigManager implements DeliveryQueueHelper {
svcport = Integer.parseInt(drNodeProperties.getProperty("IntHttpsPort", "8443"));
port = Integer.parseInt(drNodeProperties.getProperty("ExtHttpsPort", "443"));
spooldir = drNodeProperties.getProperty("SpoolDir", "spool");
+ tlsEnabled = Boolean.parseBoolean(drNodeProperties.getProperty("TlsEnabled", "true"));
+
File fdir = new File(spooldir + "/f");
fdir.mkdirs();
for (File junk : Objects.requireNonNull(fdir.listFiles())) {
@@ -811,6 +814,10 @@ public class NodeConfigManager implements DeliveryQueueHelper {
return aafAction;
}
+ protected boolean isTlsEnabled() {
+ return tlsEnabled;
+ }
+
boolean getCadiEnabled() {
return cadiEnabled;
}
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
index 139c7492..ee1f5b7d 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
@@ -549,7 +549,7 @@ public class NodeServlet extends HttpServlet {
eelfLogger.info(EelfMsgs.EXIT);
return null;
}
- if (!req.isSecure()) {
+ if (!req.isSecure() && config.isTlsEnabled()) {
eelfLogger.error(
"NODE0104 Rejecting insecure PUT or DELETE of " + req.getPathInfo() + FROM + req
.getRemoteAddr());
diff --git a/datarouter-node/src/main/resources/node.properties b/datarouter-node/src/main/resources/node.properties
index 1d7a5d42..f7c24fab 100644
--- a/datarouter-node/src/main/resources/node.properties
+++ b/datarouter-node/src/main/resources/node.properties
@@ -85,3 +85,6 @@ CadiEnabled = false
#
# AAF Props file path
AAFPropsFilePath = /opt/app/osaaf/local/org.onap.dmaap-dr.props
+
+# https security required for publish request
+TlsEnabled = true
diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java
index e64579ed..82038fba 100644
--- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java
+++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java
@@ -112,6 +112,7 @@ public class NodeConfigManagerTest {
Assert.assertEquals("publish", nodeConfigManager.getAafAction());
Assert.assertFalse(nodeConfigManager.getCadiEnabled());
Assert.assertFalse(nodeConfigManager.isShutdown());
+ Assert.assertTrue(nodeConfigManager.isTlsEnabled());
Assert.assertTrue(nodeConfigManager.isConfigured());
Assert.assertEquals("legacy", nodeConfigManager.getAafInstance("1"));
Assert.assertNotNull(nodeConfigManager.getPublishId());
diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
index 4340b018..f7e3d7c8 100644
--- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
+++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
@@ -23,7 +23,6 @@
package org.onap.dmaap.datarouter.node;
import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyString;
@@ -144,8 +143,9 @@ public class NodeServletTest {
}
@Test
- public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Secure_Then_Forbidden_Response_Is_Generated() throws Exception {
+ public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Secure_And_TLS_Enabled_Then_Forbidden_Response_Is_Generated() throws Exception {
when(request.isSecure()).thenReturn(false);
+ when(config.isTlsEnabled()).thenReturn(true);
nodeServlet.doPut(request, response);
verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString());
verifyEnteringExitCalled(listAppender);
@@ -285,6 +285,17 @@ public class NodeServletTest {
}
@Test
+ public void Given_Request_Is_HTTP_DELETE_File_And_Request_Is_Not_Secure_But_TLS_Disabled_Then_Request_Succeeds() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ when(config.isTlsEnabled()).thenReturn(false);
+ when(request.getPathInfo()).thenReturn("/delete/1/dmaap-dr-node.1234567");
+ createFilesAndDirectories();
+ nodeServlet.doDelete(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ verifyEnteringExitCalled(listAppender);
+ }
+
+ @Test
public void Given_Request_Is_HTTP_DELETE_File_And_File_Does_Not_Exist_Then_Not_Found_Response_Is_Generated() throws IOException {
when(request.getPathInfo()).thenReturn("/delete/1/nonExistingFile");
nodeServlet.doDelete(request, response);
diff --git a/datarouter-node/src/test/resources/node_test.properties b/datarouter-node/src/test/resources/node_test.properties
index 9359e8dc..3c96ed25 100644
--- a/datarouter-node/src/test/resources/node_test.properties
+++ b/datarouter-node/src/test/resources/node_test.properties
@@ -86,3 +86,6 @@ CadiEnabled = false
# AAF Props file path
AAFPropsFilePath = src/test/resources/aaf/org.onap.dmaap-dr.props
+# https security required for publish request
+TlsEnabled = true
+
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/PublishServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/PublishServlet.java
index 35205aa9..949019d1 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/PublishServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/PublishServlet.java
@@ -45,6 +45,7 @@ import org.onap.dmaap.datarouter.provisioning.utils.Poker;
import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
import org.onap.dmaap.datarouter.provisioning.beans.IngressRoute;
import org.onap.dmaap.datarouter.provisioning.eelf.EelfMsgs;
+import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities;
/**
* This servlet handles redirects for the <publishURL> on the provisioning server, which is generated by the
@@ -158,9 +159,15 @@ public class PublishServlet extends BaseServlet {
} else {
// Generate new URL
String nextnode = getRedirectNode(feedid, req);
- nextnode = nextnode + ":" + ProvRunner.getProvProperties().getProperty(
- "org.onap.dmaap.datarouter.provserver.https.port", "8443");
- String newurl = "https://" + nextnode + "/publish" + req.getPathInfo();
+ if (Boolean.parseBoolean(ProvRunner.getProvProperties()
+ .getProperty("org.onap.dmaap.datarouter.provserver.tlsenabled", "true"))) {
+ nextnode = nextnode + ":" + ProvRunner.getProvProperties().getProperty(
+ "org.onap.dmaap.datarouter.nodeserver.https.port", "8443");
+ } else {
+ nextnode = nextnode + ":" + ProvRunner.getProvProperties().getProperty(
+ "org.onap.dmaap.datarouter.nodeserver.http.port", "8080");
+ }
+ String newurl = URLUtilities.getUrlSecurityOption() + nextnode + "/publish" + req.getPathInfo();
String qs = req.getQueryString();
if (qs != null) {
newurl += "?" + qs;
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java
index 2e000027..988b576f 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java
@@ -28,8 +28,8 @@ import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import java.net.InetAddress;
import java.net.UnknownHostException;
-
import org.onap.dmaap.datarouter.provisioning.BaseServlet;
+import org.onap.dmaap.datarouter.provisioning.ProvRunner;
/**
* Utility functions used to generate the different URLs used by the Data Router.
@@ -39,9 +39,7 @@ import org.onap.dmaap.datarouter.provisioning.BaseServlet;
*/
public class URLUtilities {
-
private static final EELFLogger utilsLogger = EELFManager.getInstance().getLogger("UtilsLog");
- private static final String HTTPS = "https://";
private static String otherPod;
private URLUtilities() {
@@ -54,7 +52,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generateFeedURL(int feedid) {
- return HTTPS + BaseServlet.getProvName() + "/feed/" + feedid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/feed/" + feedid;
}
/**
@@ -64,7 +62,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generatePublishURL(int feedid) {
- return HTTPS + BaseServlet.getProvName() + "/publish/" + feedid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/publish/" + feedid;
}
/**
@@ -74,7 +72,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generateSubscribeURL(int feedid) {
- return HTTPS + BaseServlet.getProvName() + "/subscribe/" + feedid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/subscribe/" + feedid;
}
/**
@@ -84,7 +82,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generateFeedLogURL(int feedid) {
- return HTTPS + BaseServlet.getProvName() + "/feedlog/" + feedid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/feedlog/" + feedid;
}
/**
@@ -94,7 +92,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generateSubscriptionURL(int subid) {
- return HTTPS + BaseServlet.getProvName() + "/subs/" + subid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/subs/" + subid;
}
/**
@@ -104,7 +102,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generateSubLogURL(int subid) {
- return HTTPS + BaseServlet.getProvName() + "/sublog/" + subid;
+ return getUrlSecurityOption() + BaseServlet.getProvName() + getAppropriateUrlPort() + "/sublog/" + subid;
}
/**
@@ -113,7 +111,7 @@ public class URLUtilities {
* @return the URL
*/
public static String generatePeerProvURL() {
- return HTTPS + getPeerPodName() + "/internal/prov";
+ return getUrlSecurityOption() + getPeerPodName() + getAppropriateUrlPort() + "/internal/prov";
}
/**
@@ -128,7 +126,7 @@ public class URLUtilities {
return "";
}
- return HTTPS + peerPodUrl + "/internal/drlogs/";
+ return getUrlSecurityOption() + peerPodUrl + getAppropriateUrlPort() + "/internal/drlogs/";
}
/**
@@ -154,4 +152,21 @@ public class URLUtilities {
return otherPod;
}
+ public static String getUrlSecurityOption() {
+ if (Boolean.parseBoolean(ProvRunner.getProvProperties()
+ .getProperty("org.onap.dmaap.datarouter.provserver.tlsenabled", "true"))) {
+ return "https://";
+ }
+ return "http://";
+ }
+
+ private static String getAppropriateUrlPort() {
+ if (Boolean.parseBoolean(ProvRunner.getProvProperties()
+ .getProperty("org.onap.dmaap.datarouter.provserver.tlsenabled", "true")))
+ return "";
+
+ return ":" + ProvRunner.getProvProperties()
+ .getProperty("org.onap.dmaap.datarouter.provserver.http.port", "8080");
+
+ }
}
diff --git a/datarouter-prov/src/main/resources/provserver.properties b/datarouter-prov/src/main/resources/provserver.properties
index ad9a19e3..642088ff 100755
--- a/datarouter-prov/src/main/resources/provserver.properties
+++ b/datarouter-prov/src/main/resources/provserver.properties
@@ -56,4 +56,8 @@ org.onap.dmaap.datarouter.provserver.aaf.feed.type = org.onap.dmaap-dr.fe
org.onap.dmaap.datarouter.provserver.aaf.sub.type = org.onap.dmaap-dr.sub
org.onap.dmaap.datarouter.provserver.aaf.instance = legacy
org.onap.dmaap.datarouter.provserver.aaf.action.publish = publish
-org.onap.dmaap.datarouter.provserver.aaf.action.subscribe = subscribe \ No newline at end of file
+org.onap.dmaap.datarouter.provserver.aaf.action.subscribe = subscribe
+
+org.onap.dmaap.datarouter.provserver.tlsenabled = true
+org.onap.dmaap.datarouter.nodeserver.https.port = 8443
+org.onap.dmaap.datarouter.nodeserver.http.port = 8080 \ No newline at end of file
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java
index d644df9a..1f4fd535 100755
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java
@@ -22,9 +22,27 @@
******************************************************************************/
package org.onap.dmaap.datarouter.provisioning;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.contains;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
@@ -45,25 +63,6 @@ import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.modules.junit4.PowerMockRunner;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.sql.SQLException;
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.contains;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
-
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"})
@@ -89,7 +88,7 @@ public class SubscriptionServletTest extends DrServletTestBase {
em = emf.createEntityManager();
System.setProperty(
"org.onap.dmaap.datarouter.provserver.properties",
- "src/test/resources/h2Database.properties");
+ "src/test/resources/h2DatabaseTlsDisabled.properties");
}
@AfterClass
@@ -157,14 +156,6 @@ public class SubscriptionServletTest extends DrServletTestBase {
}
@Test
- public void Given_Request_Is_HTTP_DELETE_And_AAF_CADI_Is_Enabled_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception {
- when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0");
- when(request.getPathInfo()).thenReturn("/2");
- subscriptionServlet.doDelete(request, response);
- verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access"));
- }
-
- @Test
public void Given_Request_Is_HTTP_DELETE_And_AAF_CADI_Is_Enabled_With_Permissions_Then_A_NO_CONTENT_Response_Is_Generated() throws Exception {
when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0");
when(request.getPathInfo()).thenReturn("/2");
diff --git a/datarouter-prov/src/test/resources/h2Database.properties b/datarouter-prov/src/test/resources/h2Database.properties
index 6957ae17..95968716 100755
--- a/datarouter-prov/src/test/resources/h2Database.properties
+++ b/datarouter-prov/src/test/resources/h2Database.properties
@@ -31,3 +31,6 @@ org.onap.dmaap.datarouter.provserver.accesslog.dir = unit-test-logs
org.onap.dmaap.datarouter.provserver.spooldir = src/test/resources
org.onap.dmaap.datarouter.provserver.dbscripts = src/test/resources
org.onap.dmaap.datarouter.provserver.localhost = 127.0.0.1
+org.onap.dmaap.datarouter.provserver.tlsenabled = true
+org.onap.dmaap.datarouter.nodeserver.https.port = 8443
+org.onap.dmaap.datarouter.nodeserver.http.port = 8080
diff --git a/datarouter-prov/src/test/resources/h2DatabaseTlsDisabled.properties b/datarouter-prov/src/test/resources/h2DatabaseTlsDisabled.properties
new file mode 100644
index 00000000..05ab3a47
--- /dev/null
+++ b/datarouter-prov/src/test/resources/h2DatabaseTlsDisabled.properties
@@ -0,0 +1,36 @@
+#-------------------------------------------------------------------------------
+# ============LICENSE_START==================================================
+# * org.onap.dmaap
+# * ===========================================================================
+# * Copyright ? 2017 AT&T Intellectual Property. All rights reserved.
+# * ===========================================================================
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# * ============LICENSE_END====================================================
+# *
+# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# *
+#-------------------------------------------------------------------------------
+
+# Database access
+org.onap.dmaap.datarouter.db.driver = org.h2.Driver
+org.onap.dmaap.datarouter.db.url = jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
+org.onap.dmaap.datarouter.provserver.isaddressauthenabled = true
+org.onap.dmaap.datarouter.provserver.cadi.enabled = true
+org.onap.dmaap.datarouter.provserver.https.relaxation = false
+org.onap.dmaap.datarouter.provserver.accesslog.dir = unit-test-logs
+org.onap.dmaap.datarouter.provserver.spooldir = src/test/resources
+org.onap.dmaap.datarouter.provserver.dbscripts = src/test/resources
+org.onap.dmaap.datarouter.provserver.localhost = 127.0.0.1
+org.onap.dmaap.datarouter.provserver.tlsenabled = false
+org.onap.dmaap.datarouter.nodeserver.https.port = 8443
+org.onap.dmaap.datarouter.nodeserver.http.port = 8080
diff --git a/docs/apis/data-router-api.rst b/docs/apis/data-router-api.rst
index 1604e62d..0b1c0cbe 100755
--- a/docs/apis/data-router-api.rst
+++ b/docs/apis/data-router-api.rst
@@ -44,12 +44,6 @@ Specifies HTTP Headers, such as Content-Type, that define the parameters of the
The HTTP Body contains the feed content when creating a feed.
-**HTTP Authorization**
-
-The user-id:password pair:
-
-* If AAF enabled: A valid AAF AppId to be authenticated and authorized by the AAF CADI framework.
-* If Non AAF : When publishing or retracting a file, a valid `EID Object`_ with publish permissions.
Create a Feed
-------------
@@ -62,43 +56,35 @@ Create a Feed
**Request Parameters:**
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| Field | Description | Param Type | Data Type | MaxLen | Set By | Updatable? | Required | Valid/Example Values |
-+======================+================================+============+==================+========+========+============+==========+===============================+
-| name | Feed name | Body | String | <=20 | Client | N | Y | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| version | Feed version | Body | String | <=20 | Client | N | Y | v1.0.0 |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| description | Feed description | Body | String | <=256 | Client | Y | N | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| business description | Business description | Body | String | <=256 | Client | Y | N | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| authorization | Information for authorizing | Body |`Auth Object`_ | | Client | Y | Y | |
-| | publishing requests | | | | | | | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| suspend | Set to true if the feed is in | Body | Boolean | | Client | Y | N | * true |
-| | the suspended state | | | | | | | * false (default) |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| group-id | Auth group for feed management | Body | Integer | | Client | Y | N | 0 (default) |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| aaf_instance | The instance passed to aaf | Body | String | <=256 | Client | N | N | legacy (default) |
-| | during permission checks | | | | | | | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| Content-Type | To specify type of message | Header | String | | Client | N | Y | application/vnd.dmaap-dr.feed |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| publisher | Publisher identity as passed | Header | String | <=8 | DR | N | Y | username |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | | | | |
-| | creation time | | | | | | | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| Authorization | The user / AppId to be | Header | String | | Client | N | Y if AAF | dcae@dcae.onap.org:{password} |
-| | authorized by the AAF CADI | | | | | | enabled | |
-| | framework | | | | | | | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| X-EXCLUDE-AAF | To determine if the feed to | Header | Boolean | | Client | N | Y if AAF | * true (for legacy feed) |
-| | create is legacy or AAF | | | | | | enabled | * false (for AAF feed) |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
-| Links | URLs related to this feed | Body |`Feed Links Obj`_ | | DR | N | N | |
-+----------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| Field | Description | Param Type | Data Type | MaxLen | Set By | Updatable? | Required | Valid/Example Values |
++=========================+================================+============+==================+========+========+============+==========+===============================+
+| name | Feed name | Body | String | <=20 | Client | N | Y | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| version | Feed version | Body | String | <=20 | Client | N | Y | v1.0.0 |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| description | Feed description | Body | String | <=256 | Client | Y | N | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| business description | Business description | Body | String | <=256 | Client | Y | N | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| authorization | Information for authorizing | Body |`Auth Object`_ | | Client | Y | Y | |
+| | publishing requests | | | | | | | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| suspend | Set to true if the feed is in | Body | Boolean | | Client | Y | N | * true |
+| | the suspended state | | | | | | | * false (default) |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| group-id | Auth group for feed management | Body | Integer | | Client | Y | N | 0 (default) |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| Content-Type | To specify type of message | Header | String | | Client | N | Y | application/vnd.dmaap-dr.feed |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| Authorization | The user / AppId to be | Header | String | | Client | N | Y | Basic <credentials> |
+| | authorized | | | | | | | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | DR | N | Y | username |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | | | | |
+| | creation time | | | | | | | |
++-------------------------+--------------------------------+------------+------------------+--------+--------+------------+----------+-------------------------------+
+
**Response Codes**
@@ -158,17 +144,12 @@ Create a Feed
{
"password": "dradmin",
"id": "dradmin"
- },
- {
- "password": "demo123456!",
- "id": "onap"
}
]
},
"name": "ONAP Data Feed",
"business_description": "",
- "aaf_instance": "legacy",
- "publisher": "dradmin",
+ "publisher": "{user}",
"links": {
"subscribe": "https://dmaap-dr-prov/subscribe/1",
"log": "https://dmaap-dr-prov/feedlog/1",
@@ -191,35 +172,34 @@ Update a Feed
**Request Parameters:**
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+========================+=================================+=============+===============+============+=============+
-| name | Feed name | Body | String | <=20 | Y |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| description | Feed description | Body | String | <=256 | N |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| business description | Business description | Body | String | <=256 | N |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| authorization | Information for authorizing | Body |`Auth Object`_ | | Y |
-| | publishing requests | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| suspend | Set to true if the feed is in | Body | Boolean | | N |
-| | the suspended state | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| group-id | Auth group for feed management | Body | Integer | | N |
-| | | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Content-type | To specify type of message | Header | String | | Y |
-| | (feed,subscriber,publisher) | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| publisher | Publisher identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+=============+===============+============+=============+
+| name | Feed name | Body | String | <=20 | Y |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| description | Feed description | Body | String | <=256 | N |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| business description | Business description | Body | String | <=256 | N |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| authorization | Information for authorizing | Body |`Auth Object`_ | | Y |
+| | publishing requests | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| suspend | Set to true if the feed is in | Body | Boolean | | N |
+| | the suspended state | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| group-id | Auth group for feed management | Body | Integer | | N |
+| | | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Content-type | To specify type of message | Header | String | | Y |
+| | (feed,subscriber,publisher) | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
**Response Codes**
@@ -295,8 +275,7 @@ Update a Feed
},
"name": "ONAP Data Feed1",
"business_description": "Updated ONAP Feed",
- "aaf_instance": "legacy",
- "publisher": "dradmin",
+ "publisher": "{user}",
"links": {
"subscribe": "https://dmaap-dr-prov/subscribe/1",
"log": "https://dmaap-dr-prov/feedlog/1",
@@ -319,17 +298,16 @@ Get a Feed
**Request Parameters:**
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+========================+=================================+=============+===============+============+=============+
-| publisher | Publisher identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+=============+===============+============+=============+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
**Response Codes**
@@ -367,17 +345,12 @@ Get a Feed
{
"password": "dradmin",
"id": "dradmin"
- },
- {
- "password": "demo123456!",
- "id": "onap"
}
]
},
"name": "ONAP Data Feed",
"business_description": "Updated ONAP Feed",
- "aaf_instance": "legacy",
- "publisher": "dradmin",
+ "publisher": "{user}",
"links": {
"subscribe": "https://dmaap-dr-prov/subscribe/1",
"log": "https://dmaap-dr-prov/feedlog/1",
@@ -399,17 +372,16 @@ Delete a Feed
**Request Parameters:**
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+========================+=================================+=============+===============+============+=============+
-| publisher | Publisher identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+------------------------+---------------------------------+-------------+---------------+------------+-------------+
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+=============+===============+============+=============+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
**Response Codes**
@@ -438,51 +410,40 @@ Subscribe to Feed
**Request Parameters:**
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| Field | Description | Param Type | Data Type | MaxLen | Set By | Updatable? | Required | Valid/Example Values |
-+=================+=================================+===============+=================+========+========+============+==========+======================================+
-| feedId | ID for the feed you are | Path | String | | Client | N | Y | 1 |
-| | subscribing to | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| delivery | Address and credentials for | Body | `Del Object`_ | | Client | Y | Y | |
-| | delivery | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| follow_redirect | Set to true if feed redirection | Body | Boolean | | Client | Y | N | * true |
-| | is expected | | | | | | | * false (default) |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| metadata_only | Set to true if subscription is | Body | Boolean | | Client | Y | Y | * true |
-| | to receive per-file metadata | | | | | | | * false |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| suspend | Set to true if the subscription | Body | Boolean | | Client | Y | N | * true |
-| | is in the suspended state | | | | | | | * false (default) |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| decompress | Set to true if the data is to | Body | Boolean | | Client | Y | N | * true |
-| | be decompressed for subscriber | | | | | | | * false (default) |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| group-id | Auth group for sub management | Body | Integer | | Client | Y | Y | 22 |
-| | | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| aaf_instance | The instance passed to aaf | Body | String | <=256 | Client | N | N | * legacy (default) |
-| | during permission checks | | | | | | | |
-| | | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| Content-type | To specify type of message | Header | String | | Client | N | Y | application/vnd.dmaap-dr.subscription|
-| | (feed,subscriber,publisher) | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| subscriber | Subscriber identity as passed | Header | String | <=8 | DR | N | Y | username |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | | | | |
-| | creation time | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| Authorization | The user / AppId to be | Header | String | | Client | N | Y if AAF | dcae@dcae.onap.org:{password} |
-| | authorized by the AAF CADI | | | | | | enabled | |
-| | framework | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| X-EXCLUDE-AAF | To determine if the feed to | Header | Boolean | | Client | N | Y if AAF | * true (for legacy feed) |
-| | create is legacy or AAF | | | | | | enabled | * false (for AAF feed) |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
-| Links | URLs related to this | Body |`Sub Links Obj`_ | | DR | N | N | |
-| | subscription | | | | | | | |
-+-----------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| Field | Description | Param Type | Data Type | MaxLen | Set By | Updatable? | Required | Valid/Example Values |
++=========================+=================================+===============+=================+========+========+============+==========+======================================+
+| feedId | ID for the feed you are | Path | String | | Client | N | Y | 1 |
+| | subscribing to | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| delivery | Address and credentials for | Body | `Del Object`_ | | Client | Y | Y | |
+| | delivery | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| follow_redirect | Set to true if feed redirection | Body | Boolean | | Client | Y | N | * true |
+| | is expected | | | | | | | * false (default) |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| metadata_only | Set to true if subscription is | Body | Boolean | | Client | Y | Y | * true |
+| | to receive per-file metadata | | | | | | | * false |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| suspend | Set to true if the subscription | Body | Boolean | | Client | Y | N | * true |
+| | is in the suspended state | | | | | | | * false (default) |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| decompress | Set to true if the data is to | Body | Boolean | | Client | Y | N | * true |
+| | be decompressed for subscriber | | | | | | | * false (default) |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| group-id | Auth group for sub management | Body | Integer | | Client | Y | Y | 22 |
+| | | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| Content-type | To specify type of message | Header | String | | Client | N | Y | application/vnd.dmaap-dr.subscription|
+| | (feed,subscriber,publisher) | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| Authorization | The user / AppId to be | Header | String | | Client | N | Y | Basic <credentials> |
+| | authorized | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | DR | N | Y | username |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | | | | |
+| | creation time | | | | | | | |
++-------------------------+---------------------------------+---------------+-----------------+--------+--------+------------+----------+--------------------------------------+
**Response Codes**
@@ -535,12 +496,11 @@ Subscribe to Feed
"user": "LOGIN",
"url": "http://dmaap-dr-subscriber:7070/"
},
- "subscriber": "onap",
+ "subscriber": "{user}",
"groupid": 1,
"metadataOnly": false,
"follow_redirect": true,
"decompress": true,
- "aaf_instance": "legacy",
"links": {
"feed": "https://dmaap-dr-prov/feed/1",
"log": "https://dmaap-dr-prov/sublog/1",
@@ -563,44 +523,40 @@ Update subscription
**Request Parameters:**
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+=================+=================================+==============+===============+========+=============+
-| subId | ID for the subscription you are | Path | String | | Y |
-| | updating | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| delivery | Address and credentials for | Body | `Del Object`_ | | Y |
-| | delivery | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| follow_redirect | Set to true if feed redirection | Body | Boolean | | N |
-| | is expected | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| metadata_only | Set to true if subscription is | Body | Boolean | | Y |
-| | to receive per-file metadata | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| suspend | Set to true if the subscription | Body | Boolean | | N |
-| | is in the suspended state | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| decompress | Set to true if the data is to | Body | Boolean | | N |
-| | be decompressed for subscriber | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| group-id | Auth group for sub management | Body | Integer | | Y |
-| | | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Content-type | To specify type of message | Header | String | | Y |
-| | (feed,subscriber,publisher) | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| subscriber | Subscriber identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| X-EXCLUDE-AAF | To determine if the feed to | Header | Boolean | | Y if AAF |
-| | create is legacy or AAF | | | | enabled |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+==============+===============+========+=============+
+| subId | ID for the subscription you are | Path | String | | Y |
+| | updating | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| delivery | Address and credentials for | Body | `Del Object`_ | | Y |
+| | delivery | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| follow_redirect | Set to true if feed redirection | Body | Boolean | | N |
+| | is expected | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| metadata_only | Set to true if subscription is | Body | Boolean | | Y |
+| | to receive per-file metadata | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| suspend | Set to true if the subscription | Body | Boolean | | N |
+| | is in the suspended state | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| decompress | Set to true if the data is to | Body | Boolean | | N |
+| | be decompressed for subscriber | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| group-id | Auth group for sub management | Body | Integer | | Y |
+| | | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| Content-type | To specify type of message | Header | String | | Y |
+| | (feed,subscriber,publisher) | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Publisher identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+--------------+---------------+--------+-------------+
**Response Codes**
@@ -652,12 +608,11 @@ Update subscription
"user": "NEW_LOGIN",
"url": "http://dmaap-dr-subscriber:7070/"
},
- "subscriber": "onap",
+ "subscriber": "{user}",
"groupid": 67,
"metadataOnly": true,
"follow_redirect": false,
"decompress": false,
- "aaf_instance": "legacy",
"links": {
"feed": "https://dmaap-dr-prov/feed/1",
"log": "https://dmaap-dr-prov/sublog/1",
@@ -680,17 +635,17 @@ Get a Subscription
**Request Parameters:**
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+=================+=================================+==============+===============+========+=============+
-| subscriber | Subscriber identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+=============+===============+============+=============+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Subscriber identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+
**Response Codes**
@@ -721,13 +676,12 @@ Get a Subscription
"user": "NEW_LOGIN",
"url": "http://dmaap-dr-subscriber:7070/"
},
- "subscriber": "onap",
+ "subscriber": "{user}",
"groupid": 67,
"metadataOnly": true,
"privilegedSubscriber": false,
"follow_redirect": false,
"decompress": false,
- "aaf_instance": "legacy",
"links": {
"feed": "https://dmaap-dr-prov/feed/2",
"log": "https://dmaap-dr-prov/sublog/6",
@@ -749,17 +703,16 @@ Delete a subscription
**Request Parameters:**
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Field | Description | Param Type | Data Type | MaxLen | Required |
-+=================+=================================+==============+===============+========+=============+
-| subscriber | Subscriber identity as passed | Header | String | <=8 | Y |
-| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
-| | creation time | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
-| Authorization | The user / AppId to be | Header | String | | Y if AAF |
-| | authorized by the AAF CADI | | | | enabled |
-| | framework | | | | |
-+-----------------+---------------------------------+--------------+---------------+--------+-------------+
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| Field | Description | Param Type | Data Type | MaxLen | Required |
++=========================+=================================+=============+===============+============+=============+
+| Authorization | The user / AppId to be | Header | String | | Y |
+| | authorized | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
+| X-DMAAP-DR-ON-BEHALF-OF | Subscriber identity as passed | Header | String | <=8 | Y |
+| | in X-DMAAP-DR-ON-BEHALF-OF at | | | | |
+| | creation time | | | | |
++-------------------------+---------------------------------+-------------+---------------+------------+-------------+
**Response Codes**
@@ -809,10 +762,8 @@ Publish to Feed
| | * Lowercase boolean | | | | | |
| | * null | | | | | |
+------------------------+---------------------------------+------------------+------------+--------------+-------------+-------------------------------------------+
-| Authorization | An `EID Object`_ with publish | Header | String | | Y | * (legacy Feed) dradmin:dradmin |
-| | permissions. | | | | | * (AAF Feed) dcae@dcae.onap.org:{password}|
-| | If AAF CADI is enabled, use a | | | | | |
-| | valid AAF user/AppId instead. | | | | | |
+| Authorization | An `EID Object`_ with publish | Header | String | | Y | * dradmin:dradmin |
+| | permissions. | | | | | |
+------------------------+---------------------------------+------------------+------------+--------------+-------------+-------------------------------------------+
**Response Codes**
@@ -846,10 +797,8 @@ Delete/Retract a Published file
+-----------------+---------------------------------+--------------+---------------+------------+-------------------------------------------+
| Field | Description | Param Type | Data Type | Required | Valid/Example Values |
+=================+=================================+==============+===============+============+===========================================+
-| Authorization | An `EID Object`_ with publish | Header | String | Y | * (legacy Feed) dradmin:dradmin |
-| | permissions. | | | | * (AAF Feed) dcae@dcae.onap.org:{password}|
-| | If AAF CADI is enabled, use a | | | | |
-| | valid AAF user/AppId instead. | | | | |
+| Authorization | An `EID Object`_ with publish | Header | String | Y | * dradmin:dradmin |
+| | permissions. | | | | |
+-----------------+---------------------------------+--------------+---------------+------------+-------------------------------------------+
| feedId | ID of the feed that was | Path | String | Y | |
| | publishing to | | | | |
diff --git a/docs/apis/drAPI1.json b/docs/apis/drAPI1.json
index 67392a2b..7809ca4d 100644
--- a/docs/apis/drAPI1.json
+++ b/docs/apis/drAPI1.json
@@ -766,10 +766,6 @@
"type": "string",
"example": ""
},
- "aaf_instance": {
- "type": "string",
- "example": "legacy"
- },
"publisher": {
"type": "string",
"example": "dradmin"
diff --git a/docs/architecture.rst b/docs/architecture.rst
index cae6bca0..7310573b 100644
--- a/docs/architecture.rst
+++ b/docs/architecture.rst
@@ -10,13 +10,6 @@ Capabilities
The DMaaP Data Router (DR) provisioning API is an HTTPS-based, REST-like API for creating and managing
DR feeds and subscriptions, which provides a pub/sub architectural model for the transfer of data.
-The DR API also supports `AAF CADI authorization <https://docs.onap.org/en/latest/submodules/aaf/authz.git/docs/sections/architecture/cadi.html#authorization>`_.
-
-To use this feature, the API client must provide a valid AAF AppID / MechID with each request.
-To enable this feature, see the :ref:`configuration` section.
-
-.. note:: In future releases, AAF CADI auth will be enabled by default.
-
Usage Scenarios
---------------
Typically, DR pub clients request the provisioning of a new DR feed.
diff --git a/docs/conf.py b/docs/conf.py
index 8f01b443..bd960055 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,103 +1,9 @@
from docs_conf.conf import *
-branch = 'latest'
-doc_url = 'https://docs.onap.org/projects'
master_doc = 'index'
intersphinx_mapping = {}
-# Latest (change to branch)
-intersphinx_mapping['onap-aai-aai-common'] = ('{}/onap-aai-aai-common/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-aai-sparky-be'] = ('{}/onap-aai-sparky-be/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-cds'] = ('{}/onap-ccsdk-cds/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-features'] = ('{}/onap-ccsdk-features/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-distribution'] = ('{}/onap-ccsdk-distribution/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-oran'] = ('{}/onap-ccsdk-oran/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-cli'] = ('{}/onap-cli/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-cps'] = ('{}/onap-cps/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-dcaegen2'] = ('{}/onap-dcaegen2/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-dmaap-messagerouter-messageservice'] = (
- '{}/onap-dmaap-messagerouter-messageservice/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-dmaap-buscontroller'] = ('{}/onap-dmaap-buscontroller/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-dmaap-datarouter'] = ('{}/onap-dmaap-datarouter/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-dmaap-dbcapi'] = ('{}/onap-dmaap-dbcapi/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-externalapi-nbi'] = ('{}/onap-externalapi-nbi/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-holmes-engine-management'] = (
- '{}/onap-holmes-engine-management/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-holmes-rule-management'] = (
- '{}/onap-holmes-rule-management/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-integration'] = ('{}/onap-integration/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-modeling-etsicatalog'] = ('{}/onap-modeling-etsicatalog/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-modeling-modelspec'] = ('{}/onap-modeling-modelspec/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-multicloud-framework'] = ('{}/onap-multicloud-framework/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-msb-apigateway'] = ('{}/onap-msb-apigateway/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-oom'] = ('{}/onap-oom/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-oom-offline-installer'] = ('{}/onap-oom-offline-installer/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-oom-platform-cert-service'] = (
- '{}/onap-oom-platform-cert-service/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-optf-cmso'] = ('{}/onap-optf-cmso/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-optf-osdf'] = ('{}/onap-optf-osdf/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-optf-has'] = ('{}/onap-optf-has/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-policy-clamp'] = ('{}/onap-policy-clamp/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-policy-parent'] = ('{}/onap-policy-parent/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdc'] = ('{}/onap-sdc/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdnc-oam'] = ('{}/onap-sdnc-oam/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-so'] = ('{}/onap-so/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-usecase-ui'] = ('{}/onap-usecase-ui/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vfc-nfvo-lcm'] = ('{}/onap-vfc-nfvo-lcm/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vid'] = ('{}/onap-vid/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vnfrqts-guidelines'] = ('{}/onap-vnfrqts-guidelines/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vnfrqts-requirements'] = ('{}/onap-vnfrqts-requirements/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vnfrqts-testcases'] = ('{}/onap-vnfrqts-testcases/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vnfrqts-usecases'] = ('{}/onap-vnfrqts-usecases/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vnfsdk-model'] = ('{}/onap-vnfsdk-model/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vvp-documentation'] = ('{}/onap-vvp-documentation/en/%s'.format(doc_url) % branch, None)
-
-# Guilin
-branch = 'guilin'
-intersphinx_mapping['onap-portal'] = ('{}/onap-portal/en/%s'.format(doc_url) % branch, None)
-
-# Frankfurt
-branch = 'frankfurt'
-intersphinx_mapping['onap-appc'] = ('{}/onap-appc/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-appc-deployment'] = ('{}/onap-appc-deployment/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-music'] = ('{}/onap-music/en/%s'.format(doc_url) % branch, None)
-
-# Latest
-branch = 'latest'
-intersphinx_mapping['onap-aaf-authz'] = ('{}/onap-aaf-authz/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-aaf-sms'] = ('{}/onap-aaf-sms/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-aai-event-client'] = ('{}/onap-aai-event-client/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-aai-esr-gui'] = ('{}/onap-aai-esr-gui/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-aai-esr-server'] = ('{}/onap-aai-esr-server/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-apps'] = ('{}/onap-ccsdk-apps/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-dashboard'] = ('{}/onap-ccsdk-dashboard/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-ccsdk-platform-plugins'] = (
- '{}/onap-ccsdk-platform-plugins/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-logging-analytics'] = ('{}/onap-logging-analytics/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-logging-analytics-pomba-pomba-audit-common'] = (
- '{}/onap-logging-analytics-pomba-pomba-audit-common/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-modeling-toscaparsers'] = (
- '{}/onap-modeling-toscaparsers/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-msb-discovery'] = ('{}/onap-msb-discovery/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-msb-java-sdk'] = ('{}/onap-msb-java-sdk/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-msb-swagger-sdk'] = ('{}/onap-msb-swagger-sdk/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-multicloud-azure'] = ('{}/onap-multicloud-azure/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-multicloud-k8s'] = ('{}/onap-multicloud-k8s/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-music-distributed-kv-store'] = (
- '{}/onap-music-distributed-kv-store/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-oparent-cia'] = ('{}/onap-oparent-cia/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-osa'] = ('{}/onap-osa/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdc-sdc-distribution-client'] = (
- '{}/onap-sdc-sdc-distribution-client/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdc-sdc-workflow-designer'] = (
- '{}/onap-sdc-sdc-workflow-designer/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdc-sdc-tosca'] = ('{}/onap-sdc-sdc-tosca/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-sdc-sdc-docker-base'] = ('{}/onap-sdc-sdc-docker-base/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-so-libs'] = ('{}/onap-so-libs/en/%s'.format(doc_url) % branch, None)
-intersphinx_mapping['onap-vfc-nfvo-driver-vnfm-svnfm'] = (
- '{}/onap-vfc-nfvo-driver-vnfm-svnfm/en/%s'.format(doc_url) % branch, None)
-
linkcheck_ignore = [
'http://localhost',
'https://example.com',
diff --git a/docs/configuration.rst b/docs/configuration.rst
index f7fa4bcf..b55d0730 100644
--- a/docs/configuration.rst
+++ b/docs/configuration.rst
@@ -6,38 +6,37 @@
Configuration
=============
-Configuration properties for both Data Router Provisioning server and Data Router Node server should remain as default values.
+Most configuration properties for both Data Router Provisioning server and Data Router Node server
+should remain as default values.
-The only exception to this, is when enabling the AAF CADI framework to authorize the DR provisioning requests.
+An exception to this is when a user wants to run over HTTP (non TLS).
-.. note:: The AAF CADI filtering feature is disabled by default. When AAF CADI auth is enabled, all DR API calls must provide an AAF AppID to access the relevant API endpoint.
+For DR Provisioning server config, edit the following props in the provserver.properties file.
-To enable DR AAF CADI authorization, the following steps are required:
+.. code-block:: bash
-DR CADI Prerequisites:
- * AAF deployment
+ org.onap.dmaap.datarouter.provserver.tlsenabled = false
-Update the following properties at deployment time.
+and ensure aaf cadi is disabled also
+.. code-block:: bash
-**DMaaP DR Prov AAF properties**
+ org.onap.dmaap.datarouter.provserver.cadi.enabled = false
-::
- # AAF config
- org.onap.dmaap.datarouter.provserver.cadi.enabled = true
+For DR Node server config, edit the following props in the node.properties file to target http.
- # AAF URL to connect to AAF server
- org.onap.dmaap.datarouter.provserver.cadi.aaf.url = https://<RELEVANT_AAF_URL>:8095
-
-
-**DMaaP DR Node AAF properties**
-
-::
-
- # AAF URL to connect to AAF server
- AafUrl = https://<RELEVANT_AAF_URL>:8095
-
- # AAF CADI enabled flag
- CadiEnabled = true
+.. code-block:: bash
+ # URL to retrieve dynamic configuration
+ ProvisioningURL = http://dmaap-dr-prov:8080/internal/prov
+ #
+ # URL to upload PUB/DEL/EXP logs
+ LogUploadURL = http://dmaap-dr-prov:8080/internal/logs
+ ...
+ #
+ # AAF CADI enabled flag
+ CadiEnabled = false
+ #
+ # Enable to run over http or https (default true|https)
+ TlsEnabled = false
diff --git a/docs/images/dr_bc_prov.png b/docs/images/dr_bc_prov.png
index 9e2f7e47..932c6556 100644
--- a/docs/images/dr_bc_prov.png
+++ b/docs/images/dr_bc_prov.png
Binary files differ
diff --git a/docs/images/dr_pub_flow.png b/docs/images/dr_pub_flow.png
index 83af9bd2..e3fc0364 100644
--- a/docs/images/dr_pub_flow.png
+++ b/docs/images/dr_pub_flow.png
Binary files differ
diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt
index 74a3b7a3..3b3441a8 100644
--- a/docs/requirements-docs.txt
+++ b/docs/requirements-docs.txt
@@ -1 +1,3 @@
lfdocs-conf
+sphinx>=4.2.0 # BSD
+sphinx-rtd-theme>=1.0.0 # MIT
diff --git a/pom.xml b/pom.xml
index 5d1c178c..ec0aedfc 100755
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
</parent>
<properties>
<!--revision must also be set in the version.properties file at project root-->
- <revision>2.1.10-SNAPSHOT</revision>
+ <revision>2.1.11-SNAPSHOT</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
diff --git a/releases/2.1.11-container.yaml b/releases/2.1.11-container.yaml
new file mode 100644
index 00000000..4ed856d2
--- /dev/null
+++ b/releases/2.1.11-container.yaml
@@ -0,0 +1,12 @@
+distribution_type: 'container'
+container_release_tag: '2.1.11'
+project: 'dmaap-datarouter'
+log-dir: 'dmaap-datarouter-maven-docker-stage-master/1018'
+ref: e49f6d600a6bdc828a2cd8a8e04b1182586a5e19
+containers:
+ - name: dmaap/datarouter-prov
+ version: 2.1.11-STAGING-20220405T154924Z
+ - name: dmaap/datarouter-node
+ version: 2.1.11-STAGING-20220405T154924Z
+ - name: dmaap/datarouter-subscriber
+ version: 2.1.11-STAGING-20220405T154924Z \ No newline at end of file
diff --git a/version.properties b/version.properties
index cd2abb72..d0a38284 100644
--- a/version.properties
+++ b/version.properties
@@ -27,7 +27,7 @@
major=2
minor=1
-patch=10
+patch=11
base_version=${major}.${minor}.${patch}