Skip to content

Commit 0c0bb74

Browse files
committed
proxmox_zone and proxmox module_utils
- Move sdn locking functions to proxmox module_utils
1 parent 70d3d83 commit 0c0bb74

File tree

2 files changed

+64
-46
lines changed

2 files changed

+64
-46
lines changed

plugins/module_utils/proxmox.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,67 @@ def get_storage_content(self, node, storage, content=None, vmid=None):
245245
msg="Unable to list content on %s, %s for %s and %s: %s"
246246
% (node, storage, content, vmid, e)
247247
)
248+
249+
def get_global_sdn_lock(self):
250+
"""Acquire global SDN lock. Needed for any changes under SDN.
251+
252+
@return: lock-token
253+
"""
254+
try:
255+
return self.proxmox_api.cluster().sdn().lock().post()
256+
except Exception as e:
257+
self.module.fail_json(
258+
msg=f'Failed to acquire global sdn lock {e}'
259+
)
260+
261+
def apply_sdn_changes_and_release_lock(self, lock, release_lock=True):
262+
"""Apply all SDN changes done under a lock token.
263+
264+
@param lock: Global SDN lock token
265+
@param release_lock: if True release lock after successfully applying changes
266+
"""
267+
lock_params = {
268+
'lock-token': lock,
269+
'release-lock': ansible_to_proxmox_bool(release_lock)
270+
}
271+
try:
272+
self.proxmox_api.cluster().sdn().put(**lock_params)
273+
except Exception as e:
274+
self.rollback_sdn_changes_and_release_lock(lock)
275+
self.module.fail_json(
276+
msg=f'Failed to apply sdn changes {e}. Rolling back all pending changes.'
277+
)
278+
279+
def rollback_sdn_changes_and_release_lock(self, lock, release_lock=True):
280+
"""Rollback all changes done under a lock token.
281+
282+
@param lock: Global SDN lock token
283+
@param release_lock: if True release lock after successfully rolling back changes
284+
"""
285+
lock_params = {
286+
'lock-token': lock,
287+
'release-lock': ansible_to_proxmox_bool(release_lock)
288+
}
289+
try:
290+
self.proxmox_api.cluster().sdn().rollback().post(**lock_params)
291+
except Exception as e:
292+
self.module.fail_json(
293+
msg=f'Rollback attempt failed - {e}. Manually clear lock by deleting /etc/pve/sdn/.lock'
294+
)
295+
296+
def release_lock(self, lock, force=False):
297+
"""Release lock
298+
299+
@param lock: Global SDN lock token
300+
@param force: if true, allow releasing lock without providing the token
301+
"""
302+
lock_params = {
303+
'lock-token': lock,
304+
'force': ansible_to_proxmox_bool(force)
305+
}
306+
try:
307+
self.proxmox_api.cluster().sdn().lock().delete(**lock_params)
308+
except Exception as e:
309+
self.module.fail_json(
310+
msg=f'Failed to release lock - {e}. Manually clear lock by deleting /etc/pve/sdn/.lock'
311+
)

plugins/modules/proxmox_zone.py

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -405,52 +405,6 @@ def run(self):
405405
changed=False, msg=zones
406406
)
407407

408-
def get_global_sdn_lock(self):
409-
try:
410-
return self.proxmox_api.cluster().sdn().lock().post()
411-
except Exception as e:
412-
self.module.fail_json(
413-
msg=f'Failed to acquire global sdn lock {e}'
414-
)
415-
416-
def apply_sdn_changes_and_release_lock(self, lock):
417-
lock_params = {
418-
'lock-token': lock,
419-
'release-lock': 1
420-
}
421-
try:
422-
return self.proxmox_api.cluster().sdn().put(**lock_params)
423-
except Exception as e:
424-
self.rollback_sdn_changes_and_release_lock(lock)
425-
self.module.fail_json(
426-
msg=f'Failed to apply sdn changes {e}. Rolling back all pending changes.'
427-
)
428-
429-
def rollback_sdn_changes_and_release_lock(self, lock):
430-
lock_params = {
431-
'lock-token': lock,
432-
'release-lock': 1
433-
}
434-
try:
435-
self.proxmox_api.cluster().sdn().rollback().post(**lock_params)
436-
except Exception as e:
437-
self.module.fail_json(
438-
msg=f'Rollback attempt failed - {e}. Manually clear lock by deleting /etc/pve/sdn/.lock'
439-
)
440-
441-
def release_lock(self, lock):
442-
lock_params = {
443-
'lock-token': lock,
444-
'force': 0
445-
}
446-
try:
447-
self.proxmox_api.cluster().sdn().lock().delete(**lock_params)
448-
except Exception as e:
449-
self.module.fail_json(
450-
msg=f'Failed to release lock - {e}. Manually clear lock by deleting /etc/pve/sdn/.lock'
451-
)
452-
453-
454408
def get_zones(self, **type):
455409
print("reached")
456410
try:

0 commit comments

Comments
 (0)