From 20f70cfed97761df4937cca37bc7a5e6c89fd6d3 Mon Sep 17 00:00:00 2001 From: Nicolas DUBUT Date: Fri, 7 Feb 2025 11:19:45 +0100 Subject: [PATCH 1/3] fix: add support for block 5k,15k in k8s pool + public_ip parameter --- plugins/modules/scaleway_k8s_pool.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/modules/scaleway_k8s_pool.py b/plugins/modules/scaleway_k8s_pool.py index d75acbc..8d6f043 100644 --- a/plugins/modules/scaleway_k8s_pool.py +++ b/plugins/modules/scaleway_k8s_pool.py @@ -71,6 +71,8 @@ - default_volume_type - l_ssd - b_ssd + - sbs_5k + - sbs_15k region: description: region type: str @@ -116,6 +118,10 @@ description: root_volume_size type: int required: false + public_ip_disabled: + description: public_ip_disabled + type: bool + required: true """ EXAMPLES = r""" @@ -130,6 +136,7 @@ container_runtime: "aaaaaa" autohealing: true root_volume_type: "aaaaaa" + public_ip_disabled: true """ RETURN = r""" @@ -166,6 +173,7 @@ zone: "aaaaaa" root_volume_type: default_volume_type root_volume_size: 3 + public_ip_disabled: true region: fr-par """ @@ -341,6 +349,10 @@ def main() -> None: type="int", required=False, ), + public_ip_disabled=dict( + type="bool", + required=True, + ), ) module = AnsibleModule( From eae7c974bdc42799514c61bcb8a99dc85fa2c891 Mon Sep 17 00:00:00 2001 From: Nicolas DUBUT Date: Fri, 7 Feb 2025 11:51:29 +0100 Subject: [PATCH 2/3] Update scaleway_k8s_pool.py --- plugins/modules/scaleway_k8s_pool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/scaleway_k8s_pool.py b/plugins/modules/scaleway_k8s_pool.py index 8d6f043..dcdd1b9 100644 --- a/plugins/modules/scaleway_k8s_pool.py +++ b/plugins/modules/scaleway_k8s_pool.py @@ -305,7 +305,7 @@ def main() -> None: root_volume_type=dict( type="str", required=True, - choices=["default_volume_type", "l_ssd", "b_ssd"], + choices=["default_volume_type", "l_ssd", "b_ssd", "sbs_5k", "sbs_15k"], ), region=dict( type="str", From 2fb1b094797a8b2bef5990957d45b758f814f225 Mon Sep 17 00:00:00 2001 From: Nicolas DUBUT Date: Fri, 7 Feb 2025 13:33:52 +0100 Subject: [PATCH 3/3] feat: add update_pool method --- plugins/modules/scaleway_k8s_pool.py | 61 +++++++++++++++++++++------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/plugins/modules/scaleway_k8s_pool.py b/plugins/modules/scaleway_k8s_pool.py index dcdd1b9..2f63d28 100644 --- a/plugins/modules/scaleway_k8s_pool.py +++ b/plugins/modules/scaleway_k8s_pool.py @@ -1,3 +1,8 @@ +################## +# Waiting for scaleway merge fix https://github.com/scaleway/ansible/pull/47 +################## + + #!/usr/bin/python # -*- coding: utf-8 -*- # Copyright: (c) 2023, Scaleway @@ -25,7 +30,7 @@ state: description: - Indicate desired state of the target. - - C(present) will create the resource. + - C(present) will create the resource, or update if 'pool_id' is present - C(absent) will delete the resource, if it exists. default: present choices: ["present", "absent"] @@ -137,6 +142,14 @@ autohealing: true root_volume_type: "aaaaaa" public_ip_disabled: true + +- name: Update a pool + scaleway.scaleway.scaleway_k8s_pool: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" + cluster_id: "aaaaaa" + pool_id: "my_pool" + size: 3 """ RETURN = r""" @@ -201,14 +214,28 @@ def create(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) + obj = lambda: None + obj.stop = None + obj.timeout = 600 + obj.min_delay = 1 + obj.max_delay = 30 + + id = module.params["pool_id"] if id is not None: - resource = api.get_pool(pool_id=id) + resource = api.get_pool(pool_id=id, region=module.params["region"]) if module.check_mode: module.exit_json(changed=False) - module.exit_json(changed=False, data=resource) + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + not_none_params.pop("cluster_id") + resource = api.update_pool(**not_none_params) + resource = api.wait_for_pool(pool_id=resource.id, options=obj, region=module.params["region"]) + + del resource.upgrade_policy + module.exit_json(changed=True, data=vars(resource)) if module.check_mode: module.exit_json(changed=True) @@ -217,15 +244,16 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_pool(**not_none_params) - resource = api.wait_for_pool(pool_id=resource.id, region=module.params["region"]) + resource = api.wait_for_pool(pool_id=resource.id, options=obj, region=module.params["region"]) - module.exit_json(changed=True, data=resource.__dict__) + del resource.upgrade_policy + module.exit_json(changed=True, data=vars(resource)) def delete(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) + id = module.params.pop("pool_id", None) name = module.params.pop("name", None) if id is not None: @@ -276,35 +304,35 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), - pool_id=dict(type="str"), + pool_id=dict(type="str", default=None), cluster_id=dict( type="str", required=True, ), node_type=dict( type="str", - required=True, + required=False, ), autoscaling=dict( type="bool", - required=True, + required=False, ), size=dict( type="int", - required=True, + required=False, ), container_runtime=dict( type="str", - required=True, + required=False, choices=["unknown_runtime", "docker", "containerd", "crio"], ), autohealing=dict( type="bool", - required=True, + required=False, ), root_volume_type=dict( type="str", - required=True, + required=False, choices=["default_volume_type", "l_ssd", "b_ssd", "sbs_5k", "sbs_15k"], ), region=dict( @@ -351,13 +379,16 @@ def main() -> None: ), public_ip_disabled=dict( type="bool", - required=True, + required=False, ), ) module = AnsibleModule( argument_spec=argument_spec, required_one_of=(["pool_id", "name"],), + required_by={ + 'name': ('node_type','root_volume_type','autohealing','container_runtime','size','autoscaling','public_ip_disabled',), + }, supports_check_mode=True, )