From 50e998e30362c02d89115e5933ee2b3af2d05edd Mon Sep 17 00:00:00 2001 From: Jonathan Kirszling Date: Thu, 10 Jun 2021 21:47:59 +0200 Subject: [PATCH] apt_key: add --recv argument as last one (#74949) * apt_key: add --recv argument as last one * Add unit test * Add the required boilerplate Co-authored-by: Marius Gedminas --- .../fragments/74949-apt_key_recv_last_arg.yml | 2 ++ lib/ansible/modules/apt_key.py | 7 +++-- test/units/modules/test_apt_key.py | 27 +++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 changelogs/fragments/74949-apt_key_recv_last_arg.yml create mode 100644 test/units/modules/test_apt_key.py diff --git a/changelogs/fragments/74949-apt_key_recv_last_arg.yml b/changelogs/fragments/74949-apt_key_recv_last_arg.yml new file mode 100644 index 00000000000..b017c021657 --- /dev/null +++ b/changelogs/fragments/74949-apt_key_recv_last_arg.yml @@ -0,0 +1,2 @@ +bugfixes: + - apt_key - set --recv argument as last one in apt-key command when using env var HTTP_PROXY (https://github.com/ansible/ansible/issues/74946) diff --git a/lib/ansible/modules/apt_key.py b/lib/ansible/modules/apt_key.py index 205153ce5d4..35a55d91780 100644 --- a/lib/ansible/modules/apt_key.py +++ b/lib/ansible/modules/apt_key.py @@ -313,13 +313,16 @@ def import_key(module, keyring, keyserver, key_id): global lang_env if keyring: - cmd = "%s --keyring %s adv --no-tty --keyserver %s --recv %s" % (apt_key_bin, keyring, keyserver, key_id) + cmd = "%s --keyring %s adv --no-tty --keyserver %s" % (apt_key_bin, keyring, keyserver) else: - cmd = "%s adv --no-tty --keyserver %s --recv %s" % (apt_key_bin, keyserver, key_id) + cmd = "%s adv --no-tty --keyserver %s" % (apt_key_bin, keyserver) # check for proxy cmd = add_http_proxy(cmd) + # add recv argument as last one + cmd = "%s --recv %s" % (cmd, key_id) + for retry in range(5): (rc, out, err) = module.run_command(cmd, environ_update=lang_env) if rc == 0: diff --git a/test/units/modules/test_apt_key.py b/test/units/modules/test_apt_key.py new file mode 100644 index 00000000000..ed83da04aa8 --- /dev/null +++ b/test/units/modules/test_apt_key.py @@ -0,0 +1,27 @@ +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import os + +from units.compat import mock +from units.compat import unittest + +from ansible.modules import apt_key + + +class AptKeyTestCase(unittest.TestCase): + + @mock.patch.object(apt_key, 'apt_key_bin', '/usr/bin/apt-key') + @mock.patch.dict(os.environ, {'HTTP_PROXY': 'proxy.example.com'}) + def test_import_key_with_http_proxy(self): + m_mock = mock.Mock() + m_mock.run_command.return_value = (0, '', '') + apt_key.import_key( + m_mock, keyring=None, keyserver='keyserver.example.com', + key_id='0xDEADBEEF') + self.assertEqual( + m_mock.run_command.call_args_list[0][0][0], + '/usr/bin/apt-key adv --no-tty --keyserver keyserver.example.com' + ' --keyserver-options http-proxy=proxy.example.com' + ' --recv 0xDEADBEEF' + )