|
@@ -0,0 +1,209 @@
|
|
|
|
+/**
|
|
|
|
+ * 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.ambari.view.slider.clients;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
|
|
+
|
|
|
|
+import org.apache.ambari.server.controller.predicate.AndPredicate;
|
|
|
|
+import org.apache.ambari.server.controller.predicate.EqualsPredicate;
|
|
|
|
+import org.apache.ambari.server.controller.spi.ClusterController;
|
|
|
|
+import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
|
|
|
|
+import org.apache.ambari.server.controller.spi.NoSuchResourceException;
|
|
|
|
+import org.apache.ambari.server.controller.spi.Resource;
|
|
|
|
+import org.apache.ambari.server.controller.spi.SystemException;
|
|
|
|
+import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
|
|
|
|
+import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
|
|
|
|
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
|
|
|
|
+import org.apache.ambari.server.state.DesiredConfig;
|
|
|
|
+import org.apache.ambari.server.state.State;
|
|
|
|
+import org.apache.log4j.Logger;
|
|
|
|
+
|
|
|
|
+import com.google.inject.Singleton;
|
|
|
|
+
|
|
|
|
+@Singleton
|
|
|
|
+public class AmbariInternalClient implements AmbariClient {
|
|
|
|
+
|
|
|
|
+ private static final Logger logger = Logger
|
|
|
|
+ .getLogger(AmbariInternalClient.class);
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AmbariCluster getCluster(AmbariClusterInfo clusterInfo) {
|
|
|
|
+ ClusterController clusterController = ClusterControllerHelper
|
|
|
|
+ .getClusterController();
|
|
|
|
+ try {
|
|
|
|
+ EqualsPredicate<String> clusterPredicate = new EqualsPredicate<String>(
|
|
|
|
+ "Clusters/cluster_name", clusterInfo.getName());
|
|
|
|
+ Set<Resource> clusterResources = clusterController.getResources(
|
|
|
|
+ Resource.Type.Cluster, PropertyHelper.getReadRequest(),
|
|
|
|
+ clusterPredicate);
|
|
|
|
+ if (!clusterResources.isEmpty()) {
|
|
|
|
+ Resource clusterResource = clusterResources.iterator().next();
|
|
|
|
+ AmbariCluster cluster = new AmbariCluster();
|
|
|
|
+ cluster.setName(clusterResource.getPropertyValue(
|
|
|
|
+ "Clusters/cluster_name").toString());
|
|
|
|
+ cluster.setVersion(clusterResource.getPropertyValue("Clusters/version")
|
|
|
|
+ .toString());
|
|
|
|
+ Map<String, String> desiredConfigsMap = new HashMap<String, String>();
|
|
|
|
+ Map<String, Object> desiredConfigsMapResource = clusterResource
|
|
|
|
+ .getPropertiesMap().get("Clusters/desired_configs");
|
|
|
|
+ for (Map.Entry<String, Object> siteEntry : desiredConfigsMapResource
|
|
|
|
+ .entrySet()) {
|
|
|
|
+ desiredConfigsMap.put(siteEntry.getKey(),
|
|
|
|
+ ((DesiredConfig) siteEntry.getValue()).getVersion());
|
|
|
|
+ }
|
|
|
|
+ cluster.setDesiredConfigs(desiredConfigsMap);
|
|
|
|
+
|
|
|
|
+ EqualsPredicate<String> serviceClusterPredicate = new EqualsPredicate<String>(
|
|
|
|
+ "ServiceInfo/cluster_name", cluster.getName());
|
|
|
|
+ EqualsPredicate<String> hostClusterPredicate = new EqualsPredicate<String>(
|
|
|
|
+ "Hosts/cluster_name", cluster.getName());
|
|
|
|
+ Set<Resource> serviceResources = clusterController.getResources(
|
|
|
|
+ Resource.Type.Service, PropertyHelper.getReadRequest(),
|
|
|
|
+ serviceClusterPredicate);
|
|
|
|
+ Set<Resource> hostResources = clusterController.getResources(
|
|
|
|
+ Resource.Type.Host, PropertyHelper.getReadRequest(),
|
|
|
|
+ hostClusterPredicate);
|
|
|
|
+ List<AmbariServiceInfo> servicesList = new ArrayList<AmbariServiceInfo>();
|
|
|
|
+ List<AmbariHostInfo> hostsList = new ArrayList<AmbariHostInfo>();
|
|
|
|
+ for (Resource serviceResource : serviceResources) {
|
|
|
|
+ AmbariServiceInfo service = new AmbariServiceInfo();
|
|
|
|
+ service.setId(serviceResource.getPropertyValue(
|
|
|
|
+ "ServiceInfo/service_name").toString());
|
|
|
|
+ service.setStarted(State.STARTED.toString().equals(
|
|
|
|
+ serviceResource.getPropertyValue("ServiceInfo/state")));
|
|
|
|
+ servicesList.add(service);
|
|
|
|
+ }
|
|
|
|
+ for (Resource hostResource : hostResources) {
|
|
|
|
+ AmbariHostInfo host = new AmbariHostInfo();
|
|
|
|
+ host.setHostName(hostResource.getPropertyValue("Hosts/host_name")
|
|
|
|
+ .toString());
|
|
|
|
+ hostsList.add(host);
|
|
|
|
+ }
|
|
|
|
+ cluster.setServices(servicesList);
|
|
|
|
+ cluster.setHosts(hostsList);
|
|
|
|
+ return cluster;
|
|
|
|
+ }
|
|
|
|
+ } catch (UnsupportedPropertyException e) {
|
|
|
|
+ logger.warn(
|
|
|
|
+ "Unable to determine Ambari cluster details - "
|
|
|
|
+ + clusterInfo.getName(), e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchResourceException e) {
|
|
|
|
+ logger.warn(
|
|
|
|
+ "Unable to determine Ambari cluster details - "
|
|
|
|
+ + clusterInfo.getName(), e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchParentResourceException e) {
|
|
|
|
+ logger.warn(
|
|
|
|
+ "Unable to determine Ambari cluster details - "
|
|
|
|
+ + clusterInfo.getName(), e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (SystemException e) {
|
|
|
|
+ logger.warn(
|
|
|
|
+ "Unable to determine Ambari cluster details - "
|
|
|
|
+ + clusterInfo.getName(), e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public AmbariClusterInfo getClusterInfo() {
|
|
|
|
+ ClusterController clusterController = ClusterControllerHelper
|
|
|
|
+ .getClusterController();
|
|
|
|
+ try {
|
|
|
|
+ Set<Resource> resources = clusterController.getResources(
|
|
|
|
+ Resource.Type.Cluster, PropertyHelper.getReadRequest(), null);
|
|
|
|
+ if (resources.size() > 0) {
|
|
|
|
+ Resource clusterResource = resources.iterator().next();
|
|
|
|
+ AmbariClusterInfo clusterInfo = new AmbariClusterInfo();
|
|
|
|
+ clusterInfo.setName(clusterResource.getPropertyValue(
|
|
|
|
+ "Clusters/cluster_name").toString());
|
|
|
|
+ clusterInfo.setVersion(clusterResource.getPropertyValue(
|
|
|
|
+ "Clusters/version").toString());
|
|
|
|
+ return clusterInfo;
|
|
|
|
+ }
|
|
|
|
+ } catch (UnsupportedPropertyException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchResourceException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchParentResourceException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (SystemException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, String> getConfiguration(AmbariClusterInfo cluster,
|
|
|
|
+ String configType, String configTag) {
|
|
|
|
+ ClusterController clusterController = ClusterControllerHelper
|
|
|
|
+ .getClusterController();
|
|
|
|
+ try {
|
|
|
|
+ EqualsPredicate<String> clusterPredicate = new EqualsPredicate<String>(
|
|
|
|
+ "Config/cluster_name", cluster.getName());
|
|
|
|
+ EqualsPredicate<String> typePredicate = new EqualsPredicate<String>(
|
|
|
|
+ "type", configType);
|
|
|
|
+ EqualsPredicate<String> tagPredicate = new EqualsPredicate<String>("tag",
|
|
|
|
+ configTag);
|
|
|
|
+ AndPredicate typeTagPredicate = new AndPredicate(typePredicate,
|
|
|
|
+ tagPredicate);
|
|
|
|
+ AndPredicate configsPredicate = new AndPredicate(clusterPredicate,
|
|
|
|
+ typeTagPredicate);
|
|
|
|
+
|
|
|
|
+ Set<Resource> configResources = clusterController.getResources(
|
|
|
|
+ Resource.Type.Configuration, PropertyHelper.getReadRequest(),
|
|
|
|
+ configsPredicate);
|
|
|
|
+ if (!configResources.isEmpty()) {
|
|
|
|
+ Resource configResource = configResources.iterator().next();
|
|
|
|
+ Map<String, String> configs = new HashMap<String, String>();
|
|
|
|
+ Object props = configResource.getPropertiesMap().get("properties");
|
|
|
|
+ if (props instanceof Map) {
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
|
+ Map<String, String> propsMap = (Map<String, String>) props;
|
|
|
|
+ configs.putAll(propsMap);
|
|
|
|
+ }
|
|
|
|
+ return configs;
|
|
|
|
+ }
|
|
|
|
+ } catch (UnsupportedPropertyException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster configuration", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchResourceException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster configuration", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (NoSuchParentResourceException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster configuration", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ } catch (SystemException e) {
|
|
|
|
+ logger.warn("Unable to determine Ambari cluster configuration", e);
|
|
|
|
+ throw new RuntimeException(e.getMessage(), e);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|