Skip to content

fix: Make relative imports in collection modules work#1492

Open
thommyhh wants to merge 3 commits intomitogen-hq:masterfrom
webcoast-dk:bugfix/relative-imports-in-ansible-modules
Open

fix: Make relative imports in collection modules work#1492
thommyhh wants to merge 3 commits intomitogen-hq:masterfrom
webcoast-dk:bugfix/relative-imports-in-ansible-modules

Conversation

@thommyhh
Copy link
Copy Markdown

@thommyhh thommyhh commented Mar 25, 2026

Use NewStylePlanner for collection modules with relative imports and replace the relative imports with absolute imports.

Fixes #896

Use `NewStylePlanner` for collection modules with relative imports and replace the relative imports with absolute imports.
"""
runner_name = 'NewStyleRunner'
MARKER = re.compile(br'from ansible(?:_collections|\.module_utils)\.')
MARKER = re.compile(br'from ansible(?:_collections|\.module_utils)\.|from \.\.?(?:\w|\s)')
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue #896 mentions explicit-relative imports (e.g. from ..module_utils.core import AnsibleAWSModule) that

  • are relative by 2 levels (2 dots preceeding)
  • importing <some_prefix>.module_utils.<...>

This regex as written would also match imports that

  • are relative by 1 level (e.g. from .module_utils<...>)
  • do not involve <some_prefix>.module_utils<...>

Did you mean to cast such a wide net? What other relative imports is this meant to tackle?

>>> MARKER = re.compile(br'from ansible(?:_collections|\.module_utils)\.|from \.\.?(?:\w|\s)')
>>> MARKER.search('from .foo import bar')
<_sre.SRE_Match object at 0x7fc3d0054f38>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some rough grepping shows relative imports other than from ..module_utils are common in Ansible modules and module_utils. So question withdrawn.

Details
site-packages git:(master) ✗ ag 'from \.[^.m]' --py ansible/modules/ ansible/module_utils ansible_collections/*/*/plugins/module*
ansible/modules/git.py
809:            # Use original destination directory with data from .git file.
963:            # FIXME: determine this from .gitmodules

ansible/module_utils/_internal/_plugin_info.py
5:from . import _messages

ansible/module_utils/_internal/_ansiballz/_respawn.py
7:from . import _respawn_wrapper

ansible/module_utils/_internal/_traceback.py
11:from . import _stack

ansible/module_utils/_internal/_errors.py
11:from . import _messages

ansible/module_utils/_internal/_patches/_sys_intern_patch.py
9:from . import CallablePatch

ansible/module_utils/_internal/_patches/_socket_patch.py
9:from . import CallablePatch

ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py
9:from . import CallablePatch

ansible/module_utils/_internal/_concurrent/_futures.py
8:from . import _daemon_threading

ansible/module_utils/datatag.py
6:from ._internal import _datatag, _deprecator, _traceback, _messages
7:from ._internal._datatag import _tags

ansible/module_utils/testing.py
15:from . import basic as _basic

ansible/module_utils/basic.py
88:from ._internal import _traceback, _errors, _debugging, _deprecator, _messages
90:from .common.text.converters import (

ansible_collections/amazon/aws/plugins/module_utils/direct_connect.py
41:from .retries import AWSRetry

ansible_collections/amazon/aws/plugins/module_utils/retries.py
40:from .cloud import CloudRetry

ansible_collections/amazon/aws/plugins/module_utils/transformation.py
43:from .botocore import normalize_boto3_result
44:from .tagging import boto3_tag_list_to_ansible_dict

ansible_collections/amazon/aws/plugins/module_utils/waf.py
41:from .retries import AWSRetry
42:from .waiters import get_waiter

ansible_collections/amazon/aws/plugins/module_utils/botocore.py
67:    from .retries import RetryingBotoClientWrapper
85:from .common import get_collection_info
86:from .exceptions import AnsibleBotocoreError
87:from .retries import AWSRetry

ansible_collections/amazon/aws/plugins/module_utils/iam.py
15:from .arn import parse_aws_arn
16:from .arn import validate_aws_arn
17:from .botocore import is_boto3_error_code
18:from .errors import AWSErrorHandler
19:from .exceptions import AnsibleAWSError
20:from .retries import AWSRetry
21:from .tagging import ansible_dict_to_boto3_tag_list
22:from .transformation import AnsibleAWSResource
23:from .transformation import AnsibleAWSResourceList
24:from .transformation import BotoResource
25:from .transformation import BotoResourceList
26:from .transformation import boto3_resource_list_to_ansible_dict
27:from .transformation import boto3_resource_to_ansible_dict

ansible_collections/amazon/aws/plugins/module_utils/cloudfront_facts.py
27:from .retries import AWSRetry
28:from .tagging import boto3_tag_list_to_ansible_dict

ansible_collections/amazon/aws/plugins/module_utils/core.py
41:from .arn import parse_aws_arn  # pylint: disable=unused-import
44:from .botocore import HAS_BOTO3  # pylint: disable=unused-import
45:from .botocore import get_boto3_client_method_parameters  # pylint: disable=unused-import
46:from .botocore import is_boto3_error_code  # pylint: disable=unused-import
47:from .botocore import is_boto3_error_message  # pylint: disable=unused-import
48:from .botocore import normalize_boto3_result  # pylint: disable=unused-import
51:from .exceptions import AnsibleAWSError  # pylint: disable=unused-import
57:from .transformation import scrub_none_parameters  # pylint: disable=unused-import

ansible_collections/amazon/aws/plugins/module_utils/elbv2.py
21:from .ec2 import get_ec2_security_group_ids_from_names
22:from .elb_utils import AnsibleELBv2Error
23:from .elb_utils import add_listener_certificates
24:from .elb_utils import add_tags
25:from .elb_utils import convert_tg_name_to_arn
26:from .elb_utils import create_listener
27:from .elb_utils import create_load_balancer
28:from .elb_utils import create_rule
29:from .elb_utils import delete_listener
30:from .elb_utils import delete_load_balancer
31:from .elb_utils import delete_rule
32:from .elb_utils import describe_listeners
33:from .elb_utils import describe_load_balancer_attributes
34:from .elb_utils import describe_rules
35:from .elb_utils import describe_tags
36:from .elb_utils import get_elb
37:from .elb_utils import modify_listener
38:from .elb_utils import modify_load_balancer_attributes
39:from .elb_utils import modify_rule
40:from .elb_utils import remove_tags
41:from .elb_utils import set_ip_address_type
42:from .elb_utils import set_rule_priorities
43:from .elb_utils import set_security_groups
44:from .elb_utils import set_subnets
46:from .retries import AWSRetry
47:from .tagging import ansible_dict_to_boto3_tag_list
48:from .tagging import boto3_tag_list_to_ansible_dict
49:from .transformation import scrub_none_parameters
50:from .waiters import get_waiter

ansible_collections/amazon/aws/plugins/module_utils/errors.py
13:from .exceptions import AnsibleAWSError

ansible_collections/amazon/aws/plugins/module_utils/acm.py
27:from .botocore import is_boto3_error_code
28:from .retries import AWSRetry
29:from .tagging import ansible_dict_to_boto3_tag_list
30:from .tagging import boto3_tag_list_to_ansible_dict

ansible_collections/amazon/aws/plugins/module_utils/elb_utils.py
11:from .botocore import is_boto3_error_code
12:from .errors import AWSErrorHandler
13:from .exceptions import AnsibleAWSError
14:from .retries import AWSRetry

ansible_collections/amazon/aws/plugins/module_utils/modules.py
56:from .botocore import boto3_at_least
57:from .botocore import boto3_conn
58:from .botocore import botocore_at_least
59:from .botocore import check_sdk_version_supported
60:from .botocore import gather_sdk_versions
61:from .botocore import get_aws_connection_info
62:from .botocore import get_aws_region
63:from .exceptions import AnsibleBotocoreError
64:from .retries import RetryingBotoClientWrapper

ansible_collections/amazon/aws/plugins/module_utils/autoscaling.py
15:from ._autoscaling import common as _common
16:from ._autoscaling import groups as _groups
17:from ._autoscaling import instances as _instances
18:from ._autoscaling import transformations as _transformations
19:from ._autoscaling import waiters as _waiters
20:from .retries import AWSRetry
28:    from .retries import RetryingBotoClientWrapper
29:    from .transformation import AnsibleAWSResourceList
30:    from .transformation import BotoResourceList

ansible_collections/amazon/aws/plugins/module_utils/s3.py
18:    from .retries import RetryingBotoClientWrapper
43:from ._s3 import common as _common
44:from ._s3 import transformations as _transformations
45:from ._s3 import waiters as _waiters

ansible_collections/amazon/aws/plugins/module_utils/_autoscaling/instances.py
8:# from .common import AnsibleAutoScalingError
9:from .common import AutoScalingErrorHandler

ansible_collections/amazon/aws/plugins/module_utils/ec2.py
58:from .arn import is_outpost_arn as is_outposts_arn  # pylint: disable=unused-import
59:from .arn import validate_aws_arn
62:from .botocore import HAS_BOTO3  # pylint: disable=unused-import
63:from .botocore import boto3_conn  # pylint: disable=unused-import
64:from .botocore import boto3_inventory_conn  # pylint: disable=unused-import
65:from .botocore import boto_exception  # pylint: disable=unused-import
66:from .botocore import get_aws_connection_info  # pylint: disable=unused-import
67:from .botocore import get_aws_region  # pylint: disable=unused-import
68:from .botocore import is_boto3_error_code
69:from .botocore import paginated_query_with_retries
70:from .errors import AWSErrorHandler
73:from .exceptions import AnsibleAWSError  # pylint: disable=unused-import
74:from .iam import list_iam_instance_profiles
82:from .policy import _py3cmp as py3cmp  # pylint: disable=unused-import
83:from .policy import compare_policies  # pylint: disable=unused-import
86:from .retries import AWSRetry  # pylint: disable=unused-import
89:from .tagging import ansible_dict_to_boto3_tag_list  # pylint: disable=unused-import
90:from .tagging import boto3_tag_list_to_ansible_dict  # pylint: disable=unused-import
91:from .tagging import boto3_tag_specifications
92:from .tagging import compare_aws_tags  # pylint: disable=unused-import
95:from .transformation import ansible_dict_to_boto3_filter_list  # pylint: disable=unused-import
96:from .transformation import map_complex_type  # pylint: disable=unused-import

ansible_collections/amazon/aws/plugins/module_utils/_autoscaling/groups.py
8:# from .common import AnsibleAutoScalingError
9:from .common import AutoScalingErrorHandler

ansible_collections/ansible/posix/plugins/module_utils/version.py
18:from ._version import LooseVersion, StrictVersion

ansible_collections/awx/awx/plugins/module_utils/awxkit.py
5:from .controller_api import ControllerModule

ansible_collections/awx/awx/plugins/modules/ad_hoc_command_cancel.py
36:        - The interval in seconds, to request an update from .
37:      required: False

ansible_collections/community/dns/plugins/module_utils/zone_record_set_helpers.py
21:        from .provider import ProviderInformation  # pragma: no cover
22:        from .record_set import DNSRecordSet  # pragma: no cover
23:        from .zone_record_set_api import ZoneRecordSetAPI  # pragma: no cover

ansible_collections/community/dns/plugins/module_utils/module/zone_info.py
24:from ._utils import normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/module/record_info.py
41:from ._utils import get_prefix, normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/module/record_set_info.py
44:from ._utils import get_prefix, normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/module/record.py
49:from ._utils import get_prefix, normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/module/record_sets.py
54:from ._utils import get_prefix, normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/module/record_set.py
54:from ._utils import get_prefix, normalize_dns_name

ansible_collections/community/dns/plugins/module_utils/json_api_helper.py
37:        from .http import HTTPHelper  # pragma: no cover
38:        from .provider import ProviderInformation  # pragma: no cover
39:        from .record import DNSRecord  # pragma: no cover
40:        from .zone_record_api import ZoneRecordAPI  # pragma: no cover

ansible_collections/community/dns/plugins/module_utils/zone_record_helpers.py
21:        from .provider import ProviderInformation  # pragma: no cover
22:        from .record import DNSRecord  # pragma: no cover
23:        from .zone_record_api import ZoneRecordAPI  # pragma: no cover

ansible_collections/community/dns/plugins/module_utils/zone.py
17:        from .record import DNSRecord  # pragma: no cover
18:        from .record_set import DNSRecordSet  # pragma: no cover

ansible_collections/community/dns/plugins/module_utils/record_set.py
11:from .record import format_ttl as _format_ttl

ansible_collections/community/docker/plugins/module_utils/_api/auth.py
19:from . import errors
20:from .credentials.errors import CredentialsNotFound, StoreError
21:from .credentials.store import Store
22:from .utils import config

ansible_collections/community/docker/plugins/module_utils/_module_container/docker_api.py
125:    from .base import Option, OptionGroup

ansible_collections/community/docker/plugins/module_utils/_common.py
228:        #     from .util import log_debug

ansible_collections/community/docker/plugins/module_utils/_module_container/module.py
37:    from .base import Engine, EngineDriver, Option, OptionGroup

ansible_collections/community/docker/plugins/module_utils/_api/context/context.py
21:from .config import (

ansible_collections/community/docker/plugins/module_utils/_api/transport/npipeconn.py
19:from .basehttpadapter import BaseHTTPAdapter
20:from .npipesocket import NpipeSocket

ansible_collections/community/docker/plugins/module_utils/_api/context/api.py
19:from .config import (
25:from .context import Context

ansible_collections/community/docker/plugins/module_utils/_api/transport/sshconn.py
26:from .basehttpadapter import BaseHTTPAdapter

ansible_collections/community/docker/plugins/module_utils/_api/transport/ssladapter.py
17:from .basehttpadapter import BaseHTTPAdapter

ansible_collections/community/docker/plugins/module_utils/_api/_import_helper.py
92:        from .errors import MissingRequirementException  # pylint: disable=cyclic-import
98:        from .errors import MissingRequirementException  # pylint: disable=cyclic-import

ansible_collections/community/docker/plugins/module_utils/_api/transport/unixconn.py
19:from .basehttpadapter import BaseHTTPAdapter

ansible_collections/community/docker/plugins/module_utils/_api/utils/proxy.py
16:from .utils import format_environment

ansible_collections/community/docker/plugins/module_utils/_api/utils/build.py
23:from . import fnmatch

ansible_collections/community/docker/plugins/module_utils/_api/utils/decorators.py
18:from . import utils

ansible_collections/community/docker/plugins/module_utils/_api/tls.py
17:from . import errors
18:from .transport.ssladapter import SSLHTTPAdapter

ansible_collections/community/docker/plugins/module_utils/_api/credentials/store.py
19:from . import constants, errors
20:from .utils import create_environment_dict, find_executable

ansible_collections/community/docker/plugins/module_utils/_api/errors.py
18:from ._import_helper import HTTPError as _HTTPError

ansible_collections/community/docker/plugins/module_utils/_common_api.py
150:        #     from .util import log_debug

ansible_collections/community/docker/plugins/module_utils/_common_cli.py
155:        #     from .util import log_debug

ansible_collections/community/docker/plugins/module_utils/_util.py
26:    from ._common import AnsibleDockerClientBase as CADCB
27:    from ._common_api import AnsibleDockerClientBase as CAPIADCB
28:    from ._common_cli import AnsibleDockerClientBase as CCLIADCB

ansible_collections/community/general/plugins/modules/zypper_repository.py
425:        # Set alias (name) and url based on values from .repo file

ansible_collections/community/mysql/plugins/module_utils/version.py
16:from ._version import LooseVersion

ansible_collections/community/mysql/plugins/module_utils/command_resolver.py
4:from ._version import LooseVersion

ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py
253:                # nor we can't create any from .spec.dockerImageRepository

ansible_collections/community/postgresql/plugins/module_utils/version.py
15:from ._version import LooseVersion  # noqa

ansible_collections/community/rabbitmq/plugins/module_utils/version.py
16:from ._version import LooseVersion, StrictVersion

ansible_collections/containers/podman/plugins/modules/podman_quadlet.py
203:- name: Install multi-quadlet application from .quadlets file (Podman 6.0+)

ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_utils/info/sensor_amperage.py
27:from .chassis_sensor_util import IDRACChassisSensors

ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_utils/info/system_board_metrics.py
28:from .chassis_sensor_util import IDRACChassisSensors

ansible_collections/f5networks/f5_modules/plugins/module_utils/bigiq.py
12:from .common import (
15:from .constants import (
18:from .icontrol import iControlRestSession

ansible_collections/f5networks/f5_modules/plugins/module_utils/bigip.py
11:from .common import (
14:from .constants import (
17:from .icontrol import iControlRestSession

ansible_collections/f5networks/f5_modules/plugins/module_utils/teem.py
28:from .constants import (
32:from .version import CURRENT_COLL_VERSION

ansible_collections/f5networks/f5_modules/plugins/module_utils/urls.py
12:from .common import F5ModuleError

ansible_collections/f5networks/f5_modules/plugins/module_utils/icontrol.py
31:from .common import F5ModuleError
91:from .constants import (

ansible_collections/f5networks/f5_modules/plugins/module_utils/common.py
29:from .constants import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_base.py
19:from ._client import (
24:from ._vendor.hcloud import (
30:from ._vendor.hcloud.actions import ActionException
31:from ._version import version

ansible_collections/hetzner/hcloud/plugins/module_utils/_floating_ip.py
6:from ._vendor.hcloud.floating_ips import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_storage_box_snapshot.py
6:from ._vendor.hcloud.storage_boxes import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/metrics/__init__.py
3:from .domain import Metrics, TimeSeries

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/primary_ips/domain.py
13:    from .client import BoundPrimaryIP

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/primary_ips/__init__.py
3:from .client import BoundPrimaryIP, PrimaryIPsClient, PrimaryIPsPageResult
4:from .domain import CreatePrimaryIPResponse, PrimaryIP, PrimaryIPProtection

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/placement_groups/domain.py
9:    from .client import BoundPlacementGroup

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/placement_groups/client.py
7:from .domain import CreatePlacementGroupResponse, PlacementGroup

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/placement_groups/__init__.py
3:from .client import (
8:from .domain import CreatePlacementGroupResponse, PlacementGroup

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/core/client.py
7:from .domain import BaseDomain
11:    from .domain import Meta

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/core/__init__.py
3:from .client import BoundModelBase, ClientEntityBase, ResourceClientBase
4:from .domain import BaseDomain, DomainIdentityMixin, Meta, Pagination

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/zones/domain.py
9:    from .client import BoundZone, BoundZoneRRSet

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/primary_ips/client.py
15:from .domain import CreatePrimaryIPResponse, PrimaryIP

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/ssh_keys/client.py
6:from .domain import SSHKey

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/floating_ips/domain.py
12:    from .client import BoundFloatingIP

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/zones/__init__.py
3:from .client import (
10:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/floating_ips/__init__.py
3:from .client import (
8:from .domain import CreateFloatingIPResponse, FloatingIP, FloatingIPProtection

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/ssh_keys/__init__.py
3:from .client import BoundSSHKey, SSHKeysClient, SSHKeysPageResult
4:from .domain import SSHKey

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/floating_ips/client.py
15:from .domain import CreateFloatingIPResponse, FloatingIP

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/images/domain.py
10:    from .client import BoundImage

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/images/client.py
15:from .domain import Image

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/images/__init__.py
3:from .client import BoundImage, ImagesClient, ImagesPageResult
4:from .domain import CreateImageResponse, Image, ImageProtection

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/server_types/__init__.py
3:from .client import (
8:from .domain import ServerType, ServerTypeLocation

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/zones/client.py
14:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/load_balancer_types/client.py
6:from .domain import LoadBalancerType

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/server_types/client.py
7:from .domain import ServerType, ServerTypeLocation

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/load_balancer_types/__init__.py
3:from .client import (
8:from .domain import LoadBalancerType

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/__init__.py
3:from ._client import (
8:from ._exceptions import APIException, HCloudException
9:from ._version import __version__

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/isos/client.py
6:from .domain import Iso

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/isos/__init__.py
3:from .client import BoundIso, IsosClient, IsosPageResult
4:from .domain import Iso

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/certificates/__init__.py
3:from .client import (
8:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/certificates/domain.py
9:    from .client import BoundCertificate

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/certificates/client.py
14:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/rdns/__init__.py
3:from .domain import DNSPtr

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/networks/__init__.py
3:from .client import BoundNetwork, NetworksClient, NetworksPageResult
4:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/locations/__init__.py
3:from .client import BoundLocation, LocationsClient, LocationsPageResult
4:from .domain import Location

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/networks/client.py
14:from .domain import Network, NetworkRoute, NetworkSubnet

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/locations/client.py
6:from .domain import Location

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/networks/domain.py
11:    from .client import BoundNetwork

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/_client.py
13:from ._exceptions import APIException
14:from ._version import __version__
15:from .actions import ActionsClient
16:from .certificates import CertificatesClient
17:from .datacenters import DatacentersClient
18:from .firewalls import FirewallsClient
19:from .floating_ips import FloatingIPsClient
20:from .images import ImagesClient
21:from .isos import IsosClient
22:from .load_balancer_types import LoadBalancerTypesClient
23:from .load_balancers import LoadBalancersClient
24:from .locations import LocationsClient
25:from .networks import NetworksClient
26:from .placement_groups import PlacementGroupsClient
27:from .primary_ips import PrimaryIPsClient
28:from .server_types import ServerTypesClient
29:from .servers import ServersClient
30:from .ssh_keys import SSHKeysClient
31:from .storage_box_types import StorageBoxTypesClient
32:from .storage_boxes import StorageBoxesClient
33:from .volumes import VolumesClient
34:from .zones import ZonesClient

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/deprecation/__init__.py
3:from .domain import DeprecationInfo

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/actions/__init__.py
3:from .client import (
10:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/actions/domain.py
9:    from .client import BoundAction

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/actions/client.py
8:from .domain import Action, ActionFailedException, ActionStatus, ActionTimeoutException

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/storage_box_types/client.py
6:from .domain import StorageBoxType

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/storage_box_types/__init__.py
3:from .client import (
8:from .domain import StorageBoxType

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/datacenters/client.py
8:from .domain import Datacenter, DatacenterServerTypes

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/volumes/__init__.py
3:from .client import BoundVolume, VolumesClient, VolumesPageResult
4:from .domain import CreateVolumeResponse, Volume, VolumeProtection

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/firewalls/domain.py
10:    from .client import BoundFirewall

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/volumes/domain.py
11:    from .client import BoundVolume

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/datacenters/__init__.py
3:from .client import (
8:from .domain import Datacenter, DatacenterServerTypes

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/firewalls/__init__.py
3:from .client import BoundFirewall, FirewallsClient, FirewallsPageResult
4:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/helpers/__init__.py
3:from .labels import LabelValidator

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/volumes/client.py
15:from .domain import CreateVolumeResponse, Volume

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/firewalls/client.py
14:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/storage_boxes/__init__.py
3:from .client import (
12:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/servers/__init__.py
3:from .client import BoundServer, ServersClient, ServersPageResult
4:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/storage_boxes/domain.py
11:    from .client import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/servers/domain.py
23:    from .client import BoundServer

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/load_balancers/client.py
26:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/storage_boxes/client.py
17:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/load_balancers/domain.py
16:    from .client import BoundLoadBalancer

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/servers/client.py
32:from .domain import (
59:    from .domain import ServerCreatePublicNetwork

ansible_collections/hetzner/hcloud/plugins/module_utils/_vendor/hcloud/load_balancers/__init__.py
3:from .client import (
8:from .domain import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_storage_box_subaccount.py
6:from ._vendor.hcloud.storage_boxes import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_storage_box.py
6:from ._client import client_resource_not_found
7:from ._vendor.hcloud.storage_boxes import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_experimental.py
8:from ._base import AnsibleModule

ansible_collections/hetzner/hcloud/plugins/module_utils/_deprecation.py
11:from ._vendor.hcloud.locations import BoundLocation
12:from ._vendor.hcloud.server_types import BoundServerType, ServerTypeLocation

ansible_collections/hetzner/hcloud/plugins/module_utils/_primary_ip.py
6:from ._vendor.hcloud.primary_ips import (

ansible_collections/hetzner/hcloud/plugins/module_utils/_client.py
12:from ._vendor.hcloud import APIException, Client as ClientBase

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_iscsi_remote_connection_provisioner.py
7:    from .vsp_remote_connection_provisioner import VSPRemoteConnectionProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_remote_replication_helper.py
11:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
12:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner
23:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
24:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_hur_provisioner.py
14:    from .vsp_remote_replication_helper import RemoteReplicationHelperForSVol
33:    from .vsp_remote_replication_helper import RemoteReplicationHelperForSVol

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_remote_connection_provisioner.py
6:    from .vsp_remote_storage_registration_provisioner import (
15:    from .vsp_remote_storage_registration_provisioner import (

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_gad_pair_provisioner.py
27:    from .vsp_remote_replication_helper import RemoteReplicationHelperForSVol
55:    from .vsp_remote_replication_helper import RemoteReplicationHelperForSVol

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_snapshot_provisioner.py
21:    from .vsp_nvme_provisioner import VSPNvmeProvisioner
28:    from .vsp_volume_prov import VSPVolumeProvisioner
29:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner
30:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
42:    from .vsp_volume_prov import VSPVolumeProvisioner
43:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
44:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner
45:    from .vsp_nvme_provisioner import VSPNvmeProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_resource_group_provisioner.py
12:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
27:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_storage_pool_provisioner.py
10:    from .vsp_parity_group_provisioner import VSPParityGroupProvisioner
16:    from .vsp_volume_prov import VSPVolumeProvisioner
19:    from .vsp_resource_group_provisioner import VSPResourceGroupProvisioner
21:    from .vsp_storage_system_provisioner import VSPStorageSystemProvisioner
33:    from .vsp_parity_group_provisioner import VSPParityGroupProvisioner
38:    from .vsp_volume_prov import VSPVolumeProvisioner
41:    from .vsp_resource_group_provisioner import VSPResourceGroupProvisioner
43:    from .vsp_storage_system_provisioner import VSPStorageSystemProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_user_group_provisioner.py
10:    from .vsp_user_provisioner import VSPUserProvisioner
23:    from .vsp_user_provisioner import VSPUserProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_nvme_provisioner.py
19:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner
37:    from .vsp_storage_port_provisioner import VSPStoragePortProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/sdsb_snapshot_provisioner.py
7:    from .sdsb_vps_provisioner import SDSBVpsProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_true_copy_provisioner.py
16:    from .vsp_remote_replication_helper import RemoteReplicationHelperForSVol

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_dynamic_pool_provisioner.py
5:    from .vsp_storage_system_provisioner import (
14:    from .vsp_storage_system_provisioner import (

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_shadow_image_pair_provisioner.py
16:    from .vsp_volume_prov import VSPVolumeProvisioner
17:    from .vsp_nvme_provisioner import VSPNvmeProvisioner
18:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner
37:    from .vsp_volume_prov import VSPVolumeProvisioner
38:    from .vsp_nvme_provisioner import VSPNvmeProvisioner
39:    from .vsp_host_group_provisioner import VSPHostGroupProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/provisioner/vsp_storage_port_provisioner.py
13:    from .vsp_uvm_provisioner import VSPUvmProvisioner
22:    from .vsp_uvm_provisioner import VSPUvmProvisioner

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/common/hv_exceptions.py
1:from .hv_log import Log

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/common/hv_log.py
19:    from .hv_messages import MessageID
20:    from .ansible_common import get_ansible_home_dir
21:    from .ansible_common_constants import (
32:    from .ansible_common import get_ansible_home_dir
260:        from .hv_exceptions import HiException

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/common/ansible_common.py
13:    from .vsp_constants import PEGASUS_MODELS, DEFAULT_NAME_PREFIX
14:    from .hv_constants import TARGET_SUB_DIRECTORY
15:    from .ansible_common_constants import (
25:    from .hv_constants import TARGET_SUB_DIRECTORY
26:    from .vsp_constants import PEGASUS_MODELS, DEFAULT_NAME_PREFIX
27:    from .ansible_common_constants import (
146:        from .hv_log import Log

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_server_priority_manager_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_quorum_disk_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_license_management_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_true_copy_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
10:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_journal_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_remote_storage_registration_models.py
5:    from .common_base_models import SingleBaseClass, BaseDataClass
9:    from .common_base_models import SingleBaseClass, BaseDataClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_hur_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
7:    from .vsp_true_copy_models import DirectTrueCopyPairInfo, DirectTrueCopyPairInfoList
11:    from .common_base_models import BaseDataClass, SingleBaseClass
13:    from .vsp_true_copy_models import DirectTrueCopyPairInfo, DirectTrueCopyPairInfoList

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_pav_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/uaig_subscriber_models.py
5:    from .common_base_models import BaseDataClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/common/vsp_utils.py
5:    from .hv_log import (

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_user_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_one_server_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_host_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
12:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_storage_pool_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_storage_port_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_mp_blade_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_storage_system_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_shadow_image_pair_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_user_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_user_group_models.py
3:from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_dump_log_models.py
4:from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_remote_connection_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_clpr_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_encryption_key_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_user_models.py
3:from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_journal_model.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_one_snapshot_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
11:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_storage_controller_model.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_nvme_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_storage_node_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_snapshot_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_uvm_models.py
5:    from .common_base_models import SingleBaseClass, BaseDataClass
7:    from .common_base_models import SingleBaseClass, BaseDataClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_port_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
6:    from .sdsb_port_auth_models import SDSBPortAuthInfo
7:    from .sdsb_chap_user_models import SDSBChapUserInfo
10:    from .common_base_models import BaseDataClass, SingleBaseClass
11:    from .sdsb_port_auth_models import SDSBPortAuthInfo
12:    from .sdsb_chap_user_models import SDSBChapUserInfo

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_event_log_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_job_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_chap_user_models.py
5:    from .common_base_models import BaseDataClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_copy_groups_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
9:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_cmd_dev_models.py
5:    from .common_base_models import SingleBaseClass
9:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_one_port_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_snapshot_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
7:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_login_message_model.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_compute_node_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_vclone_models.py
5:    from .common_base_models import SingleBaseClass
9:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_session_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
7:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_session_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
7:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_parity_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_cluster_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_initial_system_settings_models.py
5:    from .common_base_models import SingleBaseClass
7:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_license_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_external_auth_server_models.py
3:from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_remote_path_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_local_copy_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_external_volume_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
9:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_iscsi_target_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
11:    from .vsp_host_group_models import LuHostReserve
13:    from .common_base_models import BaseDataClass, SingleBaseClass
19:    from .vsp_host_group_models import LuHostReserve

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_storage_system_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_gad_pairs_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass, base_dict_converter
13:    from .common_base_models import BaseDataClass, SingleBaseClass, base_dict_converter

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_resource_group_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_audit_log_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_storage_pool_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
11:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_volume_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
14:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_snapshot_family_models.py
5:    from .common_base_models import SingleBaseClass
9:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_dynamic_pool_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass
8:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_volume_models.py
5:    from .common_base_models import BaseDataClass, SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/sdsb_vps_models.py
5:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_rg_lock_models.py
5:    from .common_base_models import SingleBaseClass
9:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/model/vsp_external_path_group_models.py
5:    from .common_base_models import SingleBaseClass
8:    from .common_base_models import SingleBaseClass

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/sdsb_user.py
8:    from .sdsb_vps_helper import SDSBVpsHelper

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/sdsb_user_group.py
6:    from .sdsb_vps_helper import SDSBVpsHelper

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/vsp_hur.py
14:    from .vsp_true_copy import DirectTrueCopyInfoExtractor
32:    from .vsp_true_copy import DirectTrueCopyInfoExtractor

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/vsp_cmd_dev.py
9:    from .vsp_volume import VSPVolumeReconciler, VolumeCommonPropertiesExtractor
20:    from .vsp_volume import VSPVolumeReconciler, VolumeCommonPropertiesExtractor

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/sdsb_compute_node.py
15:    from .sdsb_vps_helper import SDSBVpsHelper

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/sdsb_volume.py
13:    from .sdsb_vps_helper import SDSBVpsHelper

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/reconciler/sdsb_port_auth.py
8:    from .sdsb_port import SDSBPortReconciler
16:    from .sdsb_port import SDSBPortReconciler

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_storage_system_gateway.py
14:    from .gateway_manager import SDSBConnectionManager
29:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/gateway_factory.py
6:from .sdsb_compute_node_gateway import (
9:from .sdsb_volume_gateway import SDSBVolumeDirectGateway
10:from .sdsb_chap_user_gateway import SDSBChapUserDirectGateway
11:from .sdsb_event_logs_gateway import SDSBEventLogsDirectGateway
12:from .sdsb_drives_gateway import SDSBDrivesDirectGateway
13:from .sdsb_fault_domain_gateway import SDSBFaultDomainDirectGateway
14:from .sdsb_control_port_gateway import SDSBControlPortDirectGateway
15:from .sdsb_storage_controller_gateway import SDSBStorageControllerDirectGateway
16:from .sdsb_port_auth_gateway import SDSBPortAuthDirectGateway
17:from .sdsb_port_gateway import SDSBPortDirectGateway
18:from .sdsb_vps_gateway import SDSBVpsDirectGateway
19:from .sdsb_storage_node_gateway import SDSBStorageNodeDirectGateway
20:from .sdsb_storage_pool_gateway import SDSBStoragePoolDirectGateway
21:from .sdsb_cluster_gateway import SDSBClusterGateway
22:from .sdsb_job_gateway import SDSBJobGateway
23:from .sdsb_capacity_mgmt_settings_gateway import SDSBCapacityMgmtSettingGateway
24:from .sdsb_estimated_capacity_gateway import SDSBEstimatedCapacityGateway
25:from .sdsb_remote_iscsi_port_gateway import SDSBRemoteIscsiPortGateway
26:from .sdsb_journal_gateway import SDSBJournalDirectGateway
27:from .sdsb_login_message_gateway import SDSBLoginMessageDirectGateway
28:from .vsp_snapshot_gateway import VSPHtiSnapshotDirectGateway
29:from .vsp_volume import VSPVolumeDirectGateway
30:from .vsp_host_group_gateway import VSPHostGroupDirectGateway
31:from .vsp_shadow_image_pair_gateway import (
34:from .vsp_storage_system_gateway import (
37:from .sdsb_storage_system_gateway import SDSBStorageSystemDirectGateway
38:from .vsp_iscsi_target_gateway import (
41:from .vsp_storage_pool_gateway import (
44:from .vsp_journal_volume_gateway import (
47:from .vsp_parity_group_gateway import (
50:from .vsp_storage_port_gateway import (
53:from .vsp_copy_groups_gateway import VSPCopyGroupsDirectGateway
54:from .vsp_true_copy_gateway import VSPTrueCopyDirectGateway
55:from .vsp_hur_gateway import VSPHurDirectGateway
56:from .vsp_nvme_gateway import VSPOneNvmeSubsystemDirectGateway
57:from .vsp_resource_group_gateway import (
60:from .vsp_user_group_gateway import VSPUserGroupDirectGateway
61:from .vsp_user_gateway import VSPUserDirectGateway
62:from .vsp_gad_pair_gateway import VSPGadPairDirectGateway
63:from .vsp_cmd_dev_gateway import VSPCmdDevDirectGateway
64:from .vsp_rg_lock_gateway import (
67:from .vsp_remote_storage_registration_gw import (
70:from .vsp_quorum_disk_gateway import VSPQuorumDiskDirectGateway
71:from .vsp_remote_connection_gateway import VSPRemoteConnectionDirectGateway
72:from .vsp_external_volume_gateway import VSPExternalVolumeDirectGateway
73:from .vsp_iscsi_remote_connection_gateway import VSPIscsiRemoteConnectionDirectGateway
74:from .vsp_local_copy_group_gateway import (
77:from .vsp_dynamic_pool_gateway import VspDynamicPoolGateway
78:from .vsp_uvm_gateway import VSPUvmGateway
79:from .vsp_clpr_gateway import VSPClprDirectGateway
80:from .vsp_external_parity_group_gateway import VSPExternalParityGroupGateway
81:from .vsp_spm_gateway import VSPSpmGateway
82:from .vsp_storage_system_monitor_gateway import VSPStorageSystemMonitorGateway
83:from .sdsb_cluster_information_gateway import SDSBClusterInformationDirectGateway
84:from .sdsb_user_gateway import SDSBUserGateway
85:from .sdsb_bmc_access_setting_gw import SDSBBmcAccessSettingGateway
86:from .sdsb_software_update_gateway import SDSBSoftwareUpdateGateway
87:from .sdsb_audit_log_setting_gw import SDSBAuditLogSettingGateway
88:from .sdsb_event_log_setting_gw import SDSBEventLogSettingGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_remote_iscsi_port_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_hur_gateway.py
5:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway
13:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_storage_controller_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_user_auth_setting_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
7:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_volume.py
4:    from .gateway_manager import VSPConnectionManager
24:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
46:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_nvme_gateway.py
2:    from .gateway_manager import VSPConnectionManager
24:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_one_server_gateway.py
1:from .gateway_manager import VSPConnectionManager
19:from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_dynamic_pool_gateway.py
2:    from .gateway_manager import VSPConnectionManager
14:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_port_gateway.py
6:    from .gateway_manager import SDSBConnectionManager
14:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_volume_gateway.py
4:    from .gateway_manager import SDSBConnectionManager
11:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_parity_group_gateway.py
3:    from .gateway_manager import VSPConnectionManager
16:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_storage_system_monitor_gateway.py
3:    from .gateway_manager import VSPConnectionManager
10:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
12:    from .gateway_manager import VSPConnectionManager
19:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_uvm_gateway.py
5:    from .gateway_manager import VSPConnectionManager
16:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_volume_simple_api_gateway.py
2:    from .gateway_manager import VSPConnectionManager
22:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
40:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_software_update_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_user_group_gateway.py
3:    from .gateway_manager import VSPConnectionManager
11:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_login_message_gateway.py
3:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_pav_gateway.py
3:    from .gateway_manager import VSPConnectionManager
8:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_spm_gateway.py
3:    from .gateway_manager import VSPConnectionManager
11:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_job_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_replication_pairs_gateway.py
6:    from .gateway_manager import VSPConnectionManager
16:    from .vsp_copy_groups_gateway import VSPCopyGroupsDirectGateway
17:    from .vsp_volume import VSPVolumeDirectGateway
20:    from .gateway_manager import VSPConnectionManager
30:    from .vsp_copy_groups_gateway import VSPCopyGroupsDirectGateway
31:    from .vsp_volume import VSPVolumeDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_cluster_information_gateway.py
3:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_journal_gateway.py
5:    from .gateway_manager import SDSBConnectionManager
14:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_resource_group_gateway.py
3:    from .gateway_manager import VSPConnectionManager
14:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_iscsi_target_gateway.py
5:    from .gateway_manager import VSPConnectionManager
28:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_host_group_gateway.py
5:    from .gateway_manager import VSPConnectionManager
24:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_rg_lock_gateway.py
2:    from .gateway_manager import VSPConnectionManager
6:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_storage_pool_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_user_gateway.py
4:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_drives_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_remote_path_group_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
11:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_session_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_quorum_disk_gateway.py
4:    from .gateway_manager import VSPConnectionManager
29:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_bmc_access_setting_gw.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_platform_info_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
5:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_snapshots_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_snapshot_family_gateway.py
2:    from .gateway_manager import VSPConnectionManager
5:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
7:    from .gateway_manager import VSPConnectionManager
10:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_shadow_image_pair_gateway.py
6:    from .gateway_manager import VSPConnectionManager
25:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_estimated_capacity_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_session_manager.py
15:    # from .ansible_url import open_url
22:    # from .ansible_url import open_url

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_storage_port_gateway.py
3:    from .gateway_manager import VSPConnectionManager
15:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_gad_pair_gateway.py
4:    from .gateway_manager import VSPConnectionManager
11:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway
13:    from .gateway_manager import VSPConnectionManager
20:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_initial_system_settings_gateway.py
5:    from .gateway_manager import VSPConnectionManager
19:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_session_gateway.py
2:    from .vsp_session_manager import SessionManager
10:    from .vsp_session_manager import SessionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_port_auth_gateway.py
8:    from .gateway_manager import SDSBConnectionManager
18:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_user_group_gateway.py
4:    from .gateway_manager import SDSBConnectionManager
9:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_user_gateway.py
2:    from .gateway_manager import VSPConnectionManager
10:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_ticket_management_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
6:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_event_log_setting_gw.py
3:    from .gateway_manager import SDSBConnectionManager
16:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_mp_blade_gateway.py
2:    from .gateway_manager import VSPConnectionManager
9:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_external_auth_server_gateway.py
3:    from .gateway_manager import SDSBConnectionManager
12:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_storage_pool_gateway.py
3:    from .gateway_manager import VSPConnectionManager
17:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_external_volume_gateway.py
4:    from .gateway_manager import VSPConnectionManager
35:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_journal_volume_gateway.py
3:    from .gateway_manager import VSPConnectionManager
17:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/gateway_manager.py
19:    from .ansible_url import open_url
20:    from .vsp_session_manager import SessionManager
27:    from .ansible_url import open_url
28:    from .vsp_session_manager import SessionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_remote_connection_gateway.py
2:    from .gateway_manager import VSPConnectionManager
13:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_external_parity_group_gateway.py
2:    from .gateway_manager import VSPConnectionManager
5:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
11:    from .gateway_manager import VSPConnectionManager
14:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_compute_node_gateway.py
11:    from .gateway_manager import SDSBConnectionManager
25:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_audit_log_setting_gw.py
2:    from .gateway_manager import SDSBConnectionManager
12:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_local_copy_group_gateway.py
2:    from .gateway_manager import VSPConnectionManager
10:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
12:    from .gateway_manager import VSPConnectionManager
20:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_chap_user_gateway.py
9:    from .gateway_manager import SDSBConnectionManager
21:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_snapshot_gateway.py
5:    from .gateway_manager import VSPConnectionManager
16:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
19:    from .gateway_manager import VSPConnectionManager
30:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_remote_copy_groups_gateway.py
4:    from .gateway_manager import VSPConnectionManager
8:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_fault_domain_gateway.py
3:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_encryption_settings_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
9:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_copy_groups_gateway.py
6:    from .gateway_manager import VSPConnectionManager
15:    from .vsp_volume import VSPVolumeDirectGateway
22:    from .gateway_manager import VSPConnectionManager
31:    from .vsp_volume import VSPVolumeDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_cmd_dev_gateway.py
4:    from .gateway_manager import VSPConnectionManager
7:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
9:    from .gateway_manager import VSPConnectionManager
12:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_storage_system_gateway.py
30:    from .gateway_manager import VSPConnectionManager
58:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_storage_node_gateway.py
5:    from .gateway_manager import SDSBConnectionManager
13:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_one_snapshot_gateway.py
2:    from .gateway_manager import VSPConnectionManager
12:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
21:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_clpr_gateway.py
2:    from .gateway_manager import VSPConnectionManager
9:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
11:    from .gateway_manager import VSPConnectionManager
18:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_encryption_key_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
13:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_storage_cluster_mgmt_gateway.py
1:from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_event_logs_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_dump_log_gateway.py
4:    from .gateway_manager import SDSBConnectionManager
14:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_vps_gateway.py
6:    from .gateway_manager import SDSBConnectionManager
15:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_true_copy_gateway.py
5:    from .gateway_manager import VSPConnectionManager
6:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway
14:    from .gateway_manager import VSPConnectionManager
15:    from .vsp_replication_pairs_gateway import VSPReplicationPairsDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_one_port_gateway.py
1:from .gateway_manager import VSPConnectionManager
13:from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_control_port_gateway.py
3:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_iscsi_remote_connection_gateway.py
2:    from .gateway_manager import VSPConnectionManager
13:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_vclone_gateway.py
2:    from .gateway_manager import VSPConnectionManager
5:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway
7:    from .gateway_manager import VSPConnectionManager
10:    from .vsp_storage_system_gateway import VSPStorageSystemDirectGateway

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_cluster_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
7:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_license_gateway.py
4:    from .gateway_manager import SDSBConnectionManager
10:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/sdsb_capacity_mgmt_settings_gateway.py
2:    from .gateway_manager import SDSBConnectionManager
8:    from .gateway_manager import SDSBConnectionManager

ansible_collections/hitachivantara/vspone_block/plugins/module_utils/gateway/vsp_remote_storage_registration_gw.py
2:    from .gateway_manager import VSPConnectionManager
11:    from .gateway_manager import VSPConnectionManager

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/kmip_servers.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/user_buckets.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/storage_fault_domains.py
1:from .gateway_oo import (
14:from .common_msg_catalog import (
17:from .storage_fault_domain_msg_catalog import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/storage_fault_domain_params_oo.py
1:from .storage_fault_domain_msg_catalog import StorageFaultDomainMsgCatalog as SFDMC

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/params_oo.py
2:from .storage_class_msg_catalog import StorageClassMsgCatalog as SCMCA
3:from .user_buckets_msg_catalog import UserBucketsMsgCatalog as UBMC
4:from .job_msg_catalog import JobMsgCatalog as JOBMCA
5:from .serial_number_msg_catalog import SerialNumberMsgCatalog as SERNUMMCA
6:from .s3_encryption_msg_catalog import S3EncryptionMsgCatalog as S3EMC
7:from .storage_components_msg_catalog import StorageComponentMsgCatalog as SCOMPMCA
11:from .certificate_msg_catalog import CertificateMsgCatalog as CMCA
12:from .users_msg_catalog import UsersMsgCatalog as UMC
13:from .kmip_msg_catalog import KmipMsgCatalog as KMC
14:from .license_msg_catalog import LicenseMsgCatalog as LMC
15:from .jobs_msg_catalog import JobsMsgCatalog as JMS

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/events.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/users.py
2:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/region.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/job.py
1:from .gateway_oo import (
13:from .jobs import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/galaxy.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/storage_classes.py
2:from .gateway_oo import (
17:from .common_msg_catalog import (
20:from .storage_class_msg_catalog import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/serial_number.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/gateway_oo.py
11:from .ansible_url import open_url as open_telemetry

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/licenses.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/jobs.py
1:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/certificates.py
2:from .gateway_oo import (
14:from .common_msg_catalog import (
17:from .certificate_msg_catalog import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/common/ansible_common.py
2:from .ansible_common_constants import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/s3_encryption.py
2:from .gateway_oo import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/common/hv_utilities.py
4:from .hv_log import (Log)

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/oneobject_node/storage_components.py
2:from .gateway_oo import (
17:from .storage_components_msg_catalog import (

ansible_collections/hitachivantara/vspone_object/plugins/module_utils/common/hv_log.py
18:    from .hv_messages import MessageID
19:    from .hv_constants import TARGET_SUB_DIRECTORY
20:    from .ansible_common_constants import (

ansible_collections/kubernetes/core/plugins/module_utils/version.py
18:from ._version import LooseVersion  # noqa: F401

ansible_collections/ravendb/ravendb/plugins/module_utils/core/client.py
10:from .deps import require_ravendb

ansible_collections/vmware/vmware/plugins/module_utils/vm/objects/_cdrom.py
21:from ._abstract import AbstractVsphereObject

ansible_collections/vmware/vmware/plugins/module_utils/vm/objects/_controllers.py
16:from ._abstract import AbstractVsphereObject

ansible_collections/vmware/vmware/plugins/module_utils/vm/objects/_nvdimm.py
16:from ._abstract import AbstractVsphereObject

ansible_collections/vmware/vmware/plugins/module_utils/vm/objects/_disk.py
21:from ._abstract import AbstractVsphereObject

ansible_collections/vmware/vmware/plugins/module_utils/vm/objects/_network_adapter.py
28:from ._abstract import AbstractVsphereObject

ansible_collections/vultr/cloud/plugins/module_utils/common_instance.py
11:from .vultr_v2 import AnsibleVultr

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but _fix_collection_relative_imports() still only handles from ..module_utils. So question reinstated: Why have you made MARKER fire on e.g. from .foo import bar, when the new handler only deals with from ..module_utils <...>?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry. I had a little help from Copilot. I didn't catch that the replacement didn't make sense. I adjusted the code so it now resolves the package path correctly instead of just replacing ..module_utils.

And yes, the idea is, that it resolves all relative imports:

  • from ..something import ...
  • from .something import ...
  • from . import ...

I'd rather have a whole solution instead of patching things each time, some collection uses relative imports and stops working. I hope you support that.

Copy link
Copy Markdown
Member

@moreati moreati Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the idea is, that it resolves all relative imports

In that case, it doesn't handle 3 or more relative levels (from ...foo import bar), which there are cases of in a default Ansible install.

Edit: many cases in various module_utils. Exactly one case in a module shipped with Ansible 13.x

mitogen git:(test-collections) ✗ ag --literal 'from ...' .venv/lib/python3.14/site-packages/ansible/modules .venv/lib/python3.14/site-packages/ansible_collections/*/*/plugins/modules
.venv/lib/python3.14/site-packages/ansible_collections/community/hashi_vault/plugins/modules/vault_login.py
119:from ...plugins.module_utils._hashi_vault_module import HashiVaultModule
120:from ...plugins.module_utils._hashi_vault_common import HashiVaultValueError

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On closer investigation, it may make more sense to rip out ansible_mitogen.planner.NewStylePlanner.MARKER and use ansible.executor.module_common.NEW_STYLE_PYTHON_MODULE_RE instead.

Comment on lines 633 to 634
b"from ..module_utils.basic import AnsibleModule",
b"from ansible.module_utils.basic import AnsibleModule"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note to self: there's pre-existing override for a specific instance of an explicit-relative import.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That one is applied before, I expect, that that it is applied, as before.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not doubting that. The comment really is a note to myself, it's been a long time since I last dug into this file.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My current thinking is if this PR is to be a superset of _fix_py35(), then it should replace it. I don't currently see a good reason to keep both.

Replace dots with correct module path when resolving relative imports.
The `r` prefix for regular expressions is not supported in Python 2.x

return absolute_package_name

pattern = re.compile(b'from (\.\.?)\s?(\w+)')
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be a raw byte-string for the backslashed characters, as written.

Copy link
Copy Markdown
Member

@moreati moreati left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall this PR is lacking

  • Changelog entry
  • Test coverage coverage of any new/fixed functionality

https://github.com/mitogen-hq/mitogen/blob/master/tests/ansible/regression/issue_1477__task_warnings_persist.yml and https://github.com/mitogen-hq/mitogen/blob/master/tests/ansible/lib/modules/test_warnings.py might serve as starting points for tests.

@moreati
Copy link
Copy Markdown
Member

moreati commented Mar 29, 2026

I'm experimenting with https://github.com/moreati/ansible-test_artifacts, it contains a relative_imports Ansible module which may help. It's also published to https://galaxy.ansible.com/ui/repo/published/moreati/test_artifacts/

module_source = invocation.get_module_source()
_fix_py35(invocation, module_source)
_fix_dnf(invocation, module_source)
_fix_collection_relative_imports(invocation, module_source)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note to self: I think (80% confidence) these fixup functions only handle Ansible modules, in other words they don't process the contents of module_utils files. That's a pre-existing limitatation.

TIL: Some Ansible collections contain plugins/plugin_utils. I don't think this is a standardised collection dir, more a convention used by some authors to share code between plugins con the controller without exposing it to targets/modules. Seem to be more common in Microsoft collections

➜  site-packages git:(master) ✗ ag 'from \.\.\.' ansible_collections 
ansible_collections/microsoft/ad/plugins/plugin_utils/_ldap/schema.py
18:from ...filter.ldap_converters import as_guid, as_sid

Refs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Some amazon.aws modules fail on relative import error

2 participants