Skip to content

Commit 50500be

Browse files
committed
proxmox_subnet: Added update method
1 parent b566d00 commit 50500be

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

plugins/modules/proxmox_subnet.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ def get_proxmox_args():
3131
subnet=dict(type="str", required=True),
3232
type=dict(type="str", choices=['subnet'], default='subnet', required=False),
3333
vnet=dict(type="str", required=True),
34+
zone=dict(type="str", required=False),
3435
dhcp_dns_server=dict(type="str", required=False),
3536
dhcp_range=dict(
3637
type='list',
3738
elements='dict',
39+
required=False,
3840
options=dict(
39-
start=dict(type='str'),
40-
end=dict(type='str')
41+
start=dict(type='str', required=True),
42+
end=dict(type='str', required=True)
4143
)
4244
),
4345
dnszoneprefix=dict(type='str', required=False),
@@ -55,6 +57,7 @@ def get_ansible_module():
5557
argument_spec=module_args,
5658
required_if=[
5759
('state', 'present', ['subnet', 'type', 'vnet']),
60+
('state', 'update', ['zone', 'vnet', 'subnet']),
5861
]
5962
)
6063

@@ -80,7 +83,9 @@ def run(self):
8083
}
8184

8285
if state == 'present':
83-
self.subnet_present(force=force, **subnet_params)
86+
self.subnet_present(**subnet_params)
87+
elif state == 'update':
88+
self.subnet_update(**subnet_params)
8489

8590
def get_dhcp_range(self):
8691
if self.params.get('dhcp_range') is None:
@@ -106,6 +111,32 @@ def subnet_present(self, **subnet_params):
106111
msg=f'Failed to create subnet. Rolling back all changes. : {e}'
107112
)
108113

114+
def subnet_update(self, **subnet_params):
115+
lock = subnet_params['lock-token']
116+
vnet_id = subnet_params['vnet']
117+
subnet_id = f"{self.params['zone']}-{subnet_params['subnet'].replace('/', '-')}"
118+
119+
subnet_params['delete'] = self.params.get('delete')
120+
del subnet_params['type']
121+
del subnet_params['subnet']
122+
123+
try:
124+
vnet = getattr(self.proxmox_api.cluster().sdn().vnets(), vnet_id)
125+
subnet = getattr(vnet().subnets(), subnet_id)
126+
127+
subnet_params['digest'] = subnet.get()['digest']
128+
129+
subnet.put(**subnet_params)
130+
self.apply_sdn_changes_and_release_lock(lock=lock)
131+
self.module.exit_json(
132+
changed=True, subnet=subnet_id, msg=f'Updated subnet {subnet_id}'
133+
)
134+
except Exception as e:
135+
self.rollback_sdn_changes_and_release_lock(lock=lock)
136+
self.module.fail_json(
137+
msg=f'Failed to update subnet. Rolling back all changes. : {e}'
138+
)
139+
109140

110141
def main():
111142
module = get_ansible_module()

0 commit comments

Comments
 (0)