mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
[PR #8497/f0940d82 backport][stable-8] homectl, udm_user: guard crypt imports (#8498)
homectl, udm_user: guard crypt imports (#8497)
Guard crypt import.
(cherry picked from commit f0940d82dc
)
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
4f37a931a0
commit
9315a7bb56
3 changed files with 50 additions and 4 deletions
3
changelogs/fragments/8497-crypt.yml
Normal file
3
changelogs/fragments/8497-crypt.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
known_issues:
|
||||||
|
- "homectl - the module does not work under Python 3.13 or newer, since it relies on the removed ``crypt`` standard library module (https://github.com/ansible-collections/community.general/issues/4691, https://github.com/ansible-collections/community.general/pull/8497)."
|
||||||
|
- "udm_user - the module does not work under Python 3.13 or newer, since it relies on the removed ``crypt`` standard library module (https://github.com/ansible-collections/community.general/issues/4690, https://github.com/ansible-collections/community.general/pull/8497)."
|
|
@ -17,6 +17,12 @@ short_description: Manage user accounts with systemd-homed
|
||||||
version_added: 4.4.0
|
version_added: 4.4.0
|
||||||
description:
|
description:
|
||||||
- Manages a user's home directory managed by systemd-homed.
|
- Manages a user's home directory managed by systemd-homed.
|
||||||
|
notes:
|
||||||
|
- This module does B(not) work with Python 3.13 or newer. It uses the deprecated L(crypt Python module,
|
||||||
|
https://docs.python.org/3.12/library/crypt.html) from the Python standard library, which was removed
|
||||||
|
from Python 3.13.
|
||||||
|
requirements:
|
||||||
|
- Python 3.12 or earlier
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- community.general.attributes
|
- community.general.attributes
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -263,12 +269,21 @@ data:
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import crypt
|
|
||||||
import json
|
import json
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
import traceback
|
||||||
|
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||||
from ansible.module_utils.basic import jsonify
|
from ansible.module_utils.basic import jsonify
|
||||||
from ansible.module_utils.common.text.formatters import human_to_bytes
|
from ansible.module_utils.common.text.formatters import human_to_bytes
|
||||||
|
|
||||||
|
try:
|
||||||
|
import crypt
|
||||||
|
except ImportError:
|
||||||
|
HAS_CRYPT = False
|
||||||
|
CRYPT_IMPORT_ERROR = traceback.format_exc()
|
||||||
|
else:
|
||||||
|
HAS_CRYPT = True
|
||||||
|
CRYPT_IMPORT_ERROR = None
|
||||||
|
|
||||||
|
|
||||||
class Homectl(object):
|
class Homectl(object):
|
||||||
'''#TODO DOC STRINGS'''
|
'''#TODO DOC STRINGS'''
|
||||||
|
@ -591,6 +606,12 @@ def main():
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not HAS_CRYPT:
|
||||||
|
module.fail_json(
|
||||||
|
msg=missing_required_lib('crypt (part of Python 3.13 standard library)'),
|
||||||
|
exception=CRYPT_IMPORT_ERROR,
|
||||||
|
)
|
||||||
|
|
||||||
homectl = Homectl(module)
|
homectl = Homectl(module)
|
||||||
homectl.result['state'] = homectl.state
|
homectl.result['state'] = homectl.state
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,12 @@ description:
|
||||||
- "This module allows to manage posix users on a univention corporate
|
- "This module allows to manage posix users on a univention corporate
|
||||||
server (UCS).
|
server (UCS).
|
||||||
It uses the python API of the UCS to create a new object or edit it."
|
It uses the python API of the UCS to create a new object or edit it."
|
||||||
|
notes:
|
||||||
|
- This module does B(not) work with Python 3.13 or newer. It uses the deprecated L(crypt Python module,
|
||||||
|
https://docs.python.org/3.12/library/crypt.html) from the Python standard library, which was removed
|
||||||
|
from Python 3.13.
|
||||||
|
requirements:
|
||||||
|
- Python 3.12 or earlier
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- community.general.attributes
|
- community.general.attributes
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -324,10 +330,10 @@ EXAMPLES = '''
|
||||||
|
|
||||||
RETURN = '''# '''
|
RETURN = '''# '''
|
||||||
|
|
||||||
import crypt
|
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
import traceback
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||||
from ansible_collections.community.general.plugins.module_utils.univention_umc import (
|
from ansible_collections.community.general.plugins.module_utils.univention_umc import (
|
||||||
umc_module_for_add,
|
umc_module_for_add,
|
||||||
umc_module_for_edit,
|
umc_module_for_edit,
|
||||||
|
@ -335,6 +341,15 @@ from ansible_collections.community.general.plugins.module_utils.univention_umc i
|
||||||
base_dn,
|
base_dn,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import crypt
|
||||||
|
except ImportError:
|
||||||
|
HAS_CRYPT = False
|
||||||
|
CRYPT_IMPORT_ERROR = traceback.format_exc()
|
||||||
|
else:
|
||||||
|
HAS_CRYPT = True
|
||||||
|
CRYPT_IMPORT_ERROR = None
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
expiry = date.strftime(date.today() + timedelta(days=365), "%Y-%m-%d")
|
expiry = date.strftime(date.today() + timedelta(days=365), "%Y-%m-%d")
|
||||||
|
@ -451,6 +466,13 @@ def main():
|
||||||
('state', 'present', ['firstname', 'lastname', 'password'])
|
('state', 'present', ['firstname', 'lastname', 'password'])
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not HAS_CRYPT:
|
||||||
|
module.fail_json(
|
||||||
|
msg=missing_required_lib('crypt (part of Python 3.13 standard library)'),
|
||||||
|
exception=CRYPT_IMPORT_ERROR,
|
||||||
|
)
|
||||||
|
|
||||||
username = module.params['username']
|
username = module.params['username']
|
||||||
position = module.params['position']
|
position = module.params['position']
|
||||||
ou = module.params['ou']
|
ou = module.params['ou']
|
||||||
|
|
Loading…
Reference in a new issue