KNOX-1970 - CM discovery - Add Impala HS2 to auto discovery (#223)

diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/AbstractServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/AbstractServiceModelGenerator.java
index 5d77fcd..9c9ead7 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/AbstractServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/AbstractServiceModelGenerator.java
@@ -19,6 +19,8 @@
 import com.cloudera.api.swagger.client.ApiClient;
 import com.cloudera.api.swagger.model.ApiConfig;
 import com.cloudera.api.swagger.model.ApiConfigList;
+import com.cloudera.api.swagger.model.ApiRole;
+import com.cloudera.api.swagger.model.ApiService;
 import com.cloudera.api.swagger.model.ApiServiceConfig;
 import org.apache.knox.gateway.topology.discovery.cm.DiscoveryApiClient;
 import org.apache.knox.gateway.topology.discovery.cm.ServiceModel;
@@ -78,4 +80,9 @@
     return new ServiceModel(getModelType(), getService(), getServiceType(), getRoleType(), url);
   }
 
+  @Override
+  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
+    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
+  }
+
 }
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasAPIServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasAPIServiceModelGenerator.java
index d4ae063..f156593 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasAPIServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasAPIServiceModelGenerator.java
@@ -19,7 +19,7 @@
 import org.apache.knox.gateway.topology.discovery.cm.ServiceModel;
 
 public class AtlasAPIServiceModelGenerator extends AtlasServiceModelGenerator {
-  private static final String SERVICE = "ATLAS-API";
+  public static final String SERVICE = "ATLAS-API";
 
   @Override
   public String getService() {
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasServiceModelGenerator.java
index 5809943..a33863e 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/atlas/AtlasServiceModelGenerator.java
@@ -27,9 +27,9 @@
 import java.util.Locale;
 
 public class AtlasServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE = "ATLAS";
-  private static final String SERVICE_TYPE = "ATLAS";
-  private static final String ROLE_TYPE = "ATLAS_SERVER";
+  public static final String SERVICE = "ATLAS";
+  public static final String SERVICE_TYPE = "ATLAS";
+  public static final String ROLE_TYPE = "ATLAS_SERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/HBaseUIServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/HBaseUIServiceModelGenerator.java
index 55e631f..00c7854 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/HBaseUIServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/HBaseUIServiceModelGenerator.java
@@ -27,9 +27,9 @@
 
 public class HBaseUIServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE = "HBASEUI";
-  private static final String SERVICE_TYPE = "HBASE";
-  private static final String ROLE_TYPE = "MASTER";
+  public static final String SERVICE      = "HBASEUI";
+  public static final String SERVICE_TYPE = "HBASE";
+  public static final String ROLE_TYPE    = "MASTER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/WebHBaseServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/WebHBaseServiceModelGenerator.java
index f38d7a5..c76e9a1 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/WebHBaseServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hbase/WebHBaseServiceModelGenerator.java
@@ -27,9 +27,9 @@
 
 public class WebHBaseServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE = "WEBHBASE";
-  private static final String SERVICE_TYPE = "HBASE";
-  private static final String ROLE_TYPE = "HBASERESTSERVER";
+  public static final String SERVICE      = "WEBHBASE";
+  public static final String SERVICE_TYPE = "HBASE";
+  public static final String ROLE_TYPE    = "HBASERESTSERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hdfs/NameNodeServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hdfs/NameNodeServiceModelGenerator.java
index 075c94e..1486901 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hdfs/NameNodeServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hdfs/NameNodeServiceModelGenerator.java
@@ -27,9 +27,9 @@
 import java.util.Locale;
 
 public class NameNodeServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE      = "NAMENODE";
-  private static final String SERVICE_TYPE = "HDFS";
-  private static final String ROLE_TYPE    = "NAMENODE";
+  public static final String SERVICE      = "NAMENODE";
+  public static final String SERVICE_TYPE = "HDFS";
+  public static final String ROLE_TYPE    = "NAMENODE";
 
   @Override
   public String getServiceType() {
@@ -52,14 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService       service,
-                         ApiServiceConfig serviceConfig,
-                         ApiRole          role,
-                         ApiConfigList    roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveOnTezServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveOnTezServiceModelGenerator.java
index 15b4f8e..a5dbe06 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveOnTezServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveOnTezServiceModelGenerator.java
@@ -18,7 +18,7 @@
 
 public class HiveOnTezServiceModelGenerator extends HiveServiceModelGenerator {
 
-  private static final String SERVICE_TYPE = "HIVE_ON_TEZ";
+  public static final String SERVICE_TYPE = "HIVE_ON_TEZ";
 
   @Override
   public String getServiceType() {
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveServiceModelGenerator.java
index 7cb787d..981a9df 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/HiveServiceModelGenerator.java
@@ -28,9 +28,9 @@
 
 public class HiveServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE      = "HIVE";
-  private static final String SERVICE_TYPE = "HIVE";
-  private static final String ROLE_TYPE    = "HIVESERVER2";
+  public static final String SERVICE      = "HIVE";
+  public static final String SERVICE_TYPE = "HIVE";
+  public static final String ROLE_TYPE    = "HIVESERVER2";
 
   @Override
   public String getService() {
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/WebHCatServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/WebHCatServiceModelGenerator.java
index 77438c1..fa3552d 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/WebHCatServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hive/WebHCatServiceModelGenerator.java
@@ -28,9 +28,9 @@
 
 public class WebHCatServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  public static final String SERVICE = "WEBHCAT";
-  private static final String SERVICE_TYPE = "HIVE";
-  private static final String ROLE_TYPE = "WEBHCAT";
+  public static final String SERVICE      = "WEBHCAT";
+  public static final String SERVICE_TYPE = "HIVE";
+  public static final String ROLE_TYPE    = "WEBHCAT";
 
   @Override
   public String getService() {
@@ -53,11 +53,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueLBServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueLBServiceModelGenerator.java
index ade5403..4b50aac 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueLBServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueLBServiceModelGenerator.java
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueServiceModelGenerator.java
index e6b59d8..04a7a52 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/hue/HueServiceModelGenerator.java
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaServiceModelGenerator.java
new file mode 100644
index 0000000..1a8c920
--- /dev/null
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaServiceModelGenerator.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package org.apache.knox.gateway.topology.discovery.cm.model.impala;
+
+import com.cloudera.api.swagger.client.ApiException;
+import com.cloudera.api.swagger.model.ApiConfigList;
+import com.cloudera.api.swagger.model.ApiRole;
+import com.cloudera.api.swagger.model.ApiService;
+import com.cloudera.api.swagger.model.ApiServiceConfig;
+import org.apache.knox.gateway.topology.discovery.cm.ServiceModel;
+import org.apache.knox.gateway.topology.discovery.cm.model.AbstractServiceModelGenerator;
+
+import java.util.Locale;
+
+public class ImpalaServiceModelGenerator extends AbstractServiceModelGenerator {
+
+  public static final String SERVICE      = "IMPALA";
+  public static final String SERVICE_TYPE = "IMPALA";
+  public static final String ROLE_TYPE    = "IMPALAD";
+
+  @Override
+  public String getService() {
+    return SERVICE;
+  }
+
+  @Override
+  public String getServiceType() {
+    return SERVICE_TYPE;
+  }
+
+  @Override
+  public String getRoleType() {
+    return ROLE_TYPE;
+  }
+
+  @Override
+  public ServiceModel.Type getModelType() {
+    return ServiceModel.Type.API;
+  }
+
+  @Override
+  public ServiceModel generateService(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) throws ApiException {
+    String hostname = role.getHostRef().getHostname();
+
+    boolean sslEnabled = Boolean.parseBoolean(getServiceConfigValue(serviceConfig, "client_services_ssl_enabled"));
+    String scheme = sslEnabled ? "https" : "http";
+
+    // Role config properties
+    String port = getRoleConfigValue(roleConfig, "hs2_http_port");
+    return createServiceModel(String.format(Locale.getDefault(), "%s://%s:%s/", scheme, hostname, port));
+  }
+}
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaUIServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaUIServiceModelGenerator.java
new file mode 100644
index 0000000..17da335
--- /dev/null
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/impala/ImpalaUIServiceModelGenerator.java
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ */
+package org.apache.knox.gateway.topology.discovery.cm.model.impala;
+
+import com.cloudera.api.swagger.client.ApiException;
+import com.cloudera.api.swagger.model.ApiConfigList;
+import com.cloudera.api.swagger.model.ApiRole;
+import com.cloudera.api.swagger.model.ApiService;
+import com.cloudera.api.swagger.model.ApiServiceConfig;
+import org.apache.knox.gateway.topology.discovery.cm.ServiceModel;
+import org.apache.knox.gateway.topology.discovery.cm.model.AbstractServiceModelGenerator;
+
+import java.util.Locale;
+
+public class ImpalaUIServiceModelGenerator extends AbstractServiceModelGenerator {
+
+  public static final String SERVICE      = "IMPALAUI";
+  public static final String SERVICE_TYPE = "IMPALA";
+  public static final String ROLE_TYPE    = "IMPALAD";
+
+
+  @Override
+  public String getService() {
+    return SERVICE;
+  }
+
+  @Override
+  public String getServiceType() {
+    return SERVICE_TYPE;
+  }
+
+  @Override
+  public String getRoleType() {
+    return ROLE_TYPE;
+  }
+
+  @Override
+  public ServiceModel.Type getModelType() {
+    return ServiceModel.Type.UI;
+  }
+
+  @Override
+  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
+    return super.handles(service, serviceConfig, role, roleConfig) &&
+           Boolean.parseBoolean(getRoleConfigValue(roleConfig, "impalad_enable_webserver"));
+  }
+
+  @Override
+  public ServiceModel generateService(ApiService       service,
+                                      ApiServiceConfig serviceConfig,
+                                      ApiRole          role,
+                                      ApiConfigList    roleConfig) throws ApiException {
+    String hostname = role.getHostRef().getHostname();
+
+    boolean sslEnabled = Boolean.parseBoolean(getServiceConfigValue(serviceConfig, "client_services_ssl_enabled"));
+    String scheme = sslEnabled ? "https" : "http";
+
+    String port = getRoleConfigValue(roleConfig, "impalad_webserver_port");
+    return createServiceModel(String.format(Locale.getDefault(), "%s://%s:%s/", scheme, hostname, port));
+  }
+}
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/livy/LivyServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/livy/LivyServiceModelGenerator.java
index 99b4b7b..dfa4aad 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/livy/LivyServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/livy/LivyServiceModelGenerator.java
@@ -27,9 +27,9 @@
 
 public class LivyServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE = "LIVYSERVER";
-  private static final String SERVICE_TYPE = "LIVY";
-  private static final String ROLE_TYPE = "LIVY_SERVER";
+  public static final String SERVICE      = "LIVYSERVER";
+  public static final String SERVICE_TYPE = "LIVY";
+  public static final String ROLE_TYPE    = "LIVY_SERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/oozie/OozieServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/oozie/OozieServiceModelGenerator.java
index 17a1c1f..a6adf0f 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/oozie/OozieServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/oozie/OozieServiceModelGenerator.java
@@ -27,9 +27,9 @@
 
 public class OozieServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE = "OOZIE";
-  private static final String SERVICE_TYPE = "OOZIE";
-  private static final String ROLE_TYPE = "OOZIE_SERVER";
+  public static final String SERVICE      = "OOZIE";
+  public static final String SERVICE_TYPE = "OOZIE";
+  public static final String ROLE_TYPE    = "OOZIE_SERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/phoenix/PhoenixServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/phoenix/PhoenixServiceModelGenerator.java
index cf9fdd7..fcdbb21 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/phoenix/PhoenixServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/phoenix/PhoenixServiceModelGenerator.java
@@ -27,9 +27,9 @@
 
 public class PhoenixServiceModelGenerator extends AbstractServiceModelGenerator {
 
-  private static final String SERVICE = "AVATICA";
-  private static final String SERVICE_TYPE = "PHOENIX";
-  private static final String ROLE_TYPE = "PHOENIX_QUERY_SERVER";
+  public static final String SERVICE      = "AVATICA";
+  public static final String SERVICE_TYPE = "PHOENIX";
+  public static final String ROLE_TYPE    = "PHOENIX_QUERY_SERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/ranger/RangerServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/ranger/RangerServiceModelGenerator.java
index edb9621..236ef29 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/ranger/RangerServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/ranger/RangerServiceModelGenerator.java
@@ -26,9 +26,9 @@
 import java.util.Locale;
 
 public class RangerServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE = "RANGER";
-  private static final String SERVICE_TYPE = "RANGER";
-  private static final String ROLE_TYPE = "RANGER_ADMIN";
+  public static final String SERVICE      = "RANGER";
+  public static final String SERVICE_TYPE = "RANGER";
+  public static final String ROLE_TYPE    = "RANGER_ADMIN";
 
   @Override
   public String getService() {
@@ -51,11 +51,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/solr/SolrServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/solr/SolrServiceModelGenerator.java
index 7f19653..cc6ae41 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/solr/SolrServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/solr/SolrServiceModelGenerator.java
@@ -26,9 +26,9 @@
 import java.util.Locale;
 
 public class SolrServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE = "SOLR";
-  private static final String SERVICE_TYPE = "SOLR";
-  private static final String ROLE_TYPE = "SOLR_SERVER";
+  public static final String SERVICE      = "SOLR";
+  public static final String SERVICE_TYPE = "SOLR";
+  public static final String ROLE_TYPE    = "SOLR_SERVER";
 
   @Override
   public String getService() {
@@ -51,11 +51,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/spark/SparkHistoryUIServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/spark/SparkHistoryUIServiceModelGenerator.java
index 89d9d41..75c466f 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/spark/SparkHistoryUIServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/spark/SparkHistoryUIServiceModelGenerator.java
@@ -26,9 +26,9 @@
 import java.util.Locale;
 
 public class SparkHistoryUIServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE = "SPARKHISTORYUI";
-  private static final String SERVICE_TYPE = "SPARK_ON_YARN";
-  private static final String ROLE_TYPE = "SPARK_YARN_HISTORY_SERVER";
+  public static final String SERVICE      = "SPARKHISTORYUI";
+  public static final String SERVICE_TYPE = "SPARK_ON_YARN";
+  public static final String ROLE_TYPE    = "SPARK_YARN_HISTORY_SERVER";
 
   @Override
   public String getService() {
@@ -51,11 +51,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/JobHistoryUIServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/JobHistoryUIServiceModelGenerator.java
index 5dfdeab..9b7e637 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/JobHistoryUIServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/JobHistoryUIServiceModelGenerator.java
@@ -53,11 +53,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/ResourceManagerServiceModelGeneratorBase.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/ResourceManagerServiceModelGeneratorBase.java
index 6ca7b59..f73930d 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/ResourceManagerServiceModelGeneratorBase.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/yarn/ResourceManagerServiceModelGeneratorBase.java
@@ -16,10 +16,6 @@
  */
 package org.apache.knox.gateway.topology.discovery.cm.model.yarn;
 
-import com.cloudera.api.swagger.model.ApiConfigList;
-import com.cloudera.api.swagger.model.ApiRole;
-import com.cloudera.api.swagger.model.ApiService;
-import com.cloudera.api.swagger.model.ApiServiceConfig;
 import org.apache.knox.gateway.topology.discovery.cm.model.AbstractServiceModelGenerator;
 
 public abstract class ResourceManagerServiceModelGeneratorBase extends AbstractServiceModelGenerator {
@@ -37,9 +33,4 @@
     return ROLE_TYPE;
   }
 
-  @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
 }
diff --git a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/zeppelin/ZeppelinServiceModelGenerator.java b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/zeppelin/ZeppelinServiceModelGenerator.java
index bd0789b..8e99afb 100644
--- a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/zeppelin/ZeppelinServiceModelGenerator.java
+++ b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/model/zeppelin/ZeppelinServiceModelGenerator.java
@@ -27,9 +27,9 @@
 import java.util.Locale;
 
 public class ZeppelinServiceModelGenerator extends AbstractServiceModelGenerator {
-  private static final String SERVICE = "ZEPPELIN";
-  protected static final String SERVICE_TYPE = "ZEPPELIN";
-  protected static final String ROLE_TYPE = "ZEPPELIN_SERVER";
+  public static final String SERVICE      = "ZEPPELIN";
+  public static final String SERVICE_TYPE = "ZEPPELIN";
+  public static final String ROLE_TYPE    = "ZEPPELIN_SERVER";
 
   @Override
   public String getService() {
@@ -52,11 +52,6 @@
   }
 
   @Override
-  public boolean handles(ApiService service, ApiServiceConfig serviceConfig, ApiRole role, ApiConfigList roleConfig) {
-    return getServiceType().equals(service.getType()) && getRoleType().equals(role.getType());
-  }
-
-  @Override
   public ServiceModel generateService(ApiService       service,
                                       ApiServiceConfig serviceConfig,
                                       ApiRole          role,
diff --git a/gateway-discovery-cm/src/main/resources/META-INF/services/org.apache.knox.gateway.topology.discovery.cm.ServiceModelGenerator b/gateway-discovery-cm/src/main/resources/META-INF/services/org.apache.knox.gateway.topology.discovery.cm.ServiceModelGenerator
index 39e53f6..d6ca1cf 100644
--- a/gateway-discovery-cm/src/main/resources/META-INF/services/org.apache.knox.gateway.topology.discovery.cm.ServiceModelGenerator
+++ b/gateway-discovery-cm/src/main/resources/META-INF/services/org.apache.knox.gateway.topology.discovery.cm.ServiceModelGenerator
@@ -28,6 +28,8 @@
 org.apache.knox.gateway.topology.discovery.cm.model.hive.WebHCatServiceModelGenerator
 org.apache.knox.gateway.topology.discovery.cm.model.hue.HueServiceModelGenerator
 org.apache.knox.gateway.topology.discovery.cm.model.hue.HueLBServiceModelGenerator
+org.apache.knox.gateway.topology.discovery.cm.model.impala.ImpalaServiceModelGenerator
+org.apache.knox.gateway.topology.discovery.cm.model.impala.ImpalaUIServiceModelGenerator
 org.apache.knox.gateway.topology.discovery.cm.model.yarn.JobTrackerServiceModelGenerator
 org.apache.knox.gateway.topology.discovery.cm.model.livy.LivyServiceModelGenerator
 org.apache.knox.gateway.topology.discovery.cm.model.oozie.OozieServiceModelGenerator
diff --git a/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryTest.java b/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryTest.java
index 31419cf..ecf5520 100644
--- a/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryTest.java
+++ b/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscoveryTest.java
@@ -32,6 +32,23 @@
 import org.apache.knox.gateway.services.security.AliasService;
 import org.apache.knox.gateway.topology.discovery.ServiceDiscovery;
 import org.apache.knox.gateway.topology.discovery.ServiceDiscoveryConfig;
+import org.apache.knox.gateway.topology.discovery.cm.model.atlas.AtlasAPIServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.atlas.AtlasServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hbase.HBaseUIServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hbase.WebHBaseServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hdfs.NameNodeServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hive.HiveOnTezServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hive.HiveServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.hive.WebHCatServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.impala.ImpalaServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.impala.ImpalaUIServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.livy.LivyServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.oozie.OozieServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.phoenix.PhoenixServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.ranger.RangerServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.solr.SolrServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.spark.SparkHistoryUIServiceModelGenerator;
+import org.apache.knox.gateway.topology.discovery.cm.model.zeppelin.ZeppelinServiceModelGenerator;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
@@ -99,7 +116,7 @@
     final String port           = "21000";
     final String sslPort        = "21003";
     ServiceDiscovery.Cluster cluster = doTestAtlasDiscovery(hostName, port, sslPort, isSSL);
-    List<String> atlastURLs = cluster.getServiceURLs("ATLAS");
+    List<String> atlastURLs = cluster.getServiceURLs(AtlasServiceModelGenerator.SERVICE);
     assertEquals(1, atlastURLs.size());
     assertEquals((isSSL ? "https" : "http") + "://" + hostName + ":" + (isSSL ? sslPort : port),
                  atlastURLs.get(0));
@@ -110,7 +127,7 @@
     final String port           = "21000";
     final String sslPort        = "21003";
     ServiceDiscovery.Cluster cluster = doTestAtlasDiscovery(hostName, port, sslPort, isSSL);
-    List<String> atlastURLs = cluster.getServiceURLs("ATLAS-API");
+    List<String> atlastURLs = cluster.getServiceURLs(AtlasAPIServiceModelGenerator.SERVICE);
     assertEquals(1, atlastURLs.size());
     assertEquals((isSSL ? "https" : "http") + "://" + hostName + ":" + (isSSL ? sslPort : port),
         atlastURLs.get(0));
@@ -335,9 +352,9 @@
 
     ServiceDiscovery.Cluster cluster = doTestDiscovery(hostName,
                                                        "HIVE-1",
-                                                       "HIVE",
+                                                       WebHCatServiceModelGenerator.SERVICE_TYPE,
                                                        "HIVE-1-WEBHCAT-1",
-                                                       "WEBHCAT",
+                                                       WebHCatServiceModelGenerator.ROLE_TYPE,
                                                        Collections.emptyMap(),
                                                        roleProperties);
 
@@ -438,6 +455,92 @@
     doTestZeppelinDiscovery("ZEPPELINWS", true);
   }
 
+  @Test
+  public void testImpalaDiscovery() {
+    doTestImpalaDiscovery(false);
+  }
+
+  @Test
+  public void testImpalaDiscoverySSL() {
+    doTestImpalaDiscovery(true);
+  }
+
+  @Test
+  public void testImpalaUIDiscoveryWebServerNotEnabled() {
+    doTestImpalaUIDiscovery(false, false);
+  }
+
+  @Test
+  public void testImpalaUIDiscovery() {
+    doTestImpalaUIDiscovery(false, true);
+  }
+
+  @Test
+  public void testImpalaUIDiscoverySSL() {
+    doTestImpalaUIDiscovery(true, true);
+  }
+
+  private void doTestImpalaDiscovery(boolean sslEnabled) {
+    final String hostName = "impalad-host";
+    final String port     = "28000";
+    final String expectedURL = (sslEnabled ? "https" : "http") + "://" + hostName + ":" + port + "/";
+
+    Map<String, String> serviceProperties = new HashMap<>();
+    if (sslEnabled) {
+      serviceProperties.put("client_services_ssl_enabled", "true");
+    }
+
+    // Configure the role
+    Map<String, String> roleProperties = new HashMap<>();
+    roleProperties.put("hs2_http_port", port);
+
+    ServiceDiscovery.Cluster cluster = doTestDiscovery(hostName,
+                                                       "IMPALA-1",
+                                                       ImpalaServiceModelGenerator.SERVICE_TYPE,
+                                                       "IMAPALA-1-IMPALAD-1",
+                                                       ImpalaServiceModelGenerator.ROLE_TYPE,
+                                                       serviceProperties,
+                                                       roleProperties);
+
+    List<String> urls = cluster.getServiceURLs("IMPALA");
+    assertEquals(1, urls.size());
+    assertEquals(expectedURL, urls.get(0));
+  }
+
+  private void doTestImpalaUIDiscovery(boolean sslEnabled, boolean webserverEnabled) {
+    final String hostName = "impalad-host";
+    final String port     = "25000";
+    final String expectedURL = (sslEnabled ? "https" : "http") + "://" + hostName + ":" + port + "/";
+
+    Map<String, String> serviceProperties = new HashMap<>();
+    if (sslEnabled) {
+      serviceProperties.put("client_services_ssl_enabled", "true");
+    }
+
+    // Configure the role
+    Map<String, String> roleProperties = new HashMap<>();
+    roleProperties.put("hs2_http_port", port);
+    if (webserverEnabled) {
+      roleProperties.put("impalad_enable_webserver", "true");
+      roleProperties.put("impalad_webserver_port", port);
+    }
+
+    ServiceDiscovery.Cluster cluster = doTestDiscovery(hostName,
+                                                       "IMPALA-1",
+                                                       ImpalaUIServiceModelGenerator.SERVICE_TYPE,
+                                                       "IMAPALA-1-IMPALAD-1",
+                                                       ImpalaUIServiceModelGenerator.ROLE_TYPE,
+                                                       serviceProperties,
+                                                       roleProperties);
+
+    List<String> urls = cluster.getServiceURLs("IMPALAUI");
+    if (webserverEnabled) {
+      assertEquals(1, urls.size());
+      assertEquals(expectedURL, urls.get(0));
+    } else {
+      assertEquals(0, urls.size());
+    }
+  }
 
   private void doTestOozieDiscovery(final String serviceName, final boolean isSSL) {
     final String hostName = "oozie-host";
@@ -467,14 +570,13 @@
 
     return doTestDiscovery(hostName,
                            "OOZIE-1",
-                           "OOZIE",
+                           OozieServiceModelGenerator.SERVICE_TYPE,
                            "OOZIE-1-OOZIE_SERVER-12345",
-                           "OOZIE_SERVER",
+                           OozieServiceModelGenerator.ROLE_TYPE,
                            serviceProperties,
                            roleProperties);
   }
 
-
   private void doTestZeppelinDiscovery(final String serviceName, final boolean isSSL) {
     final String hostName = "zeppelin-host";
     final String port     = "8886";
@@ -517,9 +619,9 @@
 
     return doTestDiscovery(hostName,
                            "ZEPPELIN-1",
-                           "ZEPPELIN",
+                           ZeppelinServiceModelGenerator.SERVICE_TYPE,
                            "ZEPPELIN-ZEPPELIN_SERVER-1",
-                           "ZEPPELIN_SERVER",
+                           ZeppelinServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -569,9 +671,9 @@
 
     return doTestDiscovery(hostName,
                            "RANGER-1",
-                           "RANGER",
+                           RangerServiceModelGenerator.SERVICE_TYPE,
                            "RANGER-RANGER_ADMIN-1",
-                           "RANGER_ADMIN",
+                           RangerServiceModelGenerator.ROLE_TYPE,
                            serviceProperties,
                            roleProperties);
   }
@@ -591,9 +693,9 @@
 
     return doTestDiscovery(hostName,
                            "SOLR-1",
-                           "SOLR",
+                           SolrServiceModelGenerator.SERVICE_TYPE,
                            "SOLR-SOLR_SERVER-1",
-                           "SOLR_SERVER",
+                           SolrServiceModelGenerator.ROLE_TYPE,
                            serviceProperties,
                            roleProperties);
   }
@@ -611,9 +713,9 @@
 
     return doTestDiscovery(hostName,
                            "SPARK_ON_YARN-1",
-                           "SPARK_ON_YARN",
+                           SparkHistoryUIServiceModelGenerator.SERVICE_TYPE,
                            "SPAR4fcf419a-SPARK_YARN_HISTORY_SERVER-12345",
-                           "SPARK_YARN_HISTORY_SERVER",
+                           SparkHistoryUIServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -631,9 +733,9 @@
 
     return doTestDiscovery(atlasHost,
                            "ATLAS-1",
-                           "ATLAS",
+                           AtlasServiceModelGenerator.SERVICE_TYPE,
                            "ATLAS-ATLAS_SERVER-1",
-                           "ATLAS_SERVER",
+                           AtlasServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -655,9 +757,9 @@
 
     return doTestDiscovery(hostName,
                            "HIVE-1",
-                           "HIVE",
+                           HiveServiceModelGenerator.SERVICE_TYPE,
                            "HIVE-1-HIVESERVER2-12345",
-                           "HIVESERVER2",
+                           HiveServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -679,9 +781,9 @@
 
     return doTestDiscovery(hostName,
                            "HIVE_ON_TEZ-1",
-                           "HIVE_ON_TEZ",
+                           HiveOnTezServiceModelGenerator.SERVICE_TYPE,
                            "HIVE_ON_TEZ-1-HIVESERVER2-12345",
-                           "HIVESERVER2",
+                           HiveServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -728,9 +830,9 @@
 
     return doTestDiscovery(hostName,
                            "NAMENODE-1",
-                           "HDFS",
+                           NameNodeServiceModelGenerator.SERVICE_TYPE,
                            "HDFS-1-NAMENODE-12345",
-                           "NAMENODE",
+                           NameNodeServiceModelGenerator.ROLE_TYPE,
                            serviceProps,
                            roleProperties);
   }
@@ -749,9 +851,9 @@
 
     return doTestDiscovery(hostName,
                            "HBASE-1",
-                           "HBASE",
+                           HBaseUIServiceModelGenerator.SERVICE_TYPE,
                            "HBASE-1-MASTER-12345",
-                           "MASTER",
+                           HBaseUIServiceModelGenerator.ROLE_TYPE,
                            serviceProps,
                            roleProperties);
   }
@@ -767,9 +869,9 @@
 
     return doTestDiscovery(hostName,
                            "HBASE-1",
-                           "HBASE",
+                           WebHBaseServiceModelGenerator.SERVICE_TYPE,
                            "HBASE-1-RESTSERVER",
-                           "HBASERESTSERVER",
+                           WebHBaseServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -785,9 +887,9 @@
 
     return doTestDiscovery(hostName,
                            "LIVY-1",
-                           "LIVY",
+                           LivyServiceModelGenerator.SERVICE_TYPE,
                            "LIVY-LIVY_SERVER-1",
-                           "LIVY_SERVER",
+                           LivyServiceModelGenerator.ROLE_TYPE,
                            Collections.emptyMap(),
                            roleProperties);
   }
@@ -801,8 +903,13 @@
       roleProperties.put("phoenix_query_server_port", port);
       roleProperties.put("ssl_enabled", String.valueOf(isSSL));
 
-      return doTestDiscovery(hostName, "PHOENIX-1", "PHOENIX", "PHOENIX-PHOENIX_QUERY_SERVER-1", "PHOENIX_QUERY_SERVER", Collections.emptyMap(),
-              roleProperties);
+      return doTestDiscovery(hostName,
+                             "PHOENIX-1",
+                             PhoenixServiceModelGenerator.SERVICE_TYPE,
+                             "PHOENIX-PHOENIX_QUERY_SERVER-1",
+                             PhoenixServiceModelGenerator.ROLE_TYPE,
+                             Collections.emptyMap(),
+                             roleProperties);
   }