re-add collections; aap not happy

This commit is contained in:
2024-02-07 17:21:22 -05:00
parent 4ac2aab28d
commit 80f03628d2
3297 changed files with 461576 additions and 6 deletions

View File

@ -0,0 +1,72 @@
# Copyright (c) 2021, Felix Fontein <felix@fontein.de>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: a_module
short_description: Test whether a given string refers to an existing module or action plugin
version_added: 4.0.0
author: Felix Fontein (@felixfontein)
description:
- Test whether a given string refers to an existing module or action plugin.
- This can be useful in roles, which can use this to ensure that required modules are present ahead of time.
options:
_input:
description: A string denoting a fully qualified collection name (FQCN) of a module or action plugin.
type: string
required: true
'''
EXAMPLES = '''
- name: Make sure that community.aws.route53 is available
ansible.builtin.assert:
that:
- >
'community.aws.route53' is community.general.a_module
- name: Make sure that community.general.does_not_exist is not a module or action plugin
ansible.builtin.assert:
that:
- "'community.general.does_not_exist' is not community.general.a_module"
'''
RETURN = '''
_value:
description: Whether the module or action plugin denoted by the input exists.
type: boolean
'''
from ansible.plugins.loader import action_loader, module_loader
try:
from ansible.errors import AnsiblePluginRemovedError
except ImportError:
AnsiblePluginRemovedError = Exception
def a_module(term):
"""
Example:
- 'community.general.ufw' is community.general.a_module
- 'community.general.does_not_exist' is not community.general.a_module
"""
try:
for loader in (action_loader, module_loader):
data = loader.find_plugin(term)
if data is not None:
return True
return False
except AnsiblePluginRemovedError:
return False
class TestModule(object):
''' Ansible jinja2 tests '''
def tests(self):
return {
'a_module': a_module,
}

View File

@ -0,0 +1,103 @@
# Copyright (c) 2023, Vladimir Botka <vbotka@gmail.com>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.errors import AnsibleError
from ansible.module_utils.six import raise_from
try:
from fqdn import FQDN
except ImportError as imp_exc:
ANOTHER_LIBRARY_IMPORT_ERROR = imp_exc
else:
ANOTHER_LIBRARY_IMPORT_ERROR = None
DOCUMENTATION = '''
name: fqdn_valid
short_description: Validates fully-qualified domain names against RFC 1123
version_added: 8.1.0
author: Vladimir Botka (@vbotka)
requirements:
- fqdn>=1.5.1 (PyPI)
description:
- This test validates Fully Qualified Domain Names (FQDNs)
conforming to the Internet Engineering Task Force specification
RFC 1123 and RFC 952.
- The design intent is to validate that a string would be
traditionally acceptable as a public Internet hostname to
RFC-conforming software, which is a strict subset of the logic
in modern web browsers like Mozilla Firefox and Chromium that
determines whether make a DNS lookup.
- Certificate Authorities like Let's Encrypt run a narrower set of
string validation logic to determine validity for issuance. This
test is not intended to achieve functional parity with CA
issuance.
- Single label names are allowed by default (O(min_labels=1)).
options:
_input:
description: Name of the host.
type: str
required: true
min_labels:
description: Required minimum of labels, separated by period.
default: 1
type: int
required: false
allow_underscores:
description: Allow underscore characters.
default: false
type: bool
required: false
'''
EXAMPLES = '''
- name: Make sure that hostname is valid
ansible.builtin.assert:
that: hostname is community.general.fqdn_valid
- name: Make sure that hostname is at least 3 labels long (a.b.c)
ansible.builtin.assert:
that: hostname is community.general.fqdn_valid(min_labels=3)
- name: Make sure that hostname is at least 2 labels long (a.b). Allow '_'
ansible.builtin.assert:
that: hostname is community.general.fqdn_valid(min_labels=2, allow_underscores=True)
'''
RETURN = '''
_value:
description: Whether the name is valid.
type: bool
'''
def fqdn_valid(name, min_labels=1, allow_underscores=False):
"""
Example:
- 'srv.example.com' is community.general.fqdn_valid
- 'foo_bar.example.com' is community.general.fqdn_valid(allow_underscores=True)
"""
if ANOTHER_LIBRARY_IMPORT_ERROR:
raise_from(
AnsibleError('Python package fqdn must be installed to use this test.'),
ANOTHER_LIBRARY_IMPORT_ERROR
)
fobj = FQDN(name, min_labels=min_labels, allow_underscores=allow_underscores)
return (fobj.is_valid)
class TestModule(object):
''' Ansible test hostname validity.
https://pypi.org/project/fqdn/
'''
def tests(self):
return {
'fqdn_valid': fqdn_valid,
}