Skip to content

Commit

Permalink
Prepare for distutils.version being removed in Python 3.12 (#3936)
Browse files Browse the repository at this point in the history
* Prepare for distutils.version being removed in Python 2.12.

* Fix copy'n'paste error.

* Re-add Loose prefix.

* Fix Python version typos.

* Improve formulation.

* Move message into own line.

* Fix casing, now that the object is no longer called Version.
  • Loading branch information
felixfontein committed Dec 24, 2021
1 parent f34c454 commit a2f72be
Show file tree
Hide file tree
Showing 41 changed files with 106 additions and 63 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/3936-distutils.version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- "Various modules and plugins - use vendored version of ``distutils.version`` included in ansible-core 2.12 if available. This avoids breakage when ``distutils`` is removed from the standard library of Python 3.12. Note that ansible-core 2.11, ansible-base 2.10 and Ansible 2.9 are right now not compatible with Python 3.12, hence this fix does not target these ansible-core/-base/2.9 versions (https://github.com/ansible-collections/community.general/pull/3936)."
2 changes: 1 addition & 1 deletion plugins/filter/version_sort.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

from distutils.version import LooseVersion
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion


def version_sort(value, reverse=False):
Expand Down
1 change: 0 additions & 1 deletion plugins/inventory/cobbler.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
password: secure
'''

from distutils.version import LooseVersion
import socket

from ansible.errors import AnsibleError
Expand Down
3 changes: 2 additions & 1 deletion plugins/inventory/proxmox.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,13 @@
import re

from ansible.module_utils.common._collections_compat import MutableMapping
from distutils.version import LooseVersion

from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.module_utils.six.moves.urllib.parse import urlencode

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

# 3rd party imports
try:
import requests
Expand Down
4 changes: 2 additions & 2 deletions plugins/inventory/xen_orchestra.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@
import json
import ssl

from distutils.version import LooseVersion

from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

# 3rd party imports
try:
HAS_WEBSOCKET = True
Expand Down
6 changes: 3 additions & 3 deletions plugins/module_utils/gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

from distutils.version import StrictVersion

from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.common.text.converters import to_native

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

try:
from urllib import quote_plus # Python 2.X
from urlparse import urljoin
Expand Down Expand Up @@ -79,7 +79,7 @@ def gitlab_authentication(module):
# python-gitlab library remove support for username/password authentication since 1.13.0
# Changelog : https://github.com/python-gitlab/python-gitlab/releases/tag/v1.13.0
# This condition allow to still support older version of the python-gitlab library
if StrictVersion(gitlab.__version__) < StrictVersion("1.13.0"):
if LooseVersion(gitlab.__version__) < LooseVersion("1.13.0"):
gitlab_instance = gitlab.Gitlab(url=gitlab_url, ssl_verify=validate_certs, email=gitlab_user, password=gitlab_password,
private_token=gitlab_token, api_version=4)
else:
Expand Down
3 changes: 2 additions & 1 deletion plugins/module_utils/influxdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
import traceback

from ansible.module_utils.basic import missing_required_lib
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
20 changes: 20 additions & 0 deletions plugins/module_utils/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-

# Copyright: (c) 2021, Felix Fontein <felix@fontein.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

"""Provide version object to compare version numbers."""

from __future__ import absolute_import, division, print_function
__metaclass__ = type

from ansible.module_utils.six import raise_from

try:
from ansible.module_utils.compat.version import LooseVersion
except ImportError:
try:
from distutils.version import LooseVersion
except ImportError as exc:
msg = 'To use this plugin or module with ansible-core < 2.11, you need to use Python < 3.12 with distutils.version present'
raise_from(ImportError(msg), exc)
2 changes: 1 addition & 1 deletion plugins/modules/cloud/centurylink/clc_aa_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
import os
import traceback

from distutils.version import LooseVersion
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/centurylink/clc_alert_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,8 @@
import json
import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_blueprint_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@

import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -132,8 +133,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_firewall_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,8 @@
import traceback
from ansible.module_utils.six.moves.urllib.parse import urlparse
from time import sleep
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -203,8 +204,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/centurylink/clc_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,8 @@

import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_loadbalancer.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,8 @@
import os
import traceback
from time import sleep
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -255,8 +256,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_modify_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,8 @@
import json
import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -355,8 +356,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/centurylink/clc_publicip.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@

import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,8 @@
import os
import time
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -478,8 +479,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
6 changes: 3 additions & 3 deletions plugins/modules/cloud/centurylink/clc_server_snapshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@

import os
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down Expand Up @@ -145,8 +146,7 @@ def __init__(self, module):
self.module.fail_json(msg=missing_required_lib('clc-sdk'), exception=CLC_IMP_ERR)
if not REQUESTS_FOUND:
self.module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR)
if requests.__version__ and LooseVersion(
requests.__version__) < LooseVersion('2.5.0'):
if requests.__version__ and LooseVersion(requests.__version__) < LooseVersion('2.5.0'):
self.module.fail_json(
msg='requests library version should be >= 2.5.0')

Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/misc/proxmox.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,8 @@

import time
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

try:
from proxmoxer import ProxmoxAPI
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/misc/proxmox_kvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -725,9 +725,10 @@
import re
import time
import traceback
from distutils.version import LooseVersion
from ansible.module_utils.six.moves.urllib.parse import quote

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

try:
from proxmoxer import ProxmoxAPI
HAS_PROXMOXER = True
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/cloud/misc/terraform.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,12 @@
import os
import json
import tempfile
from distutils.version import LooseVersion
from ansible.module_utils.six.moves import shlex_quote

from ansible.module_utils.basic import AnsibleModule

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

module = None


Expand Down
2 changes: 1 addition & 1 deletion plugins/modules/cloud/rackspace/rax_cbs.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@
register: my_volume
'''

from distutils.version import LooseVersion
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

try:
import pyrax
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/database/misc/kibana_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,10 @@
'''

import os
from distutils.version import LooseVersion
from ansible.module_utils.basic import AnsibleModule

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion


PACKAGE_STATE_MAP = dict(
present="--install",
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/files/xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,9 +356,10 @@
import re
import traceback

from distutils.version import LooseVersion
from io import BytesIO

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

LXML_IMP_ERR = None
try:
from lxml import etree, objectify
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/identity/ipa/ipa_subca.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,12 @@
type: dict
'''

from distutils.version import LooseVersion
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.ipa import IPAClient, ipa_argument_spec
from ansible.module_utils.common.text.converters import to_native

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion


class SubCAIPAClient(IPAClient):
def __init__(self, module, host, port, protocol):
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/monitoring/circonus_annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,8 @@
import json
import time
import traceback
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

REQUESTS_IMP_ERR = None
try:
Expand Down
3 changes: 2 additions & 1 deletion plugins/modules/net_tools/dnsimple.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,10 @@
RETURN = r"""# """

import traceback
from distutils.version import LooseVersion
import re

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion


class DNSimpleV1():
"""class which uses dnsimple-python < 2"""
Expand Down
5 changes: 3 additions & 2 deletions plugins/modules/notification/mqtt.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@
import ssl
import traceback
import platform
from distutils.version import LooseVersion

from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

HAS_PAHOMQTT = True
PAHOMQTT_IMP_ERR = None
Expand Down Expand Up @@ -207,7 +208,7 @@ def main():
if tls_version:
tls_version = tls_map.get(tls_version, ssl.PROTOCOL_SSLv23)
else:
if LooseVersion(platform.python_version()) <= "3.5.2":
if LooseVersion(platform.python_version()) <= LooseVersion("3.5.2"):
# Specifying `None` on later versions of python seems sufficient to
# instruct python to autonegotiate the SSL/TLS connection. On versions
# 3.5.2 and lower though we need to specify the version.
Expand Down
2 changes: 1 addition & 1 deletion plugins/modules/notification/sendgrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
import os
import traceback

from distutils.version import LooseVersion
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion

SENDGRID_IMP_ERR = None
try:
Expand Down
Loading

0 comments on commit a2f72be

Please sign in to comment.