9
9
10
10
__metaclass__ = type
11
11
12
- # from ansible_collections.community.sap_libs.plugins.modules.sap_control_exec import choices
13
- # from pygments.lexer import default
14
-
15
12
DOCUMENTATION = r"""
16
13
module: proxmox_zone
17
14
short_description: Manage Proxmox zone configurations
166
163
"""
167
164
168
165
EXAMPLES = r"""
169
- - name: Get all zones
170
- community.proxmox.proxmox_zone:
171
- api_user: "root@pam"
172
- api_password: "{{ vault.proxmox.root_password }}"
173
- api_host: "{{ pc.proxmox.api_host }}"
174
- validate_certs: no
175
-
176
- - name: Get all simple zones
177
- community.proxmox.proxmox_zone:
178
- api_user: "root@pam"
179
- api_password: "{{ vault.proxmox.root_password }}"
180
- api_host: "{{ pc.proxmox.api_host }}"
181
- validate_certs: no
182
- type: simple
183
- register: zones
184
-
185
166
- name: create a simple zones
186
167
community.proxmox.proxmox_zone:
187
168
api_user: "root@pam"
233
214
type: str
234
215
sample:
235
216
test
236
- zones:
237
- description:
238
- - List of zones.
239
- - If type is passed it'll filter based on type
240
- returned: on success
241
- type: list
242
- elements: dict
243
- sample:
244
- [
245
- {
246
- "digest": "e29dea494461aa699ab3bfb7264d95631c8d0e0d",
247
- "type": "simple",
248
- "zone": "ans1"
249
- },
250
- {
251
- "bridge": "vmbr0",
252
- "digest": "e29dea494461aa699ab3bfb7264d95631c8d0e0d",
253
- "mtu": 1200,
254
- "type": "vlan",
255
- "zone": "ansible"
256
- },
257
- {
258
- "bridge": "vmbr100",
259
- "digest": "e29dea494461aa699ab3bfb7264d95631c8d0e0d",
260
- "ipam": "pve",
261
- "type": "vlan",
262
- "zone": "lab"
263
- },
264
- {
265
- "dhcp": "dnsmasq",
266
- "digest": "e29dea494461aa699ab3bfb7264d95631c8d0e0d",
267
- "ipam": "pve",
268
- "type": "simple",
269
- "zone": "test1"
270
- },
271
- {
272
- "digest": "e29dea494461aa699ab3bfb7264d95631c8d0e0d",
273
- "ipam": "pve",
274
- "type": "simple",
275
- "zone": "tsjsfv"
276
- }
277
- ]
278
-
279
217
"""
280
218
281
219
from ansible .module_utils .basic import AnsibleModule
220
+ from ansible_collections .community .proxmox .plugins .module_utils .proxmox_sdn import ProxmoxSdnAnsible
282
221
from ansible_collections .community .proxmox .plugins .module_utils .proxmox import (
283
222
proxmox_auth_argument_spec ,
284
- ansible_to_proxmox_bool ,
285
- ProxmoxAnsible
223
+ ansible_to_proxmox_bool
286
224
)
287
225
288
226
@@ -336,21 +274,21 @@ def get_ansible_module():
336
274
)
337
275
338
276
339
- class ProxmoxZoneAnsible (ProxmoxAnsible ):
277
+ class ProxmoxZoneAnsible (ProxmoxSdnAnsible ):
340
278
def __init__ (self , module ):
341
279
super (ProxmoxZoneAnsible , self ).__init__ (module )
342
280
self .params = module .params
343
281
344
282
def validate_params (self ):
345
- type = self .params .get ('type' )
283
+ zone_type = self .params .get ('type' )
346
284
if self .params .get ('state' ) in ['present' , 'update' ]:
347
- if type == 'vlan' :
285
+ if zone_type == 'vlan' :
348
286
return self .params .get ('bridge' )
349
- elif type == 'qinq' :
287
+ elif zone_type == 'qinq' :
350
288
return self .params .get ('tag' ) and self .params .get ('vlan_protocol' )
351
- elif type == 'vxlan' :
289
+ elif zone_type == 'vxlan' :
352
290
return self .params .get ('fabric' )
353
- elif type == 'evpn' :
291
+ elif zone_type == 'evpn' :
354
292
return self .params .get ('controller' ) and self .params .get ('vrf_vxlan' )
355
293
else :
356
294
return True
@@ -360,7 +298,7 @@ def validate_params(self):
360
298
def run (self ):
361
299
state = self .params .get ("state" )
362
300
force = self .params .get ("force" )
363
- type = self .params [ 'type' ]
301
+ zone_type = self .params . get ( 'type' )
364
302
365
303
if not self .validate_params ():
366
304
required_params = {
@@ -370,7 +308,7 @@ def run(self):
370
308
'evpn' : ['controller' , 'vrf_vxlan' ]
371
309
}
372
310
self .module .fail_json (
373
- msg = f'to create zone of type { type } it needs - { required_params [type ]} '
311
+ msg = f'to create zone of type { zone_type } it needs - { required_params [zone_type ]} '
374
312
)
375
313
376
314
zone_params = {
@@ -419,64 +357,56 @@ def run(self):
419
357
)
420
358
else :
421
359
zones = self .get_zones (
422
- type = self .params .get ('type' )
360
+ zone_type = self .params .get ('type' )
423
361
)
424
362
self .module .exit_json (
425
363
changed = False , zones = zones , msg = "Successfully retrieved zone info."
426
364
)
427
365
428
- def get_zones (self , type = None ):
429
- try :
430
- return self .proxmox_api .cluster ().sdn ().zones ().get (type = type )
431
- except Exception as e :
432
- self .module .fail_json (
433
- msg = f'Failed to retrieve zone information from cluster: { e } '
434
- )
435
-
436
366
def zone_present (self , force , ** kwargs ):
437
367
available_zones = {x .get ('zone' ): {'type' : x .get ('type' ), 'digest' : x .get ('digest' )} for x in self .get_zones ()}
438
- zone = kwargs .get ("zone" )
439
- type = kwargs .get ("type" )
368
+ zone_name = kwargs .get ("zone" )
369
+ zone_type = kwargs .get ("type" )
440
370
lock = kwargs .get ('lock-token' )
441
371
442
372
# Check if zone already exists
443
- if zone in available_zones .keys () and force :
444
- if type != available_zones [zone ]['type' ]:
373
+ if zone_name in available_zones .keys () and force :
374
+ if zone_type != available_zones [zone_name ]['type' ]:
445
375
self .release_lock (lock )
446
376
self .module .fail_json (
447
- msg = f'zone { zone } exists with different type and we cannot change type post fact.'
377
+ msg = f'zone { zone_name } exists with different type and we cannot change type post fact.'
448
378
)
449
379
else :
450
380
self .zone_update (** kwargs )
451
- elif zone in available_zones .keys () and not force :
381
+ elif zone_name in available_zones .keys () and not force :
452
382
self .release_lock (lock )
453
383
self .module .exit_json (
454
- changed = False , zone = zone , msg = f'Zone { zone } already exists and force is false!'
384
+ changed = False , zone = zone_name , msg = f'Zone { zone_name } already exists and force is false!'
455
385
)
456
386
else :
457
387
try :
458
388
self .proxmox_api .cluster ().sdn ().zones ().post (** kwargs )
459
389
self .apply_sdn_changes_and_release_lock (lock )
460
390
self .module .exit_json (
461
- changed = True , zone = zone , msg = f'Created new Zone - { zone } '
391
+ changed = True , zone = zone_name , msg = f'Created new Zone - { zone_name } '
462
392
)
463
393
except Exception as e :
464
394
self .rollback_sdn_changes_and_release_lock (lock )
465
395
self .module .fail_json (
466
- msg = f'Failed to create zone { zone } '
396
+ msg = f'Failed to create zone { zone_name } - { e } '
467
397
)
468
398
469
399
def zone_update (self , ** kwargs ):
470
400
available_zones = {x .get ('zone' ): {'type' : x .get ('type' ), 'digest' : x .get ('digest' )} for x in self .get_zones ()}
471
- type = kwargs .get ("type" )
401
+ zone_type = kwargs .get ("type" )
472
402
zone_name = kwargs .get ("zone" )
473
403
lock = kwargs .get ('lock-token' )
474
404
475
405
try :
476
406
# If zone is not present create it
477
407
if zone_name not in available_zones .keys ():
478
408
self .zone_present (force = False , ** kwargs )
479
- elif type == available_zones [zone_name ]['type' ]:
409
+ elif zone_type == available_zones [zone_name ]['type' ]:
480
410
del kwargs ['type' ]
481
411
del kwargs ['zone' ]
482
412
kwargs ['digest' ] = available_zones [zone_name ]['digest' ]
0 commit comments