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