This is an automated email from the ASF dual-hosted git repository.
smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 5bea67f KNOX-2188 - Handling discovery details via advanced
configuration (#240)
5bea67f is described below
commit 5bea67f7d6fbab6cf5ec6e658c46dfbe3fa222d5
Author: Sandor Molnar <[email protected]>
AuthorDate: Wed Jan 22 07:28:51 2020 +0100
KNOX-2188 - Handling discovery details via advanced configuration (#240)
---
.../ClouderaManagerDescriptorParser.java | 16 +++++++++++++
.../advanced/AdvancedServiceDiscoveryConfig.java | 12 +++++++++-
.../ClouderaManagerDescriptorParserTest.java | 18 +++++++++++++++
.../testDescriptorWithoutDiscoveryDetails.xml | 27 ++++++++++++++++++++++
4 files changed, 72 insertions(+), 1 deletion(-)
diff --git
a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
index 2986136..e4ca4d4 100644
---
a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
+++
b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
@@ -23,6 +23,7 @@ import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.knox.gateway.ClouderaManagerIntegrationMessages;
import org.apache.knox.gateway.i18n.messages.MessagesFactory;
@@ -121,6 +122,7 @@ public class ClouderaManagerDescriptorParser implements
AdvancedServiceDiscovery
}
}
if
(advancedServiceDiscoveryConfig.getExpectedTopologyNames().contains(name)) {
+ setDiscoveryDetails(descriptor);
addEnabledServices(descriptor);
}
return descriptor;
@@ -130,6 +132,20 @@ public class ClouderaManagerDescriptorParser implements
AdvancedServiceDiscovery
}
}
+ private void setDiscoveryDetails(SimpleDescriptorImpl descriptor) {
+ if (StringUtils.isBlank(descriptor.getDiscoveryAddress())) {
+
descriptor.setDiscoveryAddress(advancedServiceDiscoveryConfig.getDiscoveryAddress());
+ }
+
+ if (StringUtils.isBlank(descriptor.getCluster())) {
+
descriptor.setCluster(advancedServiceDiscoveryConfig.getDiscoveryCluster());
+ }
+
+ if (StringUtils.isBlank(descriptor.getDiscoveryType())) {
+ descriptor.setDiscoveryType("ClouderaManager");
+ }
+ }
+
/*
* Adds any enabled service which is not listed in the CM descriptor
*/
diff --git
a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
index 11fc56e..17308cc 100644
---
a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
+++
b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
@@ -32,6 +32,8 @@ public class AdvancedServiceDiscoveryConfig {
public static final String PARAMETER_NAME_PREFIX_ENABLED_SERVICE =
"gateway.auto.discovery.enabled.";
public static final String PARAMETER_NAME_EXPECTED_TOPOLOGIES =
"gateway.auto.discovery.expected.topology.names";
+ public static final String PARAMETER_NAME_DISCOVERY_ADDRESS =
"gateway.auto.discovery.address";
+ public static final String PARAMETER_NAME_DISCOVERY_CLUSTER =
"gateway.auto.discovery.cluster";
private final Properties properties;
@@ -53,7 +55,15 @@ public class AdvancedServiceDiscoveryConfig {
}
public Set<String> getExpectedTopologyNames() {
- return
Stream.of(properties.getProperty(PARAMETER_NAME_EXPECTED_TOPOLOGIES,
"").split(",")).map(expectedToplogyName ->
expectedToplogyName.trim()).collect(toSet());
+ return Stream.of(getPropertyIgnoreCase(PARAMETER_NAME_EXPECTED_TOPOLOGIES,
"").split(",")).map(expectedToplogyName ->
expectedToplogyName.trim()).collect(toSet());
+ }
+
+ public String getDiscoveryAddress() {
+ return getPropertyIgnoreCase(PARAMETER_NAME_DISCOVERY_ADDRESS, "");
+ }
+
+ public String getDiscoveryCluster() {
+ return getPropertyIgnoreCase(PARAMETER_NAME_DISCOVERY_CLUSTER, "");
}
private String getPropertyIgnoreCase(String propertyName, String
defaultValue) {
diff --git
a/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
b/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
index 023d7be..fa760bf 100644
---
a/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
+++
b/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
@@ -106,6 +106,24 @@ public class ClouderaManagerDescriptorParserTest {
assertNull(descriptor.getService("OOZIE"));
}
+ @Test
+ public void testSettingDiscoveryDetails() throws Exception {
+ final String address = "http://myCmHost:7180";
+ final String cluster = "My Test Cluster";
+ final String testConfigPath =
this.getClass().getClassLoader().getResource("testDescriptorWithoutDiscoveryDetails.xml").getPath();
+ final Properties advancedConfiguration = new Properties();
+
advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_EXPECTED_TOPOLOGIES,
"topology1");
+
advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_DISCOVERY_ADDRESS,
address);
+
advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_DISCOVERY_CLUSTER,
cluster);
+
cmDescriptorParser.onAdvancedServiceDiscoveryConfigurationChange(advancedConfiguration);
+ final Set<SimpleDescriptor> descriptors =
cmDescriptorParser.parse(testConfigPath);
+ final Iterator<SimpleDescriptor> descriptorsIterator =
descriptors.iterator();
+ SimpleDescriptor descriptor = descriptorsIterator.next();
+ assertEquals(address, descriptor.getDiscoveryAddress());
+ assertEquals(cluster, descriptor.getCluster());
+ assertEquals("ClouderaManager", descriptor.getDiscoveryType());
+ }
+
private void validateTopology1(SimpleDescriptor descriptor) {
assertEquals("topology1", descriptor.getName());
assertEquals("ClouderaManager", descriptor.getDiscoveryType());
diff --git
a/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml
b/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml
new file mode 100644
index 0000000..2773d35
--- /dev/null
+++
b/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+<configuration>
+ <property>
+ <name>topology1</name>
+ <value>
+ providerConfigRef=topology1-provider;
+ app:knoxauth:param1.name=param1.value;
+ app:admin-ui;
+ HIVE:url=http://localhost:123;
+ </value>
+ </property>
+</configuration>
\ No newline at end of file