Skip to content

Commit

Permalink
Docker SDK for Python 7+: make sure that ssl_version is not passed, a…
Browse files Browse the repository at this point in the history
…nd error out if it was explicitly set (ansible-collections#715)

* Do not accept ssl_version for Docker SDK for Python 7.0.0+.

* Add changelog fragment.

* Generally avoid sending None values to TLSConfig. Potentially prevents similar errors in the future, assuming the users do not pass values in.

* Python 2.6 compatibility.
  • Loading branch information
felixfontein authored Dec 9, 2023
1 parent 4929ef6 commit 3aa1ddc
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 0 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/715-docker-7.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- "modules and plugins using the Docker SDK for Python - remove ``ssl_version`` from the parameters passed to Docker SDK for Python 7.0.0+. Explicitly fail with a nicer error message if it was explicitly set in this case (https://github.com/ansible-collections/community.docker/pull/715)."
2 changes: 2 additions & 0 deletions plugins/doc_fragments/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class ModuleDocFragment(object):
- Provide a valid SSL version number. Default value determined by L(SSL Python module, https://docs.python.org/3/library/ssl.html).
- If the value is not specified in the task, the value of environment variable E(DOCKER_SSL_VERSION) will be
used instead.
- B(Note:) this option is no longer supported for Docker SDK for Python 7.0.0+. Specifying it with Docker SDK for
Python 7.0.0 or newer will lead to an error.
type: str
tls:
description:
Expand Down
14 changes: 14 additions & 0 deletions plugins/module_utils/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,20 @@ class NotFound(Exception): # noqa: F811


def _get_tls_config(fail_function, **kwargs):
if 'ssl_version' in kwargs and LooseVersion(docker_version) >= LooseVersion('7.0.0b1'):
ssl_version = kwargs.pop('ssl_version')
if ssl_version is not None:
fail_function(
"ssl_version is not compatible with Docker SDK for Python 7.0.0+. You are using"
" Docker SDK for Python {docker_py_version}. The ssl_version option (value: {ssl_version})"
" has either been set directly or with the environment variable DOCKER_SSL_VERSION."
" Make sure it is not set, or switch to an older version of Docker SDK for Python.".format(
docker_py_version=docker_version,
ssl_version=ssl_version,
)
)
# Filter out all None parameters
kwargs = dict((k, v) for k, v in kwargs.items() if v is not None)
try:
tls_config = TLSConfig(**kwargs)
return tls_config
Expand Down

0 comments on commit 3aa1ddc

Please sign in to comment.