Selaa lähdekoodia

AMBARI-8831. Test (and fix if needed) Agents as non-root on SLES and Ubuntu (aonishuk)

Andrew Onishuk 10 vuotta sitten
vanhempi
commit
6734ea3de7

+ 2 - 2
ambari-agent/src/test/python/resource_management/TestRepositoryResource.py

@@ -151,7 +151,7 @@ class TestRepositoryResource(TestCase):
       #'apt-get update -qq -o Dir::Etc::sourcelist="sources.list.d/HDP.list" -o APT::Get::List-Cleanup="0"')
       execute_command_item = execute_mock.call_args_list[0][0][0]
 
-      self.assertEqual(checked_call_mock.call_args_list[0][0][0], 'apt-get update -qq -o Dir::Etc::sourcelist="sources.list.d/HDP.list" -o APT::Get::List-Cleanup="0"')
+      self.assertEqual(checked_call_mock.call_args_list[0][0][0], ['apt-get', 'update', '-qq', '-o', 'Dir::Etc::sourcelist=sources.list.d/HDP.list', '-o', 'APT::Get::List-Cleanup=0'])
       self.assertEqual(execute_command_item, 'apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 123ABCD')
 
     @patch.object(tempfile, "NamedTemporaryFile")
@@ -197,7 +197,7 @@ class TestRepositoryResource(TestCase):
           )
           
       self.assertEqual(str(file_mock.call_args), "call('/etc/apt/sources.list.d/HDP.list', action='delete')")
-      self.assertEqual(execute_mock.call_args[0][0], 'apt-get update -qq -o Dir::Etc::sourcelist="sources.list.d/HDP.list" -o APT::Get::List-Cleanup="0"')
+      self.assertEqual(execute_mock.call_args[0][0], ['apt-get', 'update', '-qq', '-o', 'Dir::Etc::sourcelist=sources.list.d/HDP.list', '-o', 'APT::Get::List-Cleanup=0'])
 
     @patch("os.path.isfile", new=MagicMock(return_value=False))
     @patch.object(System, "os_family", new='ubuntu')

+ 5 - 3
ambari-common/src/main/python/resource_management/libraries/providers/repository.py

@@ -54,7 +54,7 @@ repos_dirs = {
 class UbuntuRepositoryProvider(Provider):
   package_type = "deb"
   repo_dir = "/etc/apt/sources.list.d"
-  update_cmd = 'apt-get update -qq -o Dir::Etc::sourcelist="sources.list.d/{repo_file_name}" -o APT::Get::List-Cleanup="0"'
+  update_cmd = ['apt-get', 'update', '-qq', '-o', 'Dir::Etc::sourcelist=sources.list.d/{repo_file_name}', '-o', 'APT::Get::List-Cleanup=0']
   missing_pkey_regex = "The following signatures couldn't be verified because the public key is not available: NO_PUBKEY (.+)"
   add_pkey_cmd = "apt-key adv --recv-keys --keyserver keyserver.ubuntu.com {pkey}"
 
@@ -74,8 +74,9 @@ class UbuntuRepositoryProvider(Provider):
                content = StaticFile(tmpf.name)
           )
           
+          update_cmd_formatted = [format(x) for x in self.update_cmd]
           # this is time expensive
-          retcode, out = checked_call(format(self.update_cmd))
+          retcode, out = checked_call(update_cmd_formatted, sudo=True)
           
           # add public keys for new repos
           missing_pkeys = set(re.findall(self.missing_pkey_regex, out))
@@ -95,4 +96,5 @@ class UbuntuRepositoryProvider(Provider):
              action = "delete")
         
         # this is time expensive
-        Execute(format(self.update_cmd))
+        update_cmd_formatted = [format(x) for x in self.update_cmd]
+        Execute(update_cmd_formatted)