Repository: ambari Updated Branches: refs/heads/branch-2.4 14c6114f4 -> 0f4adf610
AMBARI-20596. Cleanup temporary files needed for downloading client configurations response. (Attila Magyar via stoader) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0f4adf61 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0f4adf61 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0f4adf61 Branch: refs/heads/branch-2.4 Commit: 0f4adf610d8215953462777a68842f68250f33e4 Parents: 14c6114 Author: Attila Magyae <amag...@hortonworks.com> Authored: Thu Apr 20 13:51:13 2017 +0200 Committer: Toader, Sebastian <stoa...@hortonworks.com> Committed: Thu Apr 20 13:51:13 2017 +0200 ---------------------------------------------------------------------- .../resource_management/libraries/script/script.py | 8 +++++--- .../internal/ClientConfigResourceProvider.java | 17 +++++++++++++++-- .../internal/ClientConfigResourceProviderTest.java | 7 +++++-- .../python/stacks/2.0.6/HDFS/test_hdfs_client.py | 11 ++++++----- 4 files changed, 31 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/0f4adf61/ambari-common/src/main/python/resource_management/libraries/script/script.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py index 9eee5be..1c5bdce 100644 --- a/ambari-common/src/main/python/resource_management/libraries/script/script.py +++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py @@ -806,6 +806,7 @@ class Script(object): Directory(self.get_tmp_dir(), create_parents = True) conf_tmp_dir = tempfile.mkdtemp(dir=self.get_tmp_dir()) + os.chmod(conf_tmp_dir, 0700) output_filename = os.path.join(self.get_tmp_dir(), config['commandParams']['output_file']) try: @@ -813,22 +814,23 @@ class Script(object): for filename, dict in file_dict.iteritems(): XmlConfig(filename, conf_dir=conf_tmp_dir, - mode=0644, + mode=0600, **self.generate_configs_get_xml_file_content(filename, dict) ) for file_dict in env_configs_list: for filename,dicts in file_dict.iteritems(): File(os.path.join(conf_tmp_dir, filename), - mode=0644, + mode=0600, content=InlineTemplate(self.generate_configs_get_template_file_content(filename, dicts))) for file_dict in properties_configs_list: for filename, dict in file_dict.iteritems(): PropertiesFile(os.path.join(conf_tmp_dir, filename), - mode=0644, + mode=0600, properties=self.generate_configs_get_xml_file_dict(filename, dict) ) with closing(tarfile.open(output_filename, "w:gz")) as tar: + os.chmod(output_filename, 0600) try: tar.add(conf_tmp_dir, arcname=os.path.basename(".")) finally: http://git-wip-us.apache.org/repos/asf/ambari/blob/0f4adf61/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java index c390c86..a018fee 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java @@ -383,8 +383,7 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv jsonContent.put("clusterName", cluster.getClusterName()); jsonConfigurations = gson.toJson(jsonContent); - File jsonFileName = new File(TMP_PATH + File.separator + componentName + "-configuration.json"); - File tmpDirectory = new File(jsonFileName.getParent()); + File tmpDirectory = new File(TMP_PATH); if (!tmpDirectory.exists()) { try { tmpDirectory.mkdirs(); @@ -394,6 +393,18 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv throw new SystemException("Failed to get temporary directory to store configurations", se); } } + + File jsonFileName; + try { + jsonFileName = File.createTempFile(componentName, "-configuration.json", tmpDirectory); + jsonFileName.setWritable(true, true); + jsonFileName.setReadable(true, true); + } catch (SecurityException e) { + throw new SystemException("Failed to set permission", e); + } catch (IOException e) { + throw new SystemException("Controller error ", e); + } + PrintWriter printWriter = null; try { printWriter = new PrintWriter(jsonFileName.getAbsolutePath()); @@ -417,6 +428,8 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv } catch (ExecutionException e) { LOG.error(e.getMessage(),e); throw new SystemException(e.getMessage() + " " + e.getCause()); + } finally { + jsonFileName.delete(); } } catch (AmbariException e) { http://git-wip-us.apache.org/repos/asf/ambari/blob/0f4adf61/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java index 463b3a1..f5ca3f1 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java @@ -19,6 +19,7 @@ package org.apache.ambari.server.controller.internal; import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.anyString; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; @@ -327,8 +328,9 @@ public class ClientConfigResourceProviderTest { userSet.add("hdfs"); expect(configHelper.getPropertyValuesWithPropertyType(stackId, PropertyInfo.PropertyType.USER, cluster, desiredConfigMap)).andReturn(userSet); PowerMock.expectNew(File.class, new Class<?>[]{String.class}, anyObject(String.class)).andReturn(mockFile).anyTimes(); + PowerMock.mockStatic(File.class); + expect(File.createTempFile(anyString(), anyString(), anyObject(File.class))).andReturn(mockFile); PowerMock.createNiceMockAndExpectNew(PrintWriter.class, anyObject()); - expect(mockFile.getParent()).andReturn(""); PowerMock.mockStatic(Runtime.class); expect(mockFile.exists()).andReturn(true); String commandLine = "ambari-python-wrap /tmp/stacks/S1/V1/PIG/package/null generate_configs null " + @@ -531,8 +533,9 @@ public class ClientConfigResourceProviderTest { userSet.add("hdfs"); expect(configHelper.getPropertyValuesWithPropertyType(stackId, PropertyInfo.PropertyType.USER, cluster, desiredConfigMap)).andReturn(userSet); PowerMock.expectNew(File.class, new Class<?>[]{String.class}, anyObject(String.class)).andReturn(mockFile).anyTimes(); + PowerMock.mockStatic(File.class); + expect(File.createTempFile(anyString(), anyString(), anyObject(File.class))).andReturn(mockFile); PowerMock.createNiceMockAndExpectNew(PrintWriter.class, anyObject()); - expect(mockFile.getParent()).andReturn(""); PowerMock.mockStatic(Runtime.class); expect(mockFile.exists()).andReturn(true); String commandLine = "ambari-python-wrap " + commonServicesPath + "/PIG/package/null generate_configs null " + http://git-wip-us.apache.org/repos/asf/ambari/blob/0f4adf61/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py index b2636ab..85098fa 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py +++ b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py @@ -32,6 +32,7 @@ from resource_management.libraries.script.script import Script @patch.object(tempfile,"mkdtemp", new = MagicMock(return_value='/tmp/123')) @patch.object(contextlib,"closing", new = MagicMock()) @patch("os.path.exists", new = MagicMock(return_value=True)) +@patch("os.chmod", new = MagicMock(return_value=True)) class Test(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "HDFS/2.1.0.2.0/package" STACK_VERSION = "2.0.6" @@ -49,25 +50,25 @@ class Test(RMFTestCase): ) self.assertResourceCalled('XmlConfig', 'hdfs-site.xml', conf_dir = '/tmp/123', - mode=0644, + mode=0600, configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'], configurations = self.getConfig()['configurations']['hdfs-site'], ) self.assertResourceCalled('File', '/tmp/123/hadoop-env.sh', - mode=0644, + mode=0600, content = InlineTemplate(self.getConfig()['configurations']['hadoop-env']['content']), ) self.assertResourceCalled('File', '/tmp/123/log4j.properties', - mode=0644, + mode=0600, content = InlineTemplate(self.getConfig()['configurations']['hdfs-log4j']['content']+ self.getConfig()['configurations']['yarn-log4j']['content']), ) self.assertResourceCalled('PropertiesFile', '/tmp/123/runtime.properties', - mode=0644, + mode=0600, properties = UnknownConfigurationMock(), ) self.assertResourceCalled('PropertiesFile', '/tmp/123/startup.properties', - mode=0644, + mode=0600, properties = UnknownConfigurationMock(), ) self.assertResourceCalled('Directory', '/tmp/123',