Skip to content

Commit e854ff2

Browse files
committed
proxmox_subnet: get lock just before change
1 parent 9adc390 commit e854ff2

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

plugins/modules/proxmox_subnet.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ def get_ansible_module():
183183
required_if=[
184184
('state', 'present', ['subnet', 'vnet', 'zone']),
185185
('state', 'absent', ['zone', 'vnet', 'subnet']),
186-
# ('dhcp_range_update_mode', 'overwrite', ['dhcp_range'])
187186
]
188187
)
189188

@@ -235,12 +234,12 @@ def run(self):
235234
'dhcp-range': get_dhcp_range(dhcp_range=self.params.get('dhcp_range')),
236235
'dnszoneprefix': self.params.get('dnszoneprefix'),
237236
'gateway': self.params.get('gateway'),
238-
'lock-token': self.params.get('lock_token') or self.get_global_sdn_lock(),
237+
'lock-token': None,
239238
'snat': ansible_to_proxmox_bool(self.params.get('snat'))
240239
}
241240

242241
if state == 'present':
243-
self.subnet_present(update=update, **subnet_params)
242+
self.subnet_present(**subnet_params)
244243
elif state == 'absent':
245244
self.subnet_absent(**subnet_params)
246245

@@ -253,7 +252,6 @@ def get_subnets(self, vnet_name):
253252
def update_subnet(self, **subnet_params):
254253
new_subnet = copy.deepcopy(subnet_params)
255254
subnet_id = f"{self.params['zone']}-{new_subnet['subnet'].replace('/', '-')}"
256-
lock = subnet_params['lock-token']
257255
vnet_name = new_subnet['vnet']
258256
dhcp_range_update_mode = self.params.get('dhcp_range_update_mode')
259257

@@ -293,9 +291,7 @@ def update_subnet(self, **subnet_params):
293291
if dhcp_range_update_mode == 'append':
294292
if partial_overlap:
295293
self.module.fail_json(
296-
msg=f"There are overlapping DHCP ranges. this is not allowed. "
297-
f"Existing range - {existing_subnet['dhcp-range']} "
298-
f"New Range - {new_dhcp_range}"
294+
msg=f"There are partially overlapping DHCP ranges. this is not allowed."
299295
)
300296

301297
if len(new_dhcp) > 0:
@@ -312,7 +308,7 @@ def update_subnet(self, **subnet_params):
312308
"dhcp_range_update_mode is set to append, but you didn't provide any DHCP ranges for the subnet. "
313309
"Existing ranges will be ignored."
314310
)
315-
311+
316312
elif dhcp_range_update_mode == 'overwrite':
317313
update_dhcp = True
318314
self.module.warn(
@@ -328,37 +324,35 @@ def update_subnet(self, **subnet_params):
328324
self.module.warn(f"{subnet_params}, {update_dhcp}")
329325
if self.params.get('update'):
330326
try:
327+
subnet_params['lock-token'] = self.get_global_sdn_lock()
331328
subnet = getattr(self.proxmox_api.cluster().sdn().vnets(vnet_name).subnets(), subnet_id)
332329
subnet_params['digest'] = subnet.get()['digest']
333330
del subnet_params['type']
334331
del subnet_params['subnet']
335332

336333
subnet.put(**subnet_params)
337-
self.apply_sdn_changes_and_release_lock(lock=lock)
334+
self.apply_sdn_changes_and_release_lock(lock=subnet_params['lock-token'])
338335
self.module.exit_json(
339336
changed=True, subnet=subnet_id, msg=f'Updated subnet {subnet_id}'
340337
)
341338
except Exception as e:
342-
self.rollback_sdn_changes_and_release_lock(lock=lock)
339+
self.rollback_sdn_changes_and_release_lock(lock=subnet_params['lock-token'])
343340
self.module.fail_json(
344341
msg=f'Failed to update subnet. Rolling back all changes : {e}'
345342
)
346343
else:
347-
self.release_lock(lock=lock)
348344
self.module.fail_json(
349345
msg=f"Subnet {subnet_id} needs to be updated but update is false."
350346
)
351347
else:
352-
self.release_lock(lock=lock)
353348
self.module.exit_json(
354349
changed=False,
355350
subnet=subnet_id,
356351
msg=f'subnet {subnet_id} is already present with correct parameters.'
357352
)
358353

359-
def subnet_present(self, update, **subnet_params):
354+
def subnet_present(self, **subnet_params):
360355
vnet_name = subnet_params['vnet']
361-
lock = subnet_params['lock-token']
362356
subnet_cidr = subnet_params['subnet']
363357
subnet_id = f"{self.params['zone']}-{subnet_params['subnet'].replace('/', '-')}"
364358

@@ -370,46 +364,45 @@ def subnet_present(self, update, **subnet_params):
370364
if subnet_id in [x['subnet'] for x in existing_subnets]:
371365
self.update_subnet(**subnet_params)
372366
else:
367+
subnet_params['lock-token'] = self.get_global_sdn_lock()
373368
vnet.subnets().post(**subnet_params)
374-
self.apply_sdn_changes_and_release_lock(lock=lock)
369+
self.apply_sdn_changes_and_release_lock(lock=subnet_params['lock-token'])
375370
self.module.exit_json(
376371
changed=True, subnet=subnet_id, msg=f'Created new subnet {subnet_cidr}'
377372
)
378373
except Exception as e:
379-
self.rollback_sdn_changes_and_release_lock(lock=lock)
374+
self.rollback_sdn_changes_and_release_lock(lock=subnet_params['lock-token'])
380375
self.module.fail_json(
381376
msg=f'Failed to create subnet. Rolling back all changes : {e}'
382377
)
383378

384379
def subnet_absent(self, **subnet_params):
385380
vnet_id = subnet_params['vnet']
386-
lock = subnet_params['lock-token']
387381
subnet_id = f"{self.params['zone']}-{subnet_params['subnet'].replace('/', '-')}"
388382

389383
params = {
390384
'subnet': subnet_id,
391385
'vnet': vnet_id,
392-
'lock-token': lock
386+
'lock-token': None
393387
}
394388

395389
try:
396390
vnet = getattr(self.proxmox_api.cluster().sdn().vnets(), vnet_id)
397391

398392
# Check if subnet already present
399393
if subnet_id in [x['subnet'] for x in vnet().subnets().get()]:
400-
subnet = getattr(vnet().subnets(), subnet_id)
401-
subnet.delete(**params)
402-
self.apply_sdn_changes_and_release_lock(lock=lock)
394+
params['lock-token'] = self.get_global_sdn_lock()
395+
vnet().subnets(subnet_id).delete(**params)
396+
self.apply_sdn_changes_and_release_lock(lock=params['lock-token'])
403397
self.module.exit_json(
404398
changed=True, subnet=subnet_id, msg=f'Deleted subnet {subnet_id}'
405399
)
406400
else:
407-
self.release_lock(lock=lock)
408401
self.module.exit_json(
409402
changed=False, subnet=subnet_id, msg=f'subnet {subnet_id} already not present.'
410403
)
411404
except Exception as e:
412-
self.rollback_sdn_changes_and_release_lock(lock=lock)
405+
self.rollback_sdn_changes_and_release_lock(lock=params['lock-token'])
413406
self.module.fail_json(
414407
msg=f'Failed to delete subnet. Rolling back all changes. : {e}'
415408
)

0 commit comments

Comments
 (0)