diff --git a/plugins/action/docker_container_copy_into.py b/plugins/action/docker_container_copy_into.py index ffdcfe9f..19b2ed0d 100644 --- a/plugins/action/docker_container_copy_into.py +++ b/plugins/action/docker_container_copy_into.py @@ -28,11 +28,11 @@ class ActionModule(ActionBase): result = merge_hash(result, self._execute_module(task_vars=task_vars, wrap_async=self._task.async_val)) - if u'diff' in result and result[u'diff'].get(u'scrambled_diff'): + if 'diff' in result and result['diff'].get('scrambled_diff'): # Scrambling is not done for security, but to avoid no_log screwing up the diff - diff = result[u'diff'] - key = base64.b64decode(diff.pop(u'scrambled_diff')) - for k in (u'before', u'after'): + diff = result['diff'] + key = base64.b64decode(diff.pop('scrambled_diff')) + for k in ('before', 'after'): if k in diff: diff[k] = unscramble(diff[k], key) diff --git a/plugins/connection/docker.py b/plugins/connection/docker.py index b27b08b8..73023525 100644 --- a/plugins/connection/docker.py +++ b/plugins/connection/docker.py @@ -166,8 +166,8 @@ class Connection(ConnectionBase): @staticmethod def _sanitize_version(version): - version = re.sub(u'[^0-9a-zA-Z.]', u'', version) - version = re.sub(u'^v', u'', version) + version = re.sub('[^0-9a-zA-Z.]', '', version) + version = re.sub('^v', '', version) return version def _old_docker_version(self): @@ -196,8 +196,8 @@ class Connection(ConnectionBase): cmd, cmd_output, err, returncode = self._old_docker_version() if returncode == 0: - for line in to_text(cmd_output, errors='surrogate_or_strict').split(u'\n'): - if line.startswith(u'Server version:'): # old docker versions + for line in to_text(cmd_output, errors='surrogate_or_strict').split('\n'): + if line.startswith('Server version:'): # old docker versions return self._sanitize_version(line.split()[2]) cmd, cmd_output, err, returncode = self._new_docker_version() @@ -218,12 +218,12 @@ class Connection(ConnectionBase): out = to_text(out, errors='surrogate_or_strict') if p.returncode != 0: - display.warning(u'unable to retrieve default user from docker container: %s %s' % (out, to_text(err))) + display.warning('unable to retrieve default user from docker container: %s %s' % (out, to_text(err))) self._container_user_cache[container] = None return None # The default exec user is root, unless it was changed in the Dockerfile with USER - user = out.strip() or u'root' + user = out.strip() or 'root' self._container_user_cache[container] = user return user @@ -257,7 +257,7 @@ class Connection(ConnectionBase): if self.get_option('working_dir') is not None: local_cmd += [b'-w', to_bytes(self.get_option('working_dir'), errors='surrogate_or_strict')] - if self.docker_version != u'dev' and LooseVersion(self.docker_version) < LooseVersion(u'18.06'): + if self.docker_version != 'dev' and LooseVersion(self.docker_version) < LooseVersion('18.06'): # https://github.com/docker/cli/pull/732, first appeared in release 18.06.0 raise AnsibleConnectionFailure( 'Providing the working directory requires Docker CLI version 18.06 or newer. You have Docker CLI version {0}.' @@ -302,24 +302,24 @@ class Connection(ConnectionBase): self._set_docker_args() self._version = self._get_docker_version() - if self._version == u'dev': - display.warning(u'Docker version number is "dev". Will assume latest version.') - if self._version != u'dev' and LooseVersion(self._version) < LooseVersion(u'1.3'): + if self._version == 'dev': + display.warning('Docker version number is "dev". Will assume latest version.') + if self._version != 'dev' and LooseVersion(self._version) < LooseVersion('1.3'): raise AnsibleError('docker connection type requires docker 1.3 or higher') return self._version def _get_actual_user(self): if self.remote_user is not None: # An explicit user is provided - if self.docker_version == u'dev' or LooseVersion(self.docker_version) >= LooseVersion(u'1.7'): + if self.docker_version == 'dev' or LooseVersion(self.docker_version) >= LooseVersion('1.7'): # Support for specifying the exec user was added in docker 1.7 return self.remote_user else: self.remote_user = None actual_user = self._get_docker_remote_user() if actual_user != self.get_option('remote_user'): - display.warning(u'docker {0} does not support remote_user, using container default: {1}' - .format(self.docker_version, self.actual_user or u'?')) + display.warning('docker {0} does not support remote_user, using container default: {1}' + .format(self.docker_version, self.actual_user or '?')) return actual_user elif self._display.verbosity > 2: # Since we are not setting the actual_user, look it up so we have it for logging later @@ -335,8 +335,8 @@ class Connection(ConnectionBase): if not self._connected: self._set_conn_data() actual_user = self._get_actual_user() - display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format( - actual_user or u'?'), host=self.get_option('remote_addr') + display.vvv("ESTABLISH DOCKER CONNECTION FOR USER: {0}".format( + actual_user or '?'), host=self.get_option('remote_addr') ) self._connected = True @@ -349,7 +349,7 @@ class Connection(ConnectionBase): local_cmd = self._build_exec_cmd([self._play_context.executable, '-c', cmd]) - display.vvv(u"EXEC {0}".format(to_text(local_cmd)), host=self.get_option('remote_addr')) + display.vvv("EXEC {0}".format(to_text(local_cmd)), host=self.get_option('remote_addr')) display.debug("opening command with Popen()") local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd] diff --git a/plugins/connection/docker_api.py b/plugins/connection/docker_api.py index 248bac97..e7ea9887 100644 --- a/plugins/connection/docker_api.py +++ b/plugins/connection/docker_api.py @@ -186,8 +186,8 @@ class Connection(ConnectionBase): super(Connection, self)._connect() if not self._connected: self.actual_user = self.get_option('remote_user') - display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format( - self.actual_user or u'?'), host=self.get_option('remote_addr') + display.vvv("ESTABLISH DOCKER CONNECTION FOR USER: {0}".format( + self.actual_user or '?'), host=self.get_option('remote_addr') ) if self.client is None: self.client = AnsibleDockerClient(self, min_docker_api_version=MIN_DOCKER_API) @@ -197,12 +197,12 @@ class Connection(ConnectionBase): # Since we are not setting the actual_user, look it up so we have it for logging later # Only do this if display verbosity is high enough that we'll need the value # This saves overhead from calling into docker when we do not need to - display.vvv(u"Trying to determine actual user") + display.vvv("Trying to determine actual user") result = self._call_client(lambda: self.client.get_json('/containers/{0}/json', self.get_option('remote_addr'))) if result.get('Config'): self.actual_user = result['Config'].get('User') if self.actual_user is not None: - display.vvv(u"Actual user is '{0}'".format(self.actual_user)) + display.vvv("Actual user is '{0}'".format(self.actual_user)) def exec_command(self, cmd, in_data=None, sudoable=False): """ Run a command on the docker host """ @@ -214,7 +214,7 @@ class Connection(ConnectionBase): do_become = self.become and self.become.expect_prompt() and sudoable display.vvv( - u"EXEC {0}{1}{2}".format( + "EXEC {0}{1}{2}".format( to_text(command), ', with stdin ({0} bytes)'.format(len(in_data)) if in_data is not None else '', ', with become prompt' if do_become else '', @@ -248,7 +248,7 @@ class Connection(ConnectionBase): 'wrapped in quotes to avoid them being interpreted. {1}: {2!r}' .format(what.lower(), what, val) ) - data['Env'].append(u'{0}={1}'.format(to_text(k, errors='surrogate_or_strict'), to_text(v, errors='surrogate_or_strict'))) + data['Env'].append('{0}={1}'.format(to_text(k, errors='surrogate_or_strict'), to_text(v, errors='surrogate_or_strict'))) if self.get_option('working_dir') is not None: data['WorkingDir'] = self.get_option('working_dir') diff --git a/plugins/connection/nsenter.py b/plugins/connection/nsenter.py index 2a858104..2130d083 100644 --- a/plugins/connection/nsenter.py +++ b/plugins/connection/nsenter.py @@ -76,7 +76,7 @@ class Connection(ConnectionBase): if not self._connected: display.vvv( - u"ESTABLISH NSENTER CONNECTION FOR USER: {0}".format( + "ESTABLISH NSENTER CONNECTION FOR USER: {0}".format( self._play_context.remote_user ), host=self._play_context.remote_addr, @@ -115,7 +115,7 @@ class Connection(ConnectionBase): cmd_parts = nsenter_cmd_parts + cmd cmd = [to_bytes(arg) for arg in cmd_parts] - display.vvv(u"EXEC {0}".format(to_text(cmd)), host=self._play_context.remote_addr) + display.vvv("EXEC {0}".format(to_text(cmd)), host=self._play_context.remote_addr) display.debug("opening command with Popen()") master = None @@ -204,7 +204,7 @@ class Connection(ConnectionBase): in_path = unfrackpath(in_path, basedir=self.cwd) out_path = unfrackpath(out_path, basedir=self.cwd) - display.vvv(u"PUT {0} to {1}".format(in_path, out_path), host=self._play_context.remote_addr) + display.vvv("PUT {0} to {1}".format(in_path, out_path), host=self._play_context.remote_addr) try: with open(to_bytes(in_path, errors="surrogate_or_strict"), "rb") as in_file: in_data = in_file.read() @@ -222,7 +222,7 @@ class Connection(ConnectionBase): try: rc, out, err = self.exec_command(cmd=["cat", in_path]) - display.vvv(u"FETCH {0} TO {1}".format(in_path, out_path), host=self._play_context.remote_addr) + display.vvv("FETCH {0} TO {1}".format(in_path, out_path), host=self._play_context.remote_addr) if rc != 0: raise AnsibleError("failed to transfer file to {0}: {1}".format(in_path, err)) with open(to_bytes(out_path, errors='surrogate_or_strict'), 'wb') as out_file: diff --git a/plugins/module_utils/_api/api/client.py b/plugins/module_utils/_api/api/client.py index b539671f..fab66c8d 100644 --- a/plugins/module_utils/_api/api/client.py +++ b/plugins/module_utils/_api/api/client.py @@ -55,15 +55,15 @@ class APIClient( >>> import docker >>> client = docker.APIClient(base_url='unix://var/run/docker.sock') >>> client.version() - {u'ApiVersion': u'1.33', - u'Arch': u'amd64', - u'BuildTime': u'2017-11-19T18:46:37.000000000+00:00', - u'GitCommit': u'f4ffd2511c', - u'GoVersion': u'go1.9.2', - u'KernelVersion': u'4.14.3-1-ARCH', - u'MinAPIVersion': u'1.12', - u'Os': u'linux', - u'Version': u'17.10.0-ce'} + {'ApiVersion': '1.33', + 'Arch': 'amd64', + 'BuildTime': '2017-11-19T18:46:37.000000000+00:00', + 'GitCommit': 'f4ffd2511c', + 'GoVersion': 'go1.9.2', + 'KernelVersion': '4.14.3-1-ARCH', + 'MinAPIVersion': '1.12', + 'Os': 'linux', + 'Version': '17.10.0-ce'} Args: base_url (str): URL to the Docker server. For example, diff --git a/plugins/module_utils/_api/utils/json_stream.py b/plugins/module_utils/_api/utils/json_stream.py index e2bd8e92..caf400b1 100644 --- a/plugins/module_utils/_api/utils/json_stream.py +++ b/plugins/module_utils/_api/utils/json_stream.py @@ -52,7 +52,7 @@ def json_stream(stream): return split_buffer(stream, json_splitter, json_decoder.decode) -def line_splitter(buffer, separator=u'\n'): +def line_splitter(buffer, separator='\n'): index = buffer.find(str(separator)) if index == -1: return None diff --git a/plugins/module_utils/_api/utils/utils.py b/plugins/module_utils/_api/utils/utils.py index 0d7db9f1..6bafb2eb 100644 --- a/plugins/module_utils/_api/utils/utils.py +++ b/plugins/module_utils/_api/utils/utils.py @@ -491,7 +491,7 @@ def format_environment(environment): if isinstance(value, bytes): value = value.decode('utf-8') - return u'{key}={value}'.format(key=key, value=value) + return '{key}={value}'.format(key=key, value=value) return [format_env(*var) for var in environment.items()] diff --git a/plugins/module_utils/_scramble.py b/plugins/module_utils/_scramble.py index 3b82ab58..17cfe28a 100644 --- a/plugins/module_utils/_scramble.py +++ b/plugins/module_utils/_scramble.py @@ -35,7 +35,7 @@ def unscramble(value, key): '''Do NOT use this for cryptographic purposes!''' if len(key) < 1: raise ValueError('Key must be at least one byte') - if not value.startswith(u'=S='): + if not value.startswith('=S='): raise ValueError('Value does not start with indicator') value = base64.b64decode(value[3:]) k = key[0] diff --git a/plugins/module_utils/util.py b/plugins/module_utils/util.py index 2eca037d..062540ab 100644 --- a/plugins/module_utils/util.py +++ b/plugins/module_utils/util.py @@ -93,9 +93,9 @@ def log_debug(msg, pretty_print=False): with open('docker.log', 'a') as log_file: if pretty_print: log_file.write(json.dumps(msg, sort_keys=True, indent=4, separators=(',', ': '))) - log_file.write(u'\n') + log_file.write('\n') else: - log_file.write(msg + u'\n') + log_file.write(f"{msg}\n") class DockerBaseClass(object): diff --git a/plugins/modules/docker_network.py b/plugins/modules/docker_network.py index a9bd04fd..c6e6a53f 100644 --- a/plugins/modules/docker_network.py +++ b/plugins/modules/docker_network.py @@ -389,8 +389,8 @@ class DockerNetworkManager(object): self.parameters = TaskParameters(client) self.check_mode = self.client.check_mode self.results = { - u'changed': False, - u'actions': [] + 'changed': False, + 'actions': [] } self.diff = self.client.module._diff self.diff_tracker = DifferenceTracker() diff --git a/plugins/modules/docker_stack.py b/plugins/modules/docker_stack.py index b6b98621..af3f644a 100644 --- a/plugins/modules/docker_stack.py +++ b/plugins/modules/docker_stack.py @@ -121,7 +121,7 @@ stack_spec_diff: definition. sample: > "stack_spec_diff": - {'test_stack_test_service': {u'TaskTemplate': {u'ContainerSpec': {delete: [u'Env']}}}} + {'test_stack_test_service': {'TaskTemplate': {'ContainerSpec': {delete: ['Env']}}}} returned: on change type: dict """ diff --git a/plugins/modules/docker_volume.py b/plugins/modules/docker_volume.py index 35d8e43f..b810a34c 100644 --- a/plugins/modules/docker_volume.py +++ b/plugins/modules/docker_volume.py @@ -159,8 +159,8 @@ class DockerVolumeManager(object): self.parameters = TaskParameters(client) self.check_mode = self.client.check_mode self.results = { - u'changed': False, - u'actions': [] + 'changed': False, + 'actions': [] } self.diff = self.client.module._diff self.diff_tracker = DifferenceTracker() @@ -185,10 +185,10 @@ class DockerVolumeManager(object): except APIError as e: self.client.fail(to_native(e)) - if volumes[u'Volumes'] is None: + if volumes['Volumes'] is None: return None - for volume in volumes[u'Volumes']: + for volume in volumes['Volumes']: if volume['Name'] == self.parameters.volume_name: return volume diff --git a/plugins/plugin_utils/unsafe.py b/plugins/plugin_utils/unsafe.py index a03d1e34..a6ad363f 100644 --- a/plugins/plugin_utils/unsafe.py +++ b/plugins/plugin_utils/unsafe.py @@ -13,7 +13,7 @@ from ansible.utils.unsafe_proxy import ( wrap_var as _make_unsafe, ) -_RE_TEMPLATE_CHARS = re.compile(u'[{}]') +_RE_TEMPLATE_CHARS = re.compile('[{}]') _RE_TEMPLATE_CHARS_BYTES = re.compile(b'[{}]') diff --git a/tests/unit/plugins/module_utils/_api/utils/test_json_stream.py b/tests/unit/plugins/module_utils/_api/utils/test_json_stream.py index c578ffaf..d6aae484 100644 --- a/tests/unit/plugins/module_utils/_api/utils/test_json_stream.py +++ b/tests/unit/plugins/module_utils/_api/utils/test_json_stream.py @@ -33,12 +33,12 @@ class TestStreamAsText: def test_stream_with_non_utf_unicode_character(self): stream = [b'\xed\xf3\xf3'] output, = stream_as_text(stream) - assert output == u'���' + assert output == '���' def test_stream_with_utf_character(self): - stream = [u'ěĝ'.encode('utf-8')] + stream = ['ěĝ'.encode('utf-8')] output, = stream_as_text(stream) - assert output == u'ěĝ' + assert output == 'ěĝ' class TestJsonStream: diff --git a/tests/unit/plugins/module_utils/_api/utils/test_utils.py b/tests/unit/plugins/module_utils/_api/utils/test_utils.py index a556a128..532decef 100644 --- a/tests/unit/plugins/module_utils/_api/utils/test_utils.py +++ b/tests/unit/plugins/module_utils/_api/utils/test_utils.py @@ -176,23 +176,23 @@ class ConverVolumeBindsTest(unittest.TestCase): assert convert_volume_binds(data) == ['/mnt/vol1:/data:rw'] def test_convert_volume_binds_unicode_bytes_input(self): - expected = [u'/mnt/지연:/unicode/박:rw'] + expected = ['/mnt/지연:/unicode/박:rw'] data = { - u'/mnt/지연'.encode('utf-8'): { - 'bind': u'/unicode/박'.encode('utf-8'), - 'mode': u'rw' + '/mnt/지연'.encode('utf-8'): { + 'bind': '/unicode/박'.encode('utf-8'), + 'mode': 'rw' } } assert convert_volume_binds(data) == expected def test_convert_volume_binds_unicode_unicode_input(self): - expected = [u'/mnt/지연:/unicode/박:rw'] + expected = ['/mnt/지연:/unicode/박:rw'] data = { - u'/mnt/지연': { - 'bind': u'/unicode/박', - 'mode': u'rw' + '/mnt/지연': { + 'bind': '/unicode/박', + 'mode': 'rw' } } assert convert_volume_binds(data) == expected @@ -457,7 +457,7 @@ class UtilsTest(unittest.TestCase): class SplitCommandTest(unittest.TestCase): def test_split_command_with_unicode(self): - assert split_command(u'echo μμ') == ['echo', 'μμ'] + assert split_command('echo μμ') == ['echo', 'μμ'] class FormatEnvironmentTest(unittest.TestCase): @@ -465,7 +465,7 @@ class FormatEnvironmentTest(unittest.TestCase): env_dict = { 'ARTIST_NAME': b'\xec\x86\xa1\xec\xa7\x80\xec\x9d\x80' } - assert format_environment(env_dict) == [u'ARTIST_NAME=송지은'] + assert format_environment(env_dict) == ['ARTIST_NAME=송지은'] def test_format_env_no_value(self): env_dict = { diff --git a/tests/unit/plugins/module_utils/test__scramble.py b/tests/unit/plugins/module_utils/test__scramble.py index ff004306..bdd23d7c 100644 --- a/tests/unit/plugins/module_utils/test__scramble.py +++ b/tests/unit/plugins/module_utils/test__scramble.py @@ -14,9 +14,9 @@ from ansible_collections.community.docker.plugins.module_utils._scramble import @pytest.mark.parametrize('plaintext, key, scrambled', [ - (u'', b'0', '=S='), - (u'hello', b'\x00', '=S=aGVsbG8='), - (u'hello', b'\x01', '=S=aWRtbW4='), + ('', b'0', '=S='), + ('hello', b'\x00', '=S=aGVsbG8='), + ('hello', b'\x01', '=S=aWRtbW4='), ]) def test_scramble_unscramble(plaintext, key, scrambled): scrambled_ = scramble(plaintext, key) diff --git a/tests/unit/plugins/modules/test_docker_swarm_service.py b/tests/unit/plugins/modules/test_docker_swarm_service.py index 1cef623b..6b7175fe 100644 --- a/tests/unit/plugins/modules/test_docker_swarm_service.py +++ b/tests/unit/plugins/modules/test_docker_swarm_service.py @@ -207,7 +207,7 @@ def test_has_list_changed(docker_swarm_service): ) assert docker_swarm_service.has_list_changed( ['sleep', '3400'], - [u'sleep', u'3600'], + ['sleep', '3600'], sort_lists=False ) diff --git a/tests/unit/plugins/plugin_utils/test_unsafe.py b/tests/unit/plugins/plugin_utils/test_unsafe.py index c13237c8..d9021ece 100644 --- a/tests/unit/plugins/plugin_utils/test_unsafe.py +++ b/tests/unit/plugins/plugin_utils/test_unsafe.py @@ -22,14 +22,14 @@ from ansible_collections.community.docker.plugins.plugin_utils.unsafe import ( TEST_MAKE_UNSAFE = [ ( - _make_trusted(u'text'), + _make_trusted('text'), [], [ (), ], ), ( - _make_trusted(u'{{text}}'), + _make_trusted('{{text}}'), [ (), ], @@ -117,7 +117,7 @@ def test_make_unsafe_idempotence(): def test_make_unsafe_dict_key(): value = { - _make_trusted(u'test'): 2, + _make_trusted('test'): 2, } if not SUPPORTS_DATA_TAGGING: value[_make_trusted(b"test")] = 1 @@ -127,7 +127,7 @@ def test_make_unsafe_dict_key(): assert _is_trusted(obj) value = { - _make_trusted(u'{{test}}'): 2, + _make_trusted('{{test}}'): 2, } if not SUPPORTS_DATA_TAGGING: value[_make_trusted(b"{{test}}")] = 1 @@ -138,7 +138,7 @@ def test_make_unsafe_dict_key(): def test_make_unsafe_set(): - value = set([_make_trusted(u'test')]) + value = set([_make_trusted('test')]) if not SUPPORTS_DATA_TAGGING: value.add(_make_trusted(b"test")) unsafe_value = make_unsafe(value) @@ -146,7 +146,7 @@ def test_make_unsafe_set(): for obj in unsafe_value: assert _is_trusted(obj) - value = set([_make_trusted(u'{{test}}')]) + value = set([_make_trusted('{{test}}')]) if not SUPPORTS_DATA_TAGGING: value.add(_make_trusted(b"{{test}}")) unsafe_value = make_unsafe(value)