Reformat everything.

This commit is contained in:
Felix Fontein
2025-11-01 12:08:41 +01:00
parent 3f2213791a
commit 340ff8586d
1008 changed files with 61301 additions and 58309 deletions

View File

@@ -157,7 +157,10 @@ vlan:
"""
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.dimensiondata import DimensionDataModule, UnknownNetworkError
from ansible_collections.community.general.plugins.module_utils.dimensiondata import (
DimensionDataModule,
UnknownNetworkError,
)
try:
from libcloud.common.dimensiondata import DimensionDataVlan, DimensionDataAPIException
@@ -183,30 +186,28 @@ class DimensionDataVlanModule(DimensionDataModule):
super().__init__(
module=AnsibleModule(
argument_spec=DimensionDataModule.argument_spec_with_wait(
name=dict(required=True, type='str'),
description=dict(default='', type='str'),
network_domain=dict(required=True, type='str'),
private_ipv4_base_address=dict(default='', type='str'),
private_ipv4_prefix_size=dict(default=0, type='int'),
allow_expand=dict(default=False, type='bool'),
state=dict(default='present', choices=['present', 'absent', 'readonly'])
name=dict(required=True, type="str"),
description=dict(default="", type="str"),
network_domain=dict(required=True, type="str"),
private_ipv4_base_address=dict(default="", type="str"),
private_ipv4_prefix_size=dict(default=0, type="int"),
allow_expand=dict(default=False, type="bool"),
state=dict(default="present", choices=["present", "absent", "readonly"]),
),
required_together=DimensionDataModule.required_together()
required_together=DimensionDataModule.required_together(),
)
)
self.name = self.module.params['name']
self.description = self.module.params['description']
self.network_domain_selector = self.module.params['network_domain']
self.private_ipv4_base_address = self.module.params['private_ipv4_base_address']
self.private_ipv4_prefix_size = self.module.params['private_ipv4_prefix_size']
self.state = self.module.params['state']
self.allow_expand = self.module.params['allow_expand']
self.name = self.module.params["name"]
self.description = self.module.params["description"]
self.network_domain_selector = self.module.params["network_domain"]
self.private_ipv4_base_address = self.module.params["private_ipv4_base_address"]
self.private_ipv4_prefix_size = self.module.params["private_ipv4_prefix_size"]
self.state = self.module.params["state"]
self.allow_expand = self.module.params["allow_expand"]
if self.wait and self.state != 'present':
self.module.fail_json(
msg='The wait parameter is only supported when state is "present".'
)
if self.wait and self.state != "present":
self.module.fail_json(msg='The wait parameter is only supported when state is "present".')
def state_present(self):
"""
@@ -220,14 +221,14 @@ class DimensionDataVlanModule(DimensionDataModule):
if self.module.check_mode:
self.module.exit_json(
msg=f'VLAN "{self.name}" is absent from network domain "{self.network_domain_selector}" (should be present).',
changed=True
changed=True,
)
vlan = self._create_vlan(network_domain)
self.module.exit_json(
msg=f'Created VLAN "{self.name}" in network domain "{self.network_domain_selector}".',
vlan=vlan_to_dict(vlan),
changed=True
changed=True,
)
else:
diff = VlanDiff(vlan, self.module.params)
@@ -235,7 +236,7 @@ class DimensionDataVlanModule(DimensionDataModule):
self.module.exit_json(
msg=f'VLAN "{self.name}" is present in network domain "{self.network_domain_selector}" (no changes detected).',
vlan=vlan_to_dict(vlan),
changed=False
changed=False,
)
return
@@ -249,16 +250,16 @@ class DimensionDataVlanModule(DimensionDataModule):
if diff.needs_expand() and not self.allow_expand:
self.module.fail_json(
msg=f'The configured private IPv4 network size ({self.private_ipv4_prefix_size}-bit prefix) for '
f'the VLAN differs from its current network size ({vlan.private_ipv4_range_size}-bit prefix) '
'and needs to be expanded. Use allow_expand=true if this is what you want.'
msg=f"The configured private IPv4 network size ({self.private_ipv4_prefix_size}-bit prefix) for "
f"the VLAN differs from its current network size ({vlan.private_ipv4_range_size}-bit prefix) "
"and needs to be expanded. Use allow_expand=true if this is what you want."
)
if self.module.check_mode:
self.module.exit_json(
msg=f'VLAN "{self.name}" is present in network domain "{self.network_domain_selector}" (changes detected).',
vlan=vlan_to_dict(vlan),
changed=True
changed=True,
)
if diff.needs_edit():
@@ -274,7 +275,7 @@ class DimensionDataVlanModule(DimensionDataModule):
self.module.exit_json(
msg=f'Updated VLAN "{self.name}" in network domain "{self.network_domain_selector}".',
vlan=vlan_to_dict(vlan),
changed=True
changed=True,
)
def state_readonly(self):
@@ -286,10 +287,7 @@ class DimensionDataVlanModule(DimensionDataModule):
vlan = self._get_vlan(network_domain)
if vlan:
self.module.exit_json(
vlan=vlan_to_dict(vlan),
changed=False
)
self.module.exit_json(vlan=vlan_to_dict(vlan), changed=False)
else:
self.module.fail_json(
msg=f'VLAN "{self.name}" does not exist in network domain "{self.network_domain_selector}".'
@@ -305,8 +303,7 @@ class DimensionDataVlanModule(DimensionDataModule):
vlan = self._get_vlan(network_domain)
if not vlan:
self.module.exit_json(
msg=f'VLAN "{self.name}" is absent from network domain "{self.network_domain_selector}".',
changed=False
msg=f'VLAN "{self.name}" is absent from network domain "{self.network_domain_selector}".', changed=False
)
return
@@ -315,14 +312,13 @@ class DimensionDataVlanModule(DimensionDataModule):
self.module.exit_json(
msg=f'VLAN "{self.name}" is present in network domain "{self.network_domain_selector}" (should be absent).',
vlan=vlan_to_dict(vlan),
changed=True
changed=True,
)
self._delete_vlan(vlan)
self.module.exit_json(
msg=f'Deleted VLAN "{self.name}" from network domain "{self.network_domain_selector}".',
changed=True
msg=f'Deleted VLAN "{self.name}" from network domain "{self.network_domain_selector}".', changed=True
)
def _get_vlan(self, network_domain):
@@ -334,10 +330,7 @@ class DimensionDataVlanModule(DimensionDataModule):
:rtype: DimensionDataVlan
"""
vlans = self.driver.ex_list_vlans(
location=self.location,
network_domain=network_domain
)
vlans = self.driver.ex_list_vlans(location=self.location, network_domain=network_domain)
matching_vlans = [vlan for vlan in vlans if vlan.name == self.name]
if matching_vlans:
return matching_vlans[0]
@@ -346,15 +339,11 @@ class DimensionDataVlanModule(DimensionDataModule):
def _create_vlan(self, network_domain):
vlan = self.driver.ex_create_vlan(
network_domain,
self.name,
self.private_ipv4_base_address,
self.description,
self.private_ipv4_prefix_size
network_domain, self.name, self.private_ipv4_base_address, self.description, self.private_ipv4_prefix_size
)
if self.wait:
vlan = self._wait_for_vlan_state(vlan.id, 'NORMAL')
vlan = self._wait_for_vlan_state(vlan.id, "NORMAL")
return vlan
@@ -364,7 +353,7 @@ class DimensionDataVlanModule(DimensionDataModule):
# Not currently supported for deletes due to a bug in libcloud (module will error out if "wait" is specified when "state" is not "present").
if self.wait:
self._wait_for_vlan_state(vlan, 'NOT_FOUND')
self._wait_for_vlan_state(vlan, "NOT_FOUND")
except DimensionDataAPIException as api_exception:
self.module.fail_json(
@@ -374,37 +363,33 @@ class DimensionDataVlanModule(DimensionDataModule):
def _wait_for_vlan_state(self, vlan, state_to_wait_for):
network_domain = self._get_network_domain()
wait_poll_interval = self.module.params['wait_poll_interval']
wait_time = self.module.params['wait_time']
wait_poll_interval = self.module.params["wait_poll_interval"]
wait_time = self.module.params["wait_time"]
# Bizarre bug in libcloud when checking status after delete; socket.error is too generic to catch in this context so for now we don't even try.
try:
return self.driver.connection.wait_for_state(
state_to_wait_for,
self.driver.ex_get_vlan,
wait_poll_interval,
wait_time,
vlan
state_to_wait_for, self.driver.ex_get_vlan, wait_poll_interval, wait_time, vlan
)
except DimensionDataAPIException as api_exception:
if api_exception.code != 'RESOURCE_NOT_FOUND':
if api_exception.code != "RESOURCE_NOT_FOUND":
raise
return DimensionDataVlan(
id=vlan.id,
status='NOT_FOUND',
name='',
description='',
private_ipv4_range_address='',
status="NOT_FOUND",
name="",
description="",
private_ipv4_range_address="",
private_ipv4_range_size=0,
ipv4_gateway='',
ipv6_range_address='',
ipv4_gateway="",
ipv6_range_address="",
ipv6_range_size=0,
ipv6_gateway='',
ipv6_gateway="",
location=self.location,
network_domain=network_domain
network_domain=network_domain,
)
def _get_network_domain(self):
@@ -415,9 +400,7 @@ class DimensionDataVlanModule(DimensionDataModule):
"""
try:
return self.get_network_domain(
self.network_domain_selector, self.location
)
return self.get_network_domain(self.network_domain_selector, self.location)
except UnknownNetworkError:
self.module.fail_json(
msg=f'Cannot find network domain "{self.network_domain_selector}" in datacenter "{self.location}".'
@@ -451,13 +434,17 @@ class VlanDiff:
self.vlan = vlan
self.module_params = module_params
self.name_changed = module_params['name'] != vlan.name
self.description_changed = module_params['description'] != vlan.description
self.private_ipv4_base_address_changed = module_params['private_ipv4_base_address'] != vlan.private_ipv4_range_address
self.private_ipv4_prefix_size_changed = module_params['private_ipv4_prefix_size'] != vlan.private_ipv4_range_size
self.name_changed = module_params["name"] != vlan.name
self.description_changed = module_params["description"] != vlan.description
self.private_ipv4_base_address_changed = (
module_params["private_ipv4_base_address"] != vlan.private_ipv4_range_address
)
self.private_ipv4_prefix_size_changed = (
module_params["private_ipv4_prefix_size"] != vlan.private_ipv4_range_size
)
# Is configured prefix size greater than or less than the actual prefix size?
private_ipv4_prefix_size_difference = module_params['private_ipv4_prefix_size'] - vlan.private_ipv4_range_size
private_ipv4_prefix_size_difference = module_params["private_ipv4_prefix_size"] - vlan.private_ipv4_range_size
self.private_ipv4_prefix_size_increased = private_ipv4_prefix_size_difference > 0
self.private_ipv4_prefix_size_decreased = private_ipv4_prefix_size_difference < 0
@@ -482,11 +469,13 @@ class VlanDiff:
# Cannot change base address for private IPv4 network.
if self.private_ipv4_base_address_changed:
raise InvalidVlanChangeError('Cannot change the private IPV4 base address for an existing VLAN.')
raise InvalidVlanChangeError("Cannot change the private IPV4 base address for an existing VLAN.")
# Cannot shrink private IPv4 network (by increasing prefix size).
if self.private_ipv4_prefix_size_increased:
raise InvalidVlanChangeError('Cannot shrink the private IPV4 network for an existing VLAN (only expand is supported).')
raise InvalidVlanChangeError(
"Cannot shrink the private IPV4 network for an existing VLAN (only expand is supported)."
)
def needs_edit(self):
"""
@@ -511,30 +500,30 @@ class VlanDiff:
def vlan_to_dict(vlan):
return {
'id': vlan.id,
'name': vlan.name,
'description': vlan.description,
'location': vlan.location.id,
'private_ipv4_base_address': vlan.private_ipv4_range_address,
'private_ipv4_prefix_size': vlan.private_ipv4_range_size,
'private_ipv4_gateway_address': vlan.ipv4_gateway,
'ipv6_base_address': vlan.ipv6_range_address,
'ipv6_prefix_size': vlan.ipv6_range_size,
'ipv6_gateway_address': vlan.ipv6_gateway,
'status': vlan.status
"id": vlan.id,
"name": vlan.name,
"description": vlan.description,
"location": vlan.location.id,
"private_ipv4_base_address": vlan.private_ipv4_range_address,
"private_ipv4_prefix_size": vlan.private_ipv4_range_size,
"private_ipv4_gateway_address": vlan.ipv4_gateway,
"ipv6_base_address": vlan.ipv6_range_address,
"ipv6_prefix_size": vlan.ipv6_range_size,
"ipv6_gateway_address": vlan.ipv6_gateway,
"status": vlan.status,
}
def main():
module = DimensionDataVlanModule()
if module.state == 'present':
if module.state == "present":
module.state_present()
elif module.state == 'readonly':
elif module.state == "readonly":
module.state_readonly()
elif module.state == 'absent':
elif module.state == "absent":
module.state_absent()
if __name__ == '__main__':
if __name__ == "__main__":
main()