You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2015/03/05 16:55:38 UTC
[2/2] ambari git commit: AMBARI-9943. Umask 027 + non-root result in
failures during deploy (aonishuk)
AMBARI-9943. Umask 027 + non-root result in failures during deploy (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/72dfdd49
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/72dfdd49
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/72dfdd49
Branch: refs/heads/branch-2.0.0
Commit: 72dfdd499f6102ce4efa1ed45ed7a48e13aabe0d
Parents: 34d004c
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Thu Mar 5 17:55:26 2015 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Mar 5 17:55:26 2015 +0200
----------------------------------------------------------------------
ambari-agent/conf/unix/ambari-env.sh | 1 +
.../TestDirectoryResource.py | 35 +++++++-------
.../resource_management/TestExecuteResource.py | 3 +-
.../resource_management/TestFileResource.py | 40 ++++++++--------
.../resource_management/TestLinkResource.py | 30 ++++++------
.../TestPropertiesFileResource.py | 20 ++++----
.../TestXmlConfigResource.py | 20 ++++----
.../core/providers/system.py | 50 ++++++++++----------
.../python/resource_management/core/sudo.py | 29 ++++++++++++
.../HIVE/0.12.0.2.0/package/scripts/hive.py | 11 +++--
.../scripts/shared_initialization.py | 4 ++
.../stacks/2.0.6/HIVE/test_hive_metastore.py | 6 +++
.../stacks/2.0.6/HIVE/test_hive_server.py | 6 +++
.../hooks/before-INSTALL/test_before_install.py | 5 ++
.../stacks/2.1/HIVE/test_hive_metastore.py | 16 +++++--
15 files changed, 168 insertions(+), 108 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/conf/unix/ambari-env.sh
----------------------------------------------------------------------
diff --git a/ambari-agent/conf/unix/ambari-env.sh b/ambari-agent/conf/unix/ambari-env.sh
index bf7ca55..a5f350f 100644
--- a/ambari-agent/conf/unix/ambari-env.sh
+++ b/ambari-agent/conf/unix/ambari-env.sh
@@ -17,3 +17,4 @@
# given through environment variable
AMBARI_PASSPHRASE="DEV"
export PATH=$PATH:/var/lib/ambari-agent
+export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestDirectoryResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestDirectoryResource.py b/ambari-agent/src/test/python/resource_management/TestDirectoryResource.py
index fe64400..f42de93 100644
--- a/ambari-agent/src/test/python/resource_management/TestDirectoryResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestDirectoryResource.py
@@ -19,7 +19,6 @@ limitations under the License.
from unittest import TestCase
from mock.mock import patch, MagicMock
import os
-import shutil
from resource_management.core.system import System
from resource_management.core import Environment, Fail, sudo
from resource_management.core.resources import Directory
@@ -27,10 +26,10 @@ from resource_management.core.resources import Directory
@patch.object(System, "os_family", new = 'redhat')
class TestDirectoryResource(TestCase):
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
@patch.object(sudo, "makedirs")
- @patch.object(os.path, "isdir")
- @patch.object(os, "stat")
+ @patch.object(sudo, "path_isdir")
+ @patch.object(sudo, "stat")
@patch.object(sudo,"chmod")
@patch.object(sudo,"chown")
@patch("resource_management.core.providers.system._coerce_uid")
@@ -59,11 +58,11 @@ class TestDirectoryResource(TestCase):
os_chown_mock.assert_any_call('/a/b/c/d', 'hdfs', None)
os_chown_mock.assert_any_call('/a/b/c/d', None, 'hadoop')
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
@patch.object(os.path, "dirname")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_isdir")
@patch.object(sudo, "makedir")
- @patch.object(os, "stat")
+ @patch.object(sudo, "stat")
@patch.object(sudo,"chmod")
@patch.object(sudo,"chown")
@patch("resource_management.core.providers.system._coerce_uid")
@@ -92,9 +91,9 @@ class TestDirectoryResource(TestCase):
os_chown_mock.assert_any_call('/a/b/c/d', 'hdfs', None)
os_chown_mock.assert_any_call('/a/b/c/d', None, 'hadoop')
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
@patch.object(os.path, "dirname")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_isdir")
def test_create_directory_failed_no_parent(self, isdir_mock, os_dirname_mock,
os_path_exists_mock):
os_path_exists_mock.return_value = False
@@ -115,8 +114,8 @@ class TestDirectoryResource(TestCase):
self.assertEqual('Applying u"Directory[\'/a/b/c/d\']" failed, parent directory /a/b/c doesn\'t exist',
str(e))
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_create_directory_path_is_file_or_line(self, isdir_mock, os_path_exists_mock):
os_path_exists_mock.return_value = True
isdir_mock.return_value = False
@@ -134,9 +133,9 @@ class TestDirectoryResource(TestCase):
self.assertEqual('Applying u"Directory[\'/a/b/c/d\']" failed, file /a/b/c/d already exists',
str(e))
- @patch.object(shutil, "rmtree")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "rmtree")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_delete_directory(self, isdir_mock, os_path_exists_mock, rmtree_mock):
os_path_exists_mock.return_value = True
isdir_mock.return_value = True
@@ -148,7 +147,7 @@ class TestDirectoryResource(TestCase):
rmtree_mock.assert_called_with('/a/b/c/d')
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
def test_delete_noexisting_directory(self, os_path_exists_mock):
os_path_exists_mock.return_value = False
@@ -157,9 +156,9 @@ class TestDirectoryResource(TestCase):
action='delete'
)
- @patch.object(shutil, "rmtree")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "rmtree")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_delete_directory_with_path_to_file(self, isdir_mock, os_path_exists_mock, rmtree_mock):
os_path_exists_mock.return_value = True
isdir_mock.return_value = False
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestExecuteResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestExecuteResource.py b/ambari-agent/src/test/python/resource_management/TestExecuteResource.py
index 216fd1a..d92f905 100644
--- a/ambari-agent/src/test/python/resource_management/TestExecuteResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestExecuteResource.py
@@ -22,6 +22,7 @@ from mock.mock import patch, MagicMock, call
from resource_management.core.system import System
from resource_management.core.resources.system import Execute
from resource_management.core.environment import Environment
+from resource_management.core import sudo
import subprocess
import logging
@@ -63,7 +64,7 @@ class TestExecuteResource(TestCase):
self.assertTrue(popen_mock.called, 'subprocess.Popen should have been called!')
self.assertFalse(proc_communicate_mock.called, 'proc.communicate should not have been called!')
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
@patch.object(subprocess, "Popen")
def test_attribute_creates(self, popen_mock, exists_mock):
exists_mock.return_value = True
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestFileResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestFileResource.py b/ambari-agent/src/test/python/resource_management/TestFileResource.py
index 28fa610..f60fc12 100644
--- a/ambari-agent/src/test/python/resource_management/TestFileResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestFileResource.py
@@ -32,7 +32,7 @@ import resource_management
@patch.object(System, "os_family", new = 'redhat')
class TestFileResource(TestCase):
@patch.object(os.path, "dirname")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_isdir")
def test_action_create_dir_exist(self, isdir_mock, dirname_mock):
"""
Tests if 'create' action fails when path is existent directory
@@ -53,7 +53,7 @@ class TestFileResource(TestCase):
self.assertFalse(dirname_mock.called)
@patch.object(os.path, "dirname")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_isdir")
def test_action_create_parent_dir_non_exist(self, isdir_mock, dirname_mock):
"""
Tests if 'create' action fails when parent directory of path
@@ -79,8 +79,8 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "read_file")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_create_non_existent_file(self, isdir_mock, exists_mock, create_file_mock, read_file_mock, ensure_mock):
"""
Tests if 'create' action create new non existent file and write proper data
@@ -103,8 +103,8 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "read_file")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_create_replace(self, isdir_mock, exists_mock, create_file_mock, read_file_mock, ensure_mock):
"""
Tests if 'create' action rewrite existent file with new data
@@ -125,8 +125,8 @@ class TestFileResource(TestCase):
@patch.object(sudo, "unlink")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_delete_is_directory(self, isdir_mock, exist_mock, unlink_mock):
"""
Tests if 'delete' action fails when path is directory
@@ -151,8 +151,8 @@ class TestFileResource(TestCase):
self.assertEqual(unlink_mock.call_count, 0)
@patch.object(sudo, "unlink")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_delete(self, isdir_mock, exist_mock, unlink_mock):
"""
Tests if 'delete' action removes file
@@ -173,7 +173,7 @@ class TestFileResource(TestCase):
self.assertEqual(unlink_mock.call_count, 1)
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_isdir")
def test_attribute_path(self, isdir_mock):
"""
Tests 'path' attribute
@@ -198,8 +198,8 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "read_file")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_attribute_backup(self, isdir_mock, exists_mock, create_file_mock, read_file_mock, ensure_mock, backup_file_mock):
"""
Tests 'backup' attribute
@@ -233,8 +233,8 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch("__builtin__.open")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_attribute_replace(self, isdir_mock, exists_mock, open_mock, ensure_mock):
"""
Tests 'replace' attribute
@@ -265,10 +265,10 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system._coerce_gid")
@patch.object(sudo, "chown")
@patch.object(sudo, "chmod")
- @patch.object(os, "stat")
+ @patch.object(sudo, "stat")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_ensure_metadata(self, isdir_mock, exists_mock, create_file_mock, stat_mock, chmod_mock, chown_mock, gid_mock,
uid_mock):
"""
@@ -327,8 +327,8 @@ class TestFileResource(TestCase):
@patch("resource_management.core.providers.system.FileProvider._get_content")
@patch.object(sudo, "read_file")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_create_encoding(self, isdir_mock, exists_mock, create_file_mock, read_file_mock, get_content_mock ,ensure_mock):
isdir_mock.side_effect = [False, True]
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestLinkResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestLinkResource.py b/ambari-agent/src/test/python/resource_management/TestLinkResource.py
index cdb6061..2d5194c 100644
--- a/ambari-agent/src/test/python/resource_management/TestLinkResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestLinkResource.py
@@ -30,8 +30,8 @@ import os
class TestLinkResource(TestCase):
@patch.object(os.path, "realpath")
- @patch.object(os.path, "lexists")
- @patch.object(os.path, "islink")
+ @patch.object(sudo, "path_lexists")
+ @patch.object(sudo, "path_lexists")
@patch.object(sudo, "unlink")
@patch.object(sudo, "symlink")
def test_action_create_relink(self, symlink_mock, unlink_mock,
@@ -49,13 +49,11 @@ class TestLinkResource(TestCase):
symlink_mock.assert_called_with("/a/b/link_to_path", "/some_path")
@patch.object(os.path, "realpath")
- @patch.object(os.path, "lexists")
- @patch.object(os.path, "islink")
- def test_action_create_failed_due_to_file_exists(self, islink_mock,
+ @patch.object(sudo, "path_lexists")
+ def test_action_create_failed_due_to_file_exists(self,
lexists_mock, realmock):
- lexists_mock.return_value = True
+ lexists_mock.side_effect = [True, False]
realmock.return_value = "/old_to_link_path"
- islink_mock.return_value = False
with Environment('/') as env:
try:
Link("/some_path",
@@ -67,7 +65,7 @@ class TestLinkResource(TestCase):
self.assertEqual("LinkProvider[Link['/some_path']] trying to create a symlink with the same name as an existing file or directory",
str(e))
- @patch.object(os.path, "lexists")
+ @patch.object(sudo, "path_lexists")
@patch.object(sudo, "symlink")
def test_action_create_symlink_clean_create(self, symlink_mock, lexists_mock):
lexists_mock.return_value = False
@@ -80,8 +78,8 @@ class TestLinkResource(TestCase):
symlink_mock.assert_called_with("/a/b/link_to_path", "/some_path")
@patch.object(os.path, "isdir")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "lexists")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_lexists")
@patch.object(sudo, "link")
def test_action_create_hardlink_clean_create(self, link_mock, lexists_mock,
exists_mock, isdir_mock):
@@ -97,8 +95,8 @@ class TestLinkResource(TestCase):
link_mock.assert_called_with("/a/b/link_to_path", "/some_path")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "lexists")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_lexists")
def test_action_create_hardlink_target_doesnt_exist(self, lexists_mock,
exists_mock):
lexists_mock.return_value = False
@@ -115,9 +113,9 @@ class TestLinkResource(TestCase):
self.assertEqual('Failed to apply u"Link[\'/some_path\']", linking to nonexistent location /a/b/link_to_path',
str(e))
- @patch.object(os.path, "isdir")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "lexists")
+ @patch.object(sudo, "path_isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_lexists")
def test_action_create_hardlink_target_is_dir(self, lexists_mock,
exists_mock, isdir_mock):
lexists_mock.return_value = False
@@ -136,7 +134,7 @@ class TestLinkResource(TestCase):
str(e))
@patch.object(sudo, "unlink")
- @patch.object(os.path, "exists")
+ @patch.object(sudo, "path_exists")
def test_action_delete(self, exists_mock, unlink_mock):
exists_mock.return_value = True
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestPropertiesFileResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestPropertiesFileResource.py b/ambari-agent/src/test/python/resource_management/TestPropertiesFileResource.py
index bdb64de..1147928 100644
--- a/ambari-agent/src/test/python/resource_management/TestPropertiesFileResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestPropertiesFileResource.py
@@ -38,8 +38,8 @@ class TestPropertiesFIleResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_empty_properties_without_dir(self,
time_asctime_mock,
@@ -71,8 +71,8 @@ class TestPropertiesFIleResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_empty_properties_with_dir(self,
time_asctime_mock,
@@ -104,8 +104,8 @@ class TestPropertiesFIleResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_properties_simple(self,
time_asctime_mock,
@@ -137,8 +137,8 @@ class TestPropertiesFIleResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_properties_with_metacharacters(self,
time_asctime_mock,
@@ -176,8 +176,8 @@ class TestPropertiesFIleResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "read_file")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_properties_rewrite_content(self,
time_asctime_mock,
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-agent/src/test/python/resource_management/TestXmlConfigResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestXmlConfigResource.py b/ambari-agent/src/test/python/resource_management/TestXmlConfigResource.py
index 4affd31..041fc9a 100644
--- a/ambari-agent/src/test/python/resource_management/TestXmlConfigResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestXmlConfigResource.py
@@ -38,8 +38,8 @@ class TestXmlConfigResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_empty_xml_config(self,
time_asctime_mock,
@@ -67,8 +67,8 @@ class TestXmlConfigResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_simple_xml_config(self,
time_asctime_mock,
@@ -96,8 +96,8 @@ class TestXmlConfigResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_xml_config_with_metacharacters(self,
time_asctime_mock,
@@ -148,8 +148,8 @@ class TestXmlConfigResource(TestCase):
@patch("resource_management.core.providers.system._ensure_metadata")
@patch.object(sudo, "create_file")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
@patch.object(time, "asctime")
def test_action_create_xml_config_sorted_by_key(self,
time_asctime_mock,
@@ -180,8 +180,8 @@ class TestXmlConfigResource(TestCase):
create_file_mock.assert_called_with('/dir/conf/file.xml', u'<!--Wed 2014-02-->\n <configuration>\n \n <property>\n <name></name>\n <value></value>\n </property>\n \n <property>\n <name>first</name>\n <value>should be first</value>\n </property>\n \n <property>\n <name>second</name>\n <value>should be second</value>\n </property>\n \n <property>\n <name>third</name>\n <value>should be third</value>\n </property>\n \n <property>\n <name>z_last</name>\n <value>should be last</value>\n </property>\n \n </configuration>\n')
@patch("resource_management.libraries.providers.xml_config.File")
- @patch.object(os.path, "exists")
- @patch.object(os.path, "isdir")
+ @patch.object(sudo, "path_exists")
+ @patch.object(sudo, "path_isdir")
def test_action_create_arguments(self, os_path_isdir_mock ,os_path_exists_mock, file_mock):
os_path_isdir_mock.side_effect = [False, True]
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-common/src/main/python/resource_management/core/providers/system.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/providers/system.py b/ambari-common/src/main/python/resource_management/core/providers/system.py
index ac63b21..95ba80d 100644
--- a/ambari-common/src/main/python/resource_management/core/providers/system.py
+++ b/ambari-common/src/main/python/resource_management/core/providers/system.py
@@ -27,7 +27,6 @@ import grp
import os
import pwd
import time
-import shutil
from resource_management.core import shell
from resource_management.core import sudo
from resource_management.core.base import Fail
@@ -59,8 +58,8 @@ def _coerce_gid(group):
def _ensure_metadata(path, user, group, mode=None, cd_access=None):
- stat = os.stat(path)
-
+ stat = sudo.stat(path)
+
if user:
uid = _coerce_uid(user)
if stat.st_uid != uid:
@@ -77,10 +76,9 @@ def _ensure_metadata(path, user, group, mode=None, cd_access=None):
sudo.chown(path, None, group)
if mode:
- existing_mode = stat.st_mode & 07777
- if existing_mode != mode:
+ if stat.st_mode != mode:
Logger.info("Changing permission for %s from %o to %o" % (
- path, existing_mode, mode))
+ path, stat.st_mode, mode))
sudo.chmod(path, mode)
if cd_access:
@@ -89,7 +87,7 @@ def _ensure_metadata(path, user, group, mode=None, cd_access=None):
dir_path = path
while dir_path != os.sep:
- if os.path.isdir(dir_path):
+ if sudo.path_isdir(dir_path):
sudo.chmod_extended(dir_path, cd_access+"+x")
dir_path = os.path.split(dir_path)[0]
@@ -99,16 +97,16 @@ class FileProvider(Provider):
def action_create(self):
path = self.resource.path
- if os.path.isdir(path):
+ if sudo.path_isdir(path):
raise Fail("Applying %s failed, directory with name %s exists" % (self.resource, path))
dirname = os.path.dirname(path)
- if not os.path.isdir(dirname):
+ if not sudo.path_isdir(dirname):
raise Fail("Applying %s failed, parent directory %s doesn't exist" % (self.resource, dirname))
write = False
content = self._get_content()
- if not os.path.exists(path):
+ if not sudo.path_exists(path):
write = True
reason = "it doesn't exist"
elif self.resource.replace:
@@ -135,10 +133,10 @@ class FileProvider(Provider):
def action_delete(self):
path = self.resource.path
- if os.path.isdir(path):
+ if sudo.path_isdir(path):
raise Fail("Applying %s failed, %s is directory not file!" % (self.resource, path))
- if os.path.exists(path):
+ if sudo.path_exists(path):
Logger.info("Deleting %s" % self.resource)
sudo.unlink(path)
@@ -157,7 +155,7 @@ class DirectoryProvider(Provider):
def action_create(self):
path = self.resource.path
- if not os.path.exists(path):
+ if not sudo.path_exists(path):
Logger.info("Creating directory %s" % self.resource)
if self.resource.recursive:
if self.resource.recursive_permission:
@@ -167,12 +165,12 @@ class DirectoryProvider(Provider):
sudo.makedirs(path, self.resource.mode or 0755)
else:
dirname = os.path.dirname(path)
- if not os.path.isdir(dirname):
+ if not sudo.path_isdir(dirname):
raise Fail("Applying %s failed, parent directory %s doesn't exist" % (self.resource, dirname))
sudo.makedir(path, self.resource.mode or 0755)
- if not os.path.isdir(path):
+ if not sudo.path_isdir(path):
raise Fail("Applying %s failed, file %s already exists" % (self.resource, path))
_ensure_metadata(path, self.resource.owner, self.resource.group,
@@ -191,44 +189,44 @@ class DirectoryProvider(Provider):
dir_prefix=""
for folder in folders:
dir_prefix=os.path.join(dir_prefix, folder)
- if not os.path.exists(dir_prefix):
+ if not sudo.path_exists(dir_prefix):
sudo.makedir(dir_prefix, mode or 0755)
_ensure_metadata(dir_prefix, None, None, mode)
def action_delete(self):
path = self.resource.path
- if os.path.exists(path):
- if not os.path.isdir(path):
+ if sudo.path_exists(path):
+ if not sudo.path_isdir(path):
raise Fail("Applying %s failed, %s is not a directory" % (self.resource, path))
Logger.info("Removing directory %s and all its content" % self.resource)
- shutil.rmtree(path)
+ sudo.rmtree(path)
class LinkProvider(Provider):
def action_create(self):
path = self.resource.path
- if os.path.lexists(path):
+ if sudo.path_lexists(path):
oldpath = os.path.realpath(path)
if oldpath == self.resource.to:
return
- if not os.path.islink(path):
+ if not sudo.path_lexists(path):
raise Fail(
"%s trying to create a symlink with the same name as an existing file or directory" % self)
Logger.info("%s replacing old symlink to %s" % (self.resource, oldpath))
sudo.unlink(path)
if self.resource.hard:
- if not os.path.exists(self.resource.to):
+ if not sudo.path_exists(self.resource.to):
raise Fail("Failed to apply %s, linking to nonexistent location %s" % (self.resource, self.resource.to))
- if os.path.isdir(self.resource.to):
+ if sudo.path_isdir(self.resource.to):
raise Fail("Failed to apply %s, cannot create hard link to a directory (%s)" % (self.resource, self.resource.to))
Logger.info("Creating hard %s" % self.resource)
sudo.link(self.resource.to, path)
else:
- if not os.path.exists(self.resource.to):
+ if not sudo.path_exists(self.resource.to):
Logger.info("Warning: linking to nonexistent location %s" % self.resource.to)
Logger.info("Creating symbolic %s" % self.resource)
@@ -236,7 +234,7 @@ class LinkProvider(Provider):
def action_delete(self):
path = self.resource.path
- if os.path.exists(path):
+ if sudo.path_exists(path):
Logger.info("Deleting %s" % self.resource)
sudo.unlink(path)
@@ -254,7 +252,7 @@ def _preexec_fn(resource):
class ExecuteProvider(Provider):
def action_run(self):
if self.resource.creates:
- if os.path.exists(self.resource.creates):
+ if sudo.path_exists(self.resource.creates):
Logger.info("Skipping %s due to creates" % self.resource)
return
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-common/src/main/python/resource_management/core/sudo.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/sudo.py b/ambari-common/src/main/python/resource_management/core/sudo.py
index ae21f84..938e95b 100644
--- a/ambari-common/src/main/python/resource_management/core/sudo.py
+++ b/ambari-common/src/main/python/resource_management/core/sudo.py
@@ -59,6 +59,10 @@ def link(source, link_name):
def unlink(path):
shell.checked_call(["rm","-f", path], sudo=True)
+# shutil.rmtree
+def rmtree(path):
+ shell.checked_call(["rm","-rf", path], sudo=True)
+
# fp.write replacement
def create_file(filename, content):
"""
@@ -84,3 +88,28 @@ def read_file(filename):
with tmpf:
with open(tmpf.name, "rb") as fp:
return fp.read()
+
+# os.path.exists
+def path_exists(path):
+ return (shell.call(["test", "-e", path], sudo=True)[0] == 0)
+
+# os.path.isdir
+def path_isdir(path):
+ return (shell.call(["test", "-d", path], sudo=True)[0] == 0)
+
+# os.path.lexists
+def path_lexists(path):
+ return (shell.call(["test", "-L", path], sudo=True)[0] == 0)
+
+# os.stat
+def stat(path):
+ class Stat:
+ def __init__(self, path):
+ # TODO: check this on Ubuntu
+ out = shell.checked_call(["stat", "-c", "%u %g %a", path], sudo=True)[1]
+ uid_str, gid_str, mode_str = out.split(' ')
+ self.st_uid = int(uid_str)
+ self.st_gid = int(gid_str)
+ self.st_mode = int(mode_str, 8)
+
+ return Stat(path)
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
index 64bcebc..c988bb2 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
@@ -91,14 +91,15 @@ def hive(name=None):
"-userName {hive_metastore_user_name} "
"-passWord {hive_metastore_user_passwd!p}")
- check_schema_created_cmd = format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
+ check_schema_created_cmd = as_user(format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
"{hive_bin}/schematool -info "
"-dbType {hive_metastore_db_type} "
"-userName {hive_metastore_user_name} "
- "-passWord {hive_metastore_user_passwd!p}")
+ "-passWord {hive_metastore_user_passwd!p}"), params.hive_user)
Execute(create_schema_cmd,
- not_if = check_schema_created_cmd
+ not_if = check_schema_created_cmd,
+ user = params.hive_user
)
elif name == 'hiveserver2':
File(params.start_hiveserver2_path,
@@ -214,3 +215,7 @@ def jdbc_connector():
path=["/bin", "/usr/bin/"],
sudo=True
)
+
+ File(params.target,
+ mode = 0644,
+ )
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py
index 745402a..0d64644 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py
@@ -20,6 +20,7 @@ limitations under the License.
import os
from resource_management import *
+import getpass
def setup_java():
"""
@@ -64,6 +65,9 @@ def setup_java():
Execute(("chgrp","-R", params.user_group, params.java_home),
sudo = True,
)
+ Execute(("chown","-R", getpass.getuser(), params.java_home),
+ sudo = True,
+ )
def install_packages():
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
index 9153a84..9698bae 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
@@ -203,6 +203,9 @@ class TestHiveMetastore(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
@@ -292,6 +295,9 @@ class TestHiveMetastore(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
index 5230196..f0d6d7a 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
@@ -323,6 +323,9 @@ class TestHiveServer(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
@@ -444,6 +447,9 @@ class TestHiveServer(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
index e038ddf..1304eef 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
@@ -21,7 +21,9 @@ limitations under the License.
from mock.mock import MagicMock, call, patch
from resource_management import *
from stacks.utils.RMFTestCase import *
+import getpass
+@patch.object(getpass, "getuser", new = MagicMock(return_value='some_user'))
@patch.object(Hook, "run_custom_hook", new = MagicMock())
class TestHookBeforeInstall(RMFTestCase):
def test_hook_default(self):
@@ -57,4 +59,7 @@ class TestHookBeforeInstall(RMFTestCase):
self.assertResourceCalled('Execute', ('chgrp', '-R', u'hadoop', u'/usr/jdk64/jdk1.7.0_45'),
sudo = True,
)
+ self.assertResourceCalled('Execute', ('chown', '-R', 'some_user', u'/usr/jdk64/jdk1.7.0_45'),
+ sudo = True,
+ )
self.assertNoMoreResources()
http://git-wip-us.apache.org/repos/asf/ambari/blob/72dfdd49/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py b/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
index 990eac8..ae0acec 100644
--- a/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
+++ b/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
@@ -222,6 +222,9 @@ class TestHiveMetastore(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
@@ -230,8 +233,9 @@ class TestHiveMetastore(RMFTestCase):
mode = 0755,
)
self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -initSchema -dbType mysql -userName hive -passWord aaa',
- not_if = 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -info -dbType mysql -userName hive -passWord aaa',
- )
+ not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -info -dbType mysql -userName hive -passWord aaa'",
+ user = 'hive',
+ )
self.assertResourceCalled('Directory', '/var/run/hive',
owner = 'hive',
group = 'hadoop',
@@ -302,6 +306,9 @@ class TestHiveMetastore(RMFTestCase):
path = ['/bin', '/usr/bin/'],
sudo = True,
)
+ self.assertResourceCalled('File', '/usr/lib/hive/lib//mysql-connector-java.jar',
+ mode = 0644,
+ )
self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
)
@@ -310,8 +317,9 @@ class TestHiveMetastore(RMFTestCase):
mode = 0755,
)
self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -initSchema -dbType mysql -userName hive -passWord asd',
- not_if = 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -info -dbType mysql -userName hive -passWord asd',
- )
+ not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/lib/hive/bin/schematool -info -dbType mysql -userName hive -passWord asd'",
+ user = 'hive',
+ )
self.assertResourceCalled('Directory', '/var/run/hive',
owner = 'hive',
group = 'hadoop',