Repository: ambari Updated Branches: refs/heads/trunk dfedb0313 -> 3ee0088e0
AMBARI-6398. Add key when adding repos on Ubuntu, to be able install package without forcing (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3ee0088e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3ee0088e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3ee0088e Branch: refs/heads/trunk Commit: 3ee0088e0cd88617c4800c8dd2815eae32b380ee Parents: dfedb03 Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Mon Jul 7 17:56:27 2014 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Mon Jul 7 17:56:27 2014 +0300 ---------------------------------------------------------------------- .../libraries/providers/repository.py | 14 ++++++++++++-- .../resource_management/TestRepositoryResource.py | 14 +++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/3ee0088e/ambari-agent/src/main/python/resource_management/libraries/providers/repository.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/repository.py b/ambari-agent/src/main/python/resource_management/libraries/providers/repository.py index 1788f3c..c670ac1 100644 --- a/ambari-agent/src/main/python/resource_management/libraries/providers/repository.py +++ b/ambari-agent/src/main/python/resource_management/libraries/providers/repository.py @@ -54,7 +54,9 @@ repos_dirs = { class DebianRepositoryProvider(Provider): package_type = "deb" repo_dir = "/etc/apt/sources.list.d" - update_cmd = 'apt-get update -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}" def action_create(self): with Environment.get_instance_copy() as env: @@ -73,7 +75,15 @@ class DebianRepositoryProvider(Provider): ) # this is time expensive - Execute(format(self.update_cmd)) + retcode, out = checked_call(format(self.update_cmd)) + + # add public keys for new repos + missing_pkeys = set(re.findall(self.missing_pkey_regex, out)) + for pkey in missing_pkeys: + Execute(format(self.add_pkey_cmd), + timeout = 15, # in case we are on the host w/o internet (using localrepo), we should ignore hanging + ignore_failures = True + ) def action_remove(self): with Environment.get_instance_copy() as env: http://git-wip-us.apache.org/repos/asf/ambari/blob/3ee0088e/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py b/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py index db44f77..e381e9a 100644 --- a/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py +++ b/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py @@ -116,7 +116,7 @@ class TestRepositoryResource(TestCase): self.assertEqual(expected_template_arguments, template_item.context._dict) self.assertEqual('dummy.j2', template) - + @patch("resource_management.libraries.providers.repository.checked_call") @patch.object(tempfile, "NamedTemporaryFile") @patch("resource_management.libraries.providers.repository.Execute") @patch("resource_management.libraries.providers.repository.File") @@ -124,9 +124,11 @@ class TestRepositoryResource(TestCase): @patch("filecmp.cmp", new=MagicMock(return_value=False)) @patch.object(System, "os_release_name", new='precise') @patch.object(System, "os_family", new='debian') - def test_create_repo_debian_repo_exists(self, file_mock, execute_mock, tempfile_mock): + def test_create_repo_debian_repo_exists(self, file_mock, execute_mock, + tempfile_mock, checked_call_mock): tempfile_mock.return_value = MagicMock(spec=file) tempfile_mock.return_value.__enter__.return_value.name = "/tmp/1.txt" + checked_call_mock.return_value = 0, "The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 123ABCD" with Environment('/') as env: with patch.object(repository,"Template", new=DummyTemplate.create(DEBIAN_DEFAUTL_TEMPLATE)): @@ -146,9 +148,11 @@ class TestRepositoryResource(TestCase): copy_item = str(file_mock.call_args_list[1]) self.assertEqual(copy_item, "call('/etc/apt/sources.list.d/HDP.list', content=StaticFile('/tmp/1.txt'))") - + #'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(execute_command_item, 'apt-get update -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") @patch("resource_management.libraries.providers.repository.Execute") @@ -193,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 -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='debian')