Skip to content

Commit 092e03a

Browse files
JanaHochThulium-Drake
authored andcommitted
proxmox_subnet: Added force conditions
1 parent 1f15a9d commit 092e03a

File tree

1 file changed

+57
-28
lines changed

1 file changed

+57
-28
lines changed

plugins/modules/proxmox_subnet.py

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def get_ansible_module():
5656
return AnsibleModule(
5757
argument_spec=module_args,
5858
required_if=[
59-
('state', 'present', ['subnet', 'type', 'vnet']),
59+
('state', 'present', ['subnet', 'type', 'vnet', 'zone']),
6060
('state', 'update', ['zone', 'vnet', 'subnet']),
6161
('state', 'absent', ['zone', 'vnet', 'subnet']),
6262
]
@@ -84,9 +84,9 @@ def run(self):
8484
}
8585

8686
if state == 'present':
87-
self.subnet_present(**subnet_params)
87+
self.subnet_present(force=force, **subnet_params)
8888
elif state == 'update':
89-
self.subnet_update(**subnet_params)
89+
self.subnet_update(force=force, **subnet_params)
9090
elif state == 'absent':
9191
self.subnet_absent(**subnet_params)
9292

@@ -96,44 +96,65 @@ def get_dhcp_range(self):
9696
dhcp_range = [f"start-address={x['start']},end-address={x['end']}" for x in self.params.get('dhcp_range')]
9797
return dhcp_range
9898

99-
def subnet_present(self, **subnet_params):
99+
def subnet_present(self,force, **subnet_params):
100100
vnet_name = subnet_params['vnet']
101101
lock = subnet_params['lock-token']
102102
subnet = subnet_params['subnet']
103+
subnet_id = f"{self.params['zone']}-{subnet_params['subnet'].replace('/', '-')}"
103104

104105
try:
105106
vnet = getattr(self.proxmox_api.cluster().sdn().vnets(), vnet_name)
106-
vnet.subnets().post(**subnet_params)
107-
self.apply_sdn_changes_and_release_lock(lock=lock)
108-
self.module.exit_json(
109-
changed=True, subnet=subnet, msg=f'Created new subnet {subnet}'
110-
)
107+
108+
# Check if subnet already present
109+
if subnet_id in [x['subnet'] for x in vnet().subnets().get()]:
110+
if force:
111+
self.subnet_update(force=False, **subnet_params)
112+
else:
113+
self.release_lock(lock=lock)
114+
self.module.exit_json(
115+
changed=False, subnet=subnet_id, msg=f'subnet {subnet_id} already present and force is false.'
116+
)
117+
else:
118+
vnet.subnets().post(**subnet_params)
119+
self.apply_sdn_changes_and_release_lock(lock=lock)
120+
self.module.exit_json(
121+
changed=True, subnet=subnet_id, msg=f'Created new subnet {subnet}'
122+
)
111123
except Exception as e:
112124
self.rollback_sdn_changes_and_release_lock(lock=lock)
113125
self.module.fail_json(
114126
msg=f'Failed to create subnet. Rolling back all changes. : {e}'
115127
)
116128

117-
def subnet_update(self, **subnet_params):
129+
def subnet_update(self,force, **subnet_params):
118130
lock = subnet_params['lock-token']
119131
vnet_id = subnet_params['vnet']
120132
subnet_id = f"{self.params['zone']}-{subnet_params['subnet'].replace('/', '-')}"
121133

122-
subnet_params['delete'] = self.params.get('delete')
123-
del subnet_params['type']
124-
del subnet_params['subnet']
125-
126134
try:
127135
vnet = getattr(self.proxmox_api.cluster().sdn().vnets(), vnet_id)
128-
subnet = getattr(vnet().subnets(), subnet_id)
129136

130-
subnet_params['digest'] = subnet.get()['digest']
131-
132-
subnet.put(**subnet_params)
133-
self.apply_sdn_changes_and_release_lock(lock=lock)
134-
self.module.exit_json(
135-
changed=True, subnet=subnet_id, msg=f'Updated subnet {subnet_id}'
136-
)
137+
# Check if subnet already present
138+
if subnet_id in [x['subnet'] for x in vnet().subnets().get()]:
139+
subnet = getattr(vnet().subnets(), subnet_id)
140+
subnet_params['digest'] = subnet.get()['digest']
141+
subnet_params['delete'] = self.params.get('delete')
142+
del subnet_params['type']
143+
del subnet_params['subnet']
144+
145+
subnet.put(**subnet_params)
146+
self.apply_sdn_changes_and_release_lock(lock=lock)
147+
self.module.exit_json(
148+
changed=True, subnet=subnet_id, msg=f'Updated subnet {subnet_id}'
149+
)
150+
else:
151+
if force:
152+
self.subnet_present(force=False, **subnet_params)
153+
else:
154+
self.release_lock(lock=lock)
155+
self.module.exit_json(
156+
changed=False, subnet=subnet_id, msg=f'subnet {subnet_id} not present and force is false.'
157+
)
137158
except Exception as e:
138159
self.rollback_sdn_changes_and_release_lock(lock=lock)
139160
self.module.fail_json(
@@ -153,12 +174,20 @@ def subnet_absent(self, **subnet_params):
153174

154175
try:
155176
vnet = getattr(self.proxmox_api.cluster().sdn().vnets(), vnet_id)
156-
subnet = getattr(vnet().subnets(), subnet_id)
157-
subnet.delete(**params)
158-
self.apply_sdn_changes_and_release_lock(lock=lock)
159-
self.module.exit_json(
160-
changed=True, subnet=subnet_id, msg=f'Deleted subnet {subnet_id}'
161-
)
177+
178+
# Check if subnet already present
179+
if subnet_id in [x['subnet'] for x in vnet().subnets().get()]:
180+
subnet = getattr(vnet().subnets(), subnet_id)
181+
subnet.delete(**params)
182+
self.apply_sdn_changes_and_release_lock(lock=lock)
183+
self.module.exit_json(
184+
changed=True, subnet=subnet_id, msg=f'Deleted subnet {subnet_id}'
185+
)
186+
else:
187+
self.release_lock(lock=lock)
188+
self.module.exit_json(
189+
changed=False, subnet=subnet_id, msg=f'subnet {subnet_id} already not present.'
190+
)
162191
except Exception as e:
163192
self.rollback_sdn_changes_and_release_lock(lock=lock)
164193
self.module.fail_json(

0 commit comments

Comments
 (0)