Skip to content

Commit 5741796

Browse files
committed
proxmox_zone: Merge statepresent and update
1 parent cf1f4c2 commit 5741796

File tree

1 file changed

+25
-66
lines changed

1 file changed

+25
-66
lines changed

plugins/modules/proxmox_zone.py

Lines changed: 25 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,11 @@
2929
- present
3030
- absent
3131
- update
32-
force:
32+
update:
3333
description:
3434
- If state is present and zone exists it'll update.
35-
- If state is update and zone doesn't exists it'll create new zone
3635
type: bool
37-
default: false
36+
default: true
3837
type:
3938
description:
4039
- Specify the type of zone.
@@ -184,17 +183,6 @@
184183
state: present
185184
bridge: vmbr0
186185
187-
- name: update a zones
188-
community.proxmox.proxmox_zone:
189-
api_user: "root@pam"
190-
api_password: "{{ vault.proxmox.root_password }}"
191-
api_host: "{{ pc.proxmox.api_host }}"
192-
validate_certs: no
193-
type: vlan
194-
zone: ansible
195-
state: update
196-
mtu: 1200
197-
198186
- name: Delete a zones
199187
community.proxmox.proxmox_zone:
200188
api_user: "root@pam"
@@ -226,8 +214,8 @@
226214

227215
def get_proxmox_args():
228216
return dict(
229-
state=dict(type="str", choices=["present", "absent", "update"], required=False),
230-
force=dict(type="bool", default=False, required=False),
217+
state=dict(type="str", choices=["present", "absent"], required=True),
218+
update=dict(type="bool", default=True),
231219
type=dict(type="str",
232220
choices=["evpn", "faucet", "qinq", "simple", "vlan", "vxlan"],
233221
required=False),
@@ -281,7 +269,7 @@ def __init__(self, module):
281269

282270
def validate_params(self):
283271
zone_type = self.params.get('type')
284-
if self.params.get('state') in ['present', 'update']:
272+
if self.params.get('state') == 'present':
285273
if zone_type == 'vlan':
286274
return self.params.get('bridge')
287275
elif zone_type == 'qinq':
@@ -296,8 +284,8 @@ def validate_params(self):
296284
return True
297285

298286
def run(self):
299-
state = self.params.get("state")
300-
force = self.params.get("force")
287+
state = self.params.get('state')
288+
update = self.params.get('update')
301289
zone_type = self.params.get('type')
302290

303291
if not self.validate_params():
@@ -345,40 +333,43 @@ def run(self):
345333
zone_params['lock-token'] = self.get_global_sdn_lock()
346334

347335
if state == "present":
348-
self.zone_present(force, **zone_params)
349-
350-
elif state == "update":
351-
self.zone_update(**zone_params)
336+
self.zone_present(update, **zone_params)
352337

353338
elif state == "absent":
354339
self.zone_absent(
355340
zone_name=zone_params.get('zone'),
356341
lock=zone_params.get('lock-token')
357342
)
358-
else:
359-
zones = self.get_zones(
360-
zone_type=self.params.get('type')
361-
)
362-
self.module.exit_json(
363-
changed=False, zones=zones, msg="Successfully retrieved zone info."
364-
)
365343

366-
def zone_present(self, force, **kwargs):
344+
def zone_present(self, update, **kwargs):
367345
available_zones = {x.get('zone'): {'type': x.get('type'), 'digest': x.get('digest')} for x in self.get_zones()}
368346
zone_name = kwargs.get("zone")
369347
zone_type = kwargs.get("type")
370348
lock = kwargs.get('lock-token')
371349

372350
# Check if zone already exists
373-
if zone_name in available_zones.keys() and force:
351+
if zone_name in available_zones.keys() and update:
374352
if zone_type != available_zones[zone_name]['type']:
375353
self.release_lock(lock)
376354
self.module.fail_json(
377355
msg=f'zone {zone_name} exists with different type and we cannot change type post fact.'
378356
)
379357
else:
380-
self.zone_update(**kwargs)
381-
elif zone_name in available_zones.keys() and not force:
358+
try:
359+
kwargs['digest'] = available_zones[zone_name]['digest']
360+
zone = getattr(self.proxmox_api.cluster().sdn().zones(), zone_name)
361+
zone.put(**kwargs)
362+
self.apply_sdn_changes_and_release_lock(lock)
363+
self.module.exit_json(
364+
changed=True, zone=zone_name, msg=f'Updated zone - {zone_name}'
365+
)
366+
except Exception as e:
367+
self.rollback_sdn_changes_and_release_lock(lock)
368+
self.module.fail_json(
369+
msg=f'Failed to update zone {zone_name} - {e}'
370+
)
371+
372+
elif zone_name in available_zones.keys() and not update:
382373
self.release_lock(lock)
383374
self.module.exit_json(
384375
changed=False, zone=zone_name, msg=f'Zone {zone_name} already exists and force is false!'
@@ -396,38 +387,6 @@ def zone_present(self, force, **kwargs):
396387
msg=f'Failed to create zone {zone_name} - {e}'
397388
)
398389

399-
def zone_update(self, **kwargs):
400-
available_zones = {x.get('zone'): {'type': x.get('type'), 'digest': x.get('digest')} for x in self.get_zones()}
401-
zone_type = kwargs.get("type")
402-
zone_name = kwargs.get("zone")
403-
lock = kwargs.get('lock-token')
404-
405-
try:
406-
# If zone is not present create it
407-
if zone_name not in available_zones.keys():
408-
self.zone_present(force=False, **kwargs)
409-
elif zone_type == available_zones[zone_name]['type']:
410-
del kwargs['type']
411-
del kwargs['zone']
412-
kwargs['digest'] = available_zones[zone_name]['digest']
413-
414-
zone = getattr(self.proxmox_api.cluster().sdn().zones(), zone_name)
415-
zone.put(**kwargs)
416-
self.apply_sdn_changes_and_release_lock(lock)
417-
self.module.exit_json(
418-
changed=True, zone=zone_name, msg=f'Updated zone {zone_name}'
419-
)
420-
else:
421-
self.release_lock(lock)
422-
self.module.fail_json(
423-
msg=f'zone {zone_name} already exists with different type'
424-
)
425-
except Exception as e:
426-
self.rollback_sdn_changes_and_release_lock(lock)
427-
self.module.fail_json(
428-
msg=f'Failed to update zone {e}'
429-
)
430-
431390
def zone_absent(self, zone_name, lock):
432391
available_zones = [x.get('zone') for x in self.get_zones()]
433392
params = {'lock-token': lock}

0 commit comments

Comments
 (0)