in gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscovery.java [258:331]
private ClouderaManagerCluster discoverCluster(DiscoveryApiClient client, String clusterName, Collection<String> includedServices)
throws ApiException {
ServicesResourceApi servicesResourceApi = new ServicesResourceApi(client);
RolesResourceApi rolesResourceApi = new RolesResourceApi(client);
log.discoveringCluster(clusterName);
Set<ServiceModel> serviceModels = new HashSet<>();
List<ApiService> serviceList = getClusterServices(client.getConfig(), servicesResourceApi);
if (serviceList != null) {
/*
Since Cloudera Manager does not have a service for itself, we will add a skeleton CM
service so that we can add CM service to topology when auto-discovery is
turned on and CM service is selected in the descriptor
*/
final ApiService cmService = new ApiService();
cmService.setName(CM_SERVICE_TYPE.toLowerCase(Locale.ROOT));
cmService.setType(CM_SERVICE_TYPE);
serviceList.add(cmService);
// if Legacy Cloudera Manager API Clients Compatibility is turned off, some HDFS settings are in CORE_SETTINGS
ApiServiceConfig coreSettingsConfig = coreSettingsConfig(client, servicesResourceApi, serviceList);
for (ApiService service : serviceList) {
final List<ServiceModelGenerator> modelGenerators = serviceModelGeneratorsHolder.getServiceModelGenerators(service.getType());
if (shouldSkipServiceDiscovery(modelGenerators, includedServices)) {
//log.skipServiceDiscovery(service.getName(), service.getType());
//continue;
}
log.discoveringService(service.getName(), service.getType());
ApiServiceConfig serviceConfig = null;
/* no reason to check service config for CM or CORE_SETTINGS services */
if (!CM_SERVICE_TYPE.equals(service.getType()) && !CORE_SETTINGS_TYPE.equals(service.getType())) {
serviceConfig = getServiceConfig(client.getConfig(), servicesResourceApi, service);
}
ApiRoleList roleList = getRoles(client.getConfig(), rolesResourceApi, clusterName, service);
if (roleList != null && roleList.getItems() != null) {
for (ApiRole role : roleList.getItems()) {
String roleName = role.getName();
log.discoveringServiceRole(roleName, role.getType());
ApiConfigList roleConfig = null;
/* no reason to check role config for CM or CORE_SETTINGS services */
if (!CM_SERVICE_TYPE.equals(service.getType()) && !CORE_SETTINGS_TYPE.equals(service.getType())) {
roleConfig = getRoleConfig(client.getConfig(), rolesResourceApi, service, role);
}
if (modelGenerators != null) {
for (ServiceModelGenerator serviceModelGenerator : modelGenerators) {
ServiceModelGeneratorHandleResponse response = serviceModelGenerator.handles(service, serviceConfig, role, roleConfig);
if (response.handled()) {
serviceModelGenerator.setApiClient(client);
ServiceModel serviceModel = serviceModelGenerator.generateService(service, serviceConfig, role, roleConfig, coreSettingsConfig);
serviceModels.add(serviceModel);
} else if (!response.getConfigurationIssues().isEmpty()) {
log.serviceRoleHasConfigurationIssues(roleName, String.join(";", response.getConfigurationIssues()));
}
}
}
log.discoveredServiceRole(roleName, role.getType());
}
}
log.discoveredService(service.getName(), service.getType());
}
ClouderaManagerCluster cluster = new ClouderaManagerCluster(clusterName);
cluster.addServiceModels(serviceModels);
return cluster;
}
return null;
}