Skip to content

Commit 2fb1b09

Browse files
committed
feat: add update_pool method
1 parent eae7c97 commit 2fb1b09

File tree

1 file changed

+46
-15
lines changed

1 file changed

+46
-15
lines changed

plugins/modules/scaleway_k8s_pool.py

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
##################
2+
# Waiting for scaleway merge fix https://github.com/scaleway/ansible/pull/47
3+
##################
4+
5+
16
#!/usr/bin/python
27
# -*- coding: utf-8 -*-
38
# Copyright: (c) 2023, Scaleway
@@ -25,7 +30,7 @@
2530
state:
2631
description:
2732
- Indicate desired state of the target.
28-
- C(present) will create the resource.
33+
- C(present) will create the resource, or update if 'pool_id' is present
2934
- C(absent) will delete the resource, if it exists.
3035
default: present
3136
choices: ["present", "absent"]
@@ -137,6 +142,14 @@
137142
autohealing: true
138143
root_volume_type: "aaaaaa"
139144
public_ip_disabled: true
145+
146+
- name: Update a pool
147+
scaleway.scaleway.scaleway_k8s_pool:
148+
access_key: "{{ scw_access_key }}"
149+
secret_key: "{{ scw_secret_key }}"
150+
cluster_id: "aaaaaa"
151+
pool_id: "my_pool"
152+
size: 3
140153
"""
141154

142155
RETURN = r"""
@@ -201,14 +214,28 @@
201214
def create(module: AnsibleModule, client: "Client") -> None:
202215
api = K8SV1API(client)
203216

204-
id = module.params.pop("id", None)
217+
obj = lambda: None
218+
obj.stop = None
219+
obj.timeout = 600
220+
obj.min_delay = 1
221+
obj.max_delay = 30
222+
223+
id = module.params["pool_id"]
205224
if id is not None:
206-
resource = api.get_pool(pool_id=id)
225+
resource = api.get_pool(pool_id=id, region=module.params["region"])
207226

208227
if module.check_mode:
209228
module.exit_json(changed=False)
210229

211-
module.exit_json(changed=False, data=resource)
230+
not_none_params = {
231+
key: value for key, value in module.params.items() if value is not None
232+
}
233+
not_none_params.pop("cluster_id")
234+
resource = api.update_pool(**not_none_params)
235+
resource = api.wait_for_pool(pool_id=resource.id, options=obj, region=module.params["region"])
236+
237+
del resource.upgrade_policy
238+
module.exit_json(changed=True, data=vars(resource))
212239

213240
if module.check_mode:
214241
module.exit_json(changed=True)
@@ -217,15 +244,16 @@ def create(module: AnsibleModule, client: "Client") -> None:
217244
key: value for key, value in module.params.items() if value is not None
218245
}
219246
resource = api.create_pool(**not_none_params)
220-
resource = api.wait_for_pool(pool_id=resource.id, region=module.params["region"])
247+
resource = api.wait_for_pool(pool_id=resource.id, options=obj, region=module.params["region"])
221248

222-
module.exit_json(changed=True, data=resource.__dict__)
249+
del resource.upgrade_policy
250+
module.exit_json(changed=True, data=vars(resource))
223251

224252

225253
def delete(module: AnsibleModule, client: "Client") -> None:
226254
api = K8SV1API(client)
227255

228-
id = module.params.pop("id", None)
256+
id = module.params.pop("pool_id", None)
229257
name = module.params.pop("name", None)
230258

231259
if id is not None:
@@ -276,35 +304,35 @@ def main() -> None:
276304
argument_spec.update(scaleway_waitable_resource_argument_spec())
277305
argument_spec.update(
278306
state=dict(type="str", default="present", choices=["absent", "present"]),
279-
pool_id=dict(type="str"),
307+
pool_id=dict(type="str", default=None),
280308
cluster_id=dict(
281309
type="str",
282310
required=True,
283311
),
284312
node_type=dict(
285313
type="str",
286-
required=True,
314+
required=False,
287315
),
288316
autoscaling=dict(
289317
type="bool",
290-
required=True,
318+
required=False,
291319
),
292320
size=dict(
293321
type="int",
294-
required=True,
322+
required=False,
295323
),
296324
container_runtime=dict(
297325
type="str",
298-
required=True,
326+
required=False,
299327
choices=["unknown_runtime", "docker", "containerd", "crio"],
300328
),
301329
autohealing=dict(
302330
type="bool",
303-
required=True,
331+
required=False,
304332
),
305333
root_volume_type=dict(
306334
type="str",
307-
required=True,
335+
required=False,
308336
choices=["default_volume_type", "l_ssd", "b_ssd", "sbs_5k", "sbs_15k"],
309337
),
310338
region=dict(
@@ -351,13 +379,16 @@ def main() -> None:
351379
),
352380
public_ip_disabled=dict(
353381
type="bool",
354-
required=True,
382+
required=False,
355383
),
356384
)
357385

358386
module = AnsibleModule(
359387
argument_spec=argument_spec,
360388
required_one_of=(["pool_id", "name"],),
389+
required_by={
390+
'name': ('node_type','root_volume_type','autohealing','container_runtime','size','autoscaling','public_ip_disabled',),
391+
},
361392
supports_check_mode=True,
362393
)
363394

0 commit comments

Comments
 (0)