Browse Source

AMBARI-13792. Difference in configuration downloaded from UI and actual configuration files for Hive (dlysnichenko)

Lisnichenko Dmitro 9 years ago
parent
commit
edefa4858f

+ 3 - 1
ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java

@@ -329,7 +329,9 @@ class ActionScheduler implements Runnable {
         for (ExecutionCommand cmd : commandsToSchedule) {
 
           // Hack - Remove passwords from configs
-          if (cmd.getRole().equals(Role.HIVE_CLIENT.toString()) &&
+          if ((cmd.getRole().equals(Role.HIVE_CLIENT.toString()) ||
+                  cmd.getRole().equals(Role.WEBHCAT_SERVER.toString()) ||
+                  cmd.getRole().equals(Role.HCAT.toString())) &&
                   cmd.getConfigurations().containsKey(Configuration.HIVE_CONFIG_TAG)) {
             cmd.getConfigurations().get(Configuration.HIVE_CONFIG_TAG).remove(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY);
           }

+ 3 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java

@@ -2558,7 +2558,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
         StageUtils.getClusterHostInfo(cluster));
 
     // Hack - Remove passwords from configs
-    if (ec.getRole().equals(Role.HIVE_CLIENT.toString()) &&
+    if ((ec.getRole().equals(Role.HIVE_CLIENT.toString()) ||
+            ec.getRole().equals(Role.WEBHCAT_SERVER.toString()) ||
+            ec.getRole().equals(Role.HCAT.toString())) &&
         ec.getConfigurations().containsKey(Configuration.HIVE_CONFIG_TAG)) {
       ec.getConfigurations().get(Configuration.HIVE_CONFIG_TAG).remove(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY);
     }

+ 15 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java

@@ -46,10 +46,12 @@ import org.apache.ambari.server.state.ComponentInfo;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.PropertyInfo;
 import org.apache.ambari.server.state.PropertyInfo.PropertyType;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.ServiceOsSpecific;
 import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.utils.SecretReference;
 import org.apache.ambari.server.utils.StageUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -206,6 +208,8 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
 
 
       Map<String, Map<String, String>> configurations = new TreeMap<String, Map<String, String>>();
+      Map<String, Long> configVersions = new TreeMap<String, Long>();
+      Map<String, Map<PropertyType, Set<String>>> configPropertiesTypes = new TreeMap<>();
       Map<String, Map<String, Map<String, String>>> configurationAttributes = new TreeMap<String, Map<String, Map<String, String>>>();
 
       Map<String, DesiredConfig> desiredClusterConfigs = cluster.getDesiredConfigs();
@@ -244,6 +248,8 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
           }
 
           configurations.put(clusterConfig.getType(), props);
+          configVersions.put(clusterConfig.getType(), clusterConfig.getVersion());
+          configPropertiesTypes.put(clusterConfig.getType(), clusterConfig.getPropertiesTypes());
 
           Map<String, Map<String, String>> attrs = new TreeMap<String, Map<String, String>>();
           configHelper.cloneAttributesMap(clusterConfig.getPropertiesAttributes(), attrs);
@@ -262,6 +268,15 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
         configurations.get(Configuration.HIVE_CONFIG_TAG).remove(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY);
       }
 
+      // replace passwords on password references
+      for(Map.Entry<String, Map<String, String>> configEntry: configurations.entrySet()) {
+        String configType = configEntry.getKey();
+        Map<String, String> configProperties = configEntry.getValue();
+        Long configVersion = configVersions.get(configType);
+        Map<PropertyType, Set<String>> propertiesTypes = configPropertiesTypes.get(configType);
+        SecretReference.replacePasswordsWithReferences(propertiesTypes, configProperties, configType, configVersion);
+      }
+
       Map<String, Set<String>> clusterHostInfo = null;
       ServiceInfo serviceInfo = null;
       String osFamily = null;