From 40ff016724946eb7adbfe829bb287508c49dc4b2 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 16:20:43 +0200 Subject: [PATCH 01/19] feat: add version number and add new modules --- ...ject.py => scaleway_account_v2_project.py} | 41 +- ... scaleway_applesilicon_v1alpha1_server.py} | 52 +-- ...ver.py => scaleway_baremetal_v1_server.py} | 55 ++- .../modules/scaleway_cockpit_v1beta1_token.py | 191 +++++++++ ...> scaleway_container_v1beta1_container.py} | 80 ++-- ....py => scaleway_container_v1beta1_cron.py} | 50 +-- ...y => scaleway_container_v1beta1_domain.py} | 43 +- ...> scaleway_container_v1beta1_namespace.py} | 54 ++- ...py => scaleway_container_v1beta1_token.py} | 41 +- .../scaleway_container_v1beta1_trigger.py | 239 +++++++++++ ...caleway_domain_v2beta1_ssl_certificate.py} | 37 +- ...aleway_flexibleip_v1alpha1_flexible_ip.py} | 44 +- ...n.py => scaleway_function_v1beta1_cron.py} | 50 +-- ...py => scaleway_function_v1beta1_domain.py} | 43 +- ... => scaleway_function_v1beta1_function.py} | 83 ++-- ...=> scaleway_function_v1beta1_namespace.py} | 54 ++- ....py => scaleway_function_v1beta1_token.py} | 41 +- ...y => scaleway_function_v1beta1_trigger.py} | 69 ++-- ...ey.py => scaleway_iam_v1alpha1_api_key.py} | 30 +- ...y => scaleway_iam_v1alpha1_application.py} | 35 +- ...roup.py => scaleway_iam_v1alpha1_group.py} | 37 +- ...icy.py => scaleway_iam_v1alpha1_policy.py} | 40 +- ...ey.py => scaleway_iam_v1alpha1_ssh_key.py} | 37 +- ...image.py => scaleway_instance_v1_image.py} | 51 ++- ...tance_ip.py => scaleway_instance_v1_ip.py} | 57 ++- ...> scaleway_instance_v1_placement_group.py} | 40 +- ...py => scaleway_instance_v1_private_nic.py} | 41 +- ...=> scaleway_instance_v1_security_group.py} | 40 +- ...aleway_instance_v1_security_group_rule.py} | 46 ++- ...ot.py => scaleway_instance_v1_snapshot.py} | 42 +- ...lume.py => scaleway_instance_v1_volume.py} | 46 ++- ...ot_device.py => scaleway_iot_v1_device.py} | 42 +- ...eway_iot_hub.py => scaleway_iot_v1_hub.py} | 57 +-- ..._network.py => scaleway_iot_v1_network.py} | 47 ++- ..._iot_route.py => scaleway_iot_v1_route.py} | 42 +- ..._cluster.py => scaleway_k8s_v1_cluster.py} | 74 ++-- ...ay_k8s_pool.py => scaleway_k8s_v1_pool.py} | 53 +-- ...aleway_lb_acl.py => scaleway_lb_v1_acl.py} | 62 +-- ...b_backend.py => scaleway_lb_v1_backend.py} | 123 +++--- ...icate.py => scaleway_lb_v1_certificate.py} | 69 ++-- ...frontend.py => scaleway_lb_v1_frontend.py} | 63 +-- .../{scaleway_lb.py => scaleway_lb_v1_lb.py} | 87 ++-- ...ay_lb_route.py => scaleway_lb_v1_route.py} | 49 +-- ...criber.py => scaleway_lb_v1_subscriber.py} | 58 ++- ...py => scaleway_mnq_v1alpha1_credential.py} | 41 +- ....py => scaleway_mnq_v1alpha1_namespace.py} | 46 +-- ....py => scaleway_rdb_v1_database_backup.py} | 47 +-- ...ndpoint.py => scaleway_rdb_v1_endpoint.py} | 41 +- ...nstance.py => scaleway_rdb_v1_instance.py} | 56 ++- ...ica.py => scaleway_rdb_v1_read_replica.py} | 53 +-- ...napshot.py => scaleway_rdb_v1_snapshot.py} | 53 ++- ...luster.py => scaleway_redis_v1_cluster.py} | 57 ++- ...e.py => scaleway_registry_v1_namespace.py} | 53 ++- .../scaleway_secret_v1alpha1_secret.py | 246 +++++++++++ plugins/modules/scaleway_secret_version.py | 389 ------------------ plugins/modules/scaleway_test_v1_human.py | 281 +++++++++++++ ....py => scaleway_vpc_v1_private_network.py} | 36 +- .../scaleway_vpc_v2_private_network.py | 241 +++++++++++ ...leway_secret.py => scaleway_vpc_v2_vpc.py} | 102 ++--- ...pcgw_dhcp.py => scaleway_vpcgw_v1_dhcp.py} | 34 +- ...try.py => scaleway_vpcgw_v1_dhcp_entry.py} | 32 +- ...ateway.py => scaleway_vpcgw_v1_gateway.py} | 56 ++- ...y => scaleway_vpcgw_v1_gateway_network.py} | 50 +-- ...ay_vpcgw_ip.py => scaleway_vpcgw_v1_ip.py} | 33 +- ..._rule.py => scaleway_vpcgw_v1_pat_rule.py} | 32 +- .../scaleway_webhosting_v1alpha1_hosting.py | 247 +++++++++++ 66 files changed, 2998 insertions(+), 1863 deletions(-) rename plugins/modules/{scaleway_account_project.py => scaleway_account_v2_project.py} (83%) rename plugins/modules/{scaleway_applesilicon_server.py => scaleway_applesilicon_v1alpha1_server.py} (76%) rename plugins/modules/{scaleway_baremetal_server.py => scaleway_baremetal_v1_server.py} (84%) create mode 100644 plugins/modules/scaleway_cockpit_v1beta1_token.py rename plugins/modules/{scaleway_container.py => scaleway_container_v1beta1_container.py} (86%) rename plugins/modules/{scaleway_container_cron.py => scaleway_container_v1beta1_cron.py} (77%) rename plugins/modules/{scaleway_container_domain.py => scaleway_container_v1beta1_domain.py} (81%) rename plugins/modules/{scaleway_container_namespace.py => scaleway_container_v1beta1_namespace.py} (82%) rename plugins/modules/{scaleway_container_token.py => scaleway_container_v1beta1_token.py} (83%) create mode 100644 plugins/modules/scaleway_container_v1beta1_trigger.py rename plugins/modules/{scaleway_domain_ssl_certificate.py => scaleway_domain_v2beta1_ssl_certificate.py} (79%) rename plugins/modules/{scaleway_flexibleip_flexible_ip.py => scaleway_flexibleip_v1alpha1_flexible_ip.py} (83%) rename plugins/modules/{scaleway_function_cron.py => scaleway_function_v1beta1_cron.py} (77%) rename plugins/modules/{scaleway_function_domain.py => scaleway_function_v1beta1_domain.py} (81%) rename plugins/modules/{scaleway_function.py => scaleway_function_v1beta1_function.py} (81%) rename plugins/modules/{scaleway_function_namespace.py => scaleway_function_v1beta1_namespace.py} (82%) rename plugins/modules/{scaleway_function_token.py => scaleway_function_v1beta1_token.py} (83%) rename plugins/modules/{scaleway_function_trigger.py => scaleway_function_v1beta1_trigger.py} (78%) rename plugins/modules/{scaleway_iam_api_key.py => scaleway_iam_v1alpha1_api_key.py} (86%) rename plugins/modules/{scaleway_iam_application.py => scaleway_iam_v1alpha1_application.py} (84%) rename plugins/modules/{scaleway_iam_group.py => scaleway_iam_v1alpha1_group.py} (85%) rename plugins/modules/{scaleway_iam_policy.py => scaleway_iam_v1alpha1_policy.py} (83%) rename plugins/modules/{scaleway_iam_ssh_key.py => scaleway_iam_v1alpha1_ssh_key.py} (84%) rename plugins/modules/{scaleway_instance_image.py => scaleway_instance_v1_image.py} (81%) rename plugins/modules/{scaleway_instance_ip.py => scaleway_instance_v1_ip.py} (75%) rename plugins/modules/{scaleway_instance_placement_group.py => scaleway_instance_v1_placement_group.py} (80%) rename plugins/modules/{scaleway_instance_private_nic.py => scaleway_instance_v1_private_nic.py} (79%) rename plugins/modules/{scaleway_instance_security_group.py => scaleway_instance_v1_security_group.py} (83%) rename plugins/modules/{scaleway_instance_security_group_rule.py => scaleway_instance_v1_security_group_rule.py} (83%) rename plugins/modules/{scaleway_instance_snapshot.py => scaleway_instance_v1_snapshot.py} (82%) rename plugins/modules/{scaleway_instance_volume.py => scaleway_instance_v1_volume.py} (81%) rename plugins/modules/{scaleway_iot_device.py => scaleway_iot_v1_device.py} (86%) rename plugins/modules/{scaleway_iot_hub.py => scaleway_iot_v1_hub.py} (84%) rename plugins/modules/{scaleway_iot_network.py => scaleway_iot_v1_network.py} (83%) rename plugins/modules/{scaleway_iot_route.py => scaleway_iot_v1_route.py} (86%) rename plugins/modules/{scaleway_k8s_cluster.py => scaleway_k8s_v1_cluster.py} (86%) rename plugins/modules/{scaleway_k8s_pool.py => scaleway_k8s_v1_pool.py} (88%) rename plugins/modules/{scaleway_lb_acl.py => scaleway_lb_v1_acl.py} (82%) rename plugins/modules/{scaleway_lb_backend.py => scaleway_lb_v1_backend.py} (79%) rename plugins/modules/{scaleway_lb_certificate.py => scaleway_lb_v1_certificate.py} (77%) rename plugins/modules/{scaleway_lb_frontend.py => scaleway_lb_v1_frontend.py} (83%) rename plugins/modules/{scaleway_lb.py => scaleway_lb_v1_lb.py} (79%) rename plugins/modules/{scaleway_lb_route.py => scaleway_lb_v1_route.py} (83%) rename plugins/modules/{scaleway_lb_subscriber.py => scaleway_lb_v1_subscriber.py} (76%) rename plugins/modules/{scaleway_mnq_credential.py => scaleway_mnq_v1alpha1_credential.py} (80%) rename plugins/modules/{scaleway_mnq_namespace.py => scaleway_mnq_v1alpha1_namespace.py} (79%) rename plugins/modules/{scaleway_rdb_database_backup.py => scaleway_rdb_v1_database_backup.py} (81%) rename plugins/modules/{scaleway_rdb_endpoint.py => scaleway_rdb_v1_endpoint.py} (80%) rename plugins/modules/{scaleway_rdb_instance.py => scaleway_rdb_v1_instance.py} (87%) rename plugins/modules/{scaleway_rdb_read_replica.py => scaleway_rdb_v1_read_replica.py} (80%) rename plugins/modules/{scaleway_rdb_snapshot.py => scaleway_rdb_v1_snapshot.py} (81%) rename plugins/modules/{scaleway_redis_cluster.py => scaleway_redis_v1_cluster.py} (84%) rename plugins/modules/{scaleway_registry_namespace.py => scaleway_registry_v1_namespace.py} (82%) create mode 100644 plugins/modules/scaleway_secret_v1alpha1_secret.py delete mode 100644 plugins/modules/scaleway_secret_version.py create mode 100644 plugins/modules/scaleway_test_v1_human.py rename plugins/modules/{scaleway_vpc_private_network.py => scaleway_vpc_v1_private_network.py} (85%) create mode 100644 plugins/modules/scaleway_vpc_v2_private_network.py rename plugins/modules/{scaleway_secret.py => scaleway_vpc_v2_vpc.py} (72%) rename plugins/modules/{scaleway_vpcgw_dhcp.py => scaleway_vpcgw_v1_dhcp.py} (91%) rename plugins/modules/{scaleway_vpcgw_dhcp_entry.py => scaleway_vpcgw_v1_dhcp_entry.py} (85%) rename plugins/modules/{scaleway_vpcgw_gateway.py => scaleway_vpcgw_v1_gateway.py} (84%) rename plugins/modules/{scaleway_vpcgw_gateway_network.py => scaleway_vpcgw_v1_gateway_network.py} (83%) rename plugins/modules/{scaleway_vpcgw_ip.py => scaleway_vpcgw_v1_ip.py} (86%) rename plugins/modules/{scaleway_vpcgw_pat_rule.py => scaleway_vpcgw_v1_pat_rule.py} (87%) create mode 100644 plugins/modules/scaleway_webhosting_v1alpha1_hosting.py diff --git a/plugins/modules/scaleway_account_project.py b/plugins/modules/scaleway_account_v2_project.py similarity index 83% rename from plugins/modules/scaleway_account_project.py rename to plugins/modules/scaleway_account_v2_project.py index 25acd6e..873e5ef 100644 --- a/plugins/modules/scaleway_account_project.py +++ b/plugins/modules/scaleway_account_v2_project.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_account_project -short_description: Manage Scaleway account's project +module: scaleway_account_v2_project +short_description: Manage Scaleway account_v2's project description: - - This module can be used to manage Scaleway account's project. + - This module can be used to manage Scaleway account_v2's project. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,14 +30,14 @@ default: present choices: ["present", "absent"] type: str - project_id: - description: project_id + id: + description: id type: str required: false name: description: name type: str - required: true + required: false organization_id: description: organization_id type: str @@ -50,10 +50,9 @@ EXAMPLES = r""" - name: Create a project - scaleway.scaleway.scaleway_account_project: + scaleway.scaleway.scaleway_account_v2_project: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" - name: "aaaaaa" """ RETURN = r""" @@ -95,9 +94,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = AccountV2API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_project(project_id=id) + resource = api.get_project(project_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -118,13 +117,15 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = AccountV2API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_project(project_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_projects_all(name=name, region=module.params["region"]) + if resource_id is not None: + resource = api.get_project( + ) + elif module.params.get("name", None) is not None: + resources = api.list_projects_all( + name=module.params["name"], + ) if len(resources) == 0: module.exit_json(msg="No project found with name {name}") elif len(resources) > 1: @@ -137,11 +138,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_project(project_id=resource.id, region=module.params["region"]) + api.delete_project( + project_id=resource.id, + ) module.exit_json( changed=True, - msg=f"account's project {resource.name} ({resource.id}) deleted", + msg=f"account_v2's project {resource.name} ({resource.id}) deleted", ) @@ -166,7 +169,7 @@ def main() -> None: project_id=dict(type="str"), name=dict( type="str", - required=True, + required=False, ), organization_id=dict( type="str", diff --git a/plugins/modules/scaleway_applesilicon_server.py b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py similarity index 76% rename from plugins/modules/scaleway_applesilicon_server.py rename to plugins/modules/scaleway_applesilicon_v1alpha1_server.py index 8d4dd3c..3c530c7 100644 --- a/plugins/modules/scaleway_applesilicon_server.py +++ b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_applesilicon_server -short_description: Manage Scaleway applesilicon's server +module: scaleway_applesilicon_v1alpha1_server +short_description: Manage Scaleway applesilicon_v1alpha1's server description: - - This module can be used to manage Scaleway applesilicon's server. + - This module can be used to manage Scaleway applesilicon_v1alpha1's server. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - server_id: - description: server_id + id: + description: id type: str required: false type_: @@ -54,7 +54,7 @@ EXAMPLES = r""" - name: Create a server - scaleway.scaleway.scaleway_applesilicon_server: + scaleway.scaleway.scaleway_applesilicon_v1alpha1_server: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" type_: "aaaaaa" @@ -94,7 +94,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.applesilicon.v1alpha1 import ApplesiliconV1Alpha1API HAS_SCALEWAY_SDK = True @@ -105,9 +105,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ApplesiliconV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_server(server_id=id) + resource = api.get_server(server_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -121,9 +121,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_server(**not_none_params) - resource = api.wait_for_server( - server_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -131,36 +128,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ApplesiliconV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_server(server_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_servers_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No server found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one server found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_server( + server_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_server(server_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_server(server_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_server( + server_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"applesilicon's server {resource.name} ({resource.id}) deleted", + msg=f"applesilicon_v1alpha1's server {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_baremetal_server.py b/plugins/modules/scaleway_baremetal_v1_server.py similarity index 84% rename from plugins/modules/scaleway_baremetal_server.py rename to plugins/modules/scaleway_baremetal_v1_server.py index e5dd2d8..1d070cc 100644 --- a/plugins/modules/scaleway_baremetal_server.py +++ b/plugins/modules/scaleway_baremetal_v1_server.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_baremetal_server -short_description: Manage Scaleway baremetal's server +module: scaleway_baremetal_v1_server +short_description: Manage Scaleway baremetal_v1's server description: - - This module can be used to manage Scaleway baremetal's server. + - This module can be used to manage Scaleway baremetal_v1's server. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - server_id: - description: server_id + id: + description: id type: str required: false offer_id: @@ -76,7 +76,7 @@ EXAMPLES = r""" - name: Create a server - scaleway.scaleway.scaleway_baremetal_server: + scaleway.scaleway.scaleway_baremetal_v1_server: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" offer_id: "aaaaaa" @@ -135,7 +135,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.baremetal.v1 import BaremetalV1API HAS_SCALEWAY_SDK = True @@ -146,9 +146,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = BaremetalV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_server(server_id=id) + resource = api.get_server(server_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -162,9 +162,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_server(**not_none_params) - resource = api.wait_for_server( - server_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -172,13 +169,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = BaremetalV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_server(server_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_servers_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_server( + server_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_servers_all( + name=module.params["name"], + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No server found with name {name}") elif len(resources) > 1: @@ -191,17 +193,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_server(server_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_server(server_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_server( + server_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"baremetal's server {resource.name} ({resource.id}) deleted", + msg=f"baremetal_v1's server {resource.name} ({resource.id}) deleted", ) @@ -251,7 +250,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), install=dict( type="dict", @@ -260,7 +258,6 @@ def main() -> None: option_ids=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_cockpit_v1beta1_token.py b/plugins/modules/scaleway_cockpit_v1beta1_token.py new file mode 100644 index 0000000..1a31f8d --- /dev/null +++ b/plugins/modules/scaleway_cockpit_v1beta1_token.py @@ -0,0 +1,191 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_cockpit_v1beta1_token +short_description: Manage Scaleway cockpit_v1beta1's token +description: + - This module can be used to manage Scaleway cockpit_v1beta1's token. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + project_id: + description: project_id + type: str + required: false + name: + description: name + type: str + required: false + scopes: + description: scopes + type: dict + required: false +""" + +EXAMPLES = r""" +- name: Create a token + scaleway.scaleway.scaleway_cockpit_v1beta1_token: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" +""" + +RETURN = r""" +--- +token: + description: The token information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + project_id: 00000000-0000-0000-0000-000000000000 + name: "aaaaaa" + created_at: "aaaaaa" + updated_at: "aaaaaa" + scopes: + aaaaaa: bbbbbb + cccccc: dddddd + secret_key: "aaaaaa" +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.cockpit.v1beta1 import CockpitV1Beta1API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = CockpitV1Beta1API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_token(token_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_token(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = CockpitV1Beta1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_token( + token_id=resource_id, + ) + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_token( + token_id=resource.id, + ) + + module.exit_json( + changed=True, + msg=f"cockpit_v1beta1's token {resource.name} ({resource.id}) deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + token_id=dict(type="str"), + project_id=dict( + type="str", + required=False, + ), + name=dict( + type="str", + required=False, + ), + scopes=dict( + type="dict", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + required_one_of=(["token_id", "name"],), + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() diff --git a/plugins/modules/scaleway_container.py b/plugins/modules/scaleway_container_v1beta1_container.py similarity index 86% rename from plugins/modules/scaleway_container.py rename to plugins/modules/scaleway_container_v1beta1_container.py index 7037082..a5ab303 100644 --- a/plugins/modules/scaleway_container.py +++ b/plugins/modules/scaleway_container_v1beta1_container.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_container -short_description: Manage Scaleway container's container +module: scaleway_container_v1beta1_container +short_description: Manage Scaleway container_v1beta1's container description: - - This module can be used to manage Scaleway container's container. + - This module can be used to manage Scaleway container_v1beta1's container. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,14 +30,18 @@ default: present choices: ["present", "absent"] type: str - container_id: - description: container_id + id: + description: id type: str required: false namespace_id: description: namespace_id type: str required: true + name: + description: name + type: str + required: true privacy: description: privacy type: str @@ -70,10 +74,6 @@ - fr-par - nl-ams - pl-waw - name: - description: name - type: str - required: false environment_variables: description: environment_variables type: dict @@ -90,6 +90,10 @@ description: memory_limit type: int required: false + cpu_limit: + description: cpu_limit + type: int + required: false timeout: description: timeout type: str @@ -119,10 +123,11 @@ EXAMPLES = r""" - name: Create a container - scaleway.scaleway.scaleway_container: + scaleway.scaleway.scaleway_container_v1beta1_container: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" namespace_id: "aaaaaa" + name: "aaaaaa" privacy: "aaaaaa" protocol: "aaaaaa" http_option: "aaaaaa" @@ -175,7 +180,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.container.v1beta1 import ContainerV1Beta1API HAS_SCALEWAY_SDK = True @@ -186,9 +191,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_container(container_id=id) + resource = api.get_container(container_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -202,9 +207,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_container(**not_none_params) - resource = api.wait_for_container( - container_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -212,13 +214,19 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_container(container_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_containers_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_container( + container_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_containers_all( + name=module.params["name"], + namespace_id=module.params.get("namespace_id", None), + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No container found with name {name}") elif len(resources) > 1: @@ -231,17 +239,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_container(container_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_container(container_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_container( + container_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"container's container {resource.name} ({resource.id}) deleted", + msg=f"container_v1beta1's container {resource.name} ({resource.id}) deleted", ) @@ -268,6 +273,10 @@ def main() -> None: type="str", required=True, ), + name=dict( + type="str", + required=True, + ), privacy=dict( type="str", required=True, @@ -288,10 +297,6 @@ def main() -> None: required=False, choices=["fr-par", "nl-ams", "pl-waw"], ), - name=dict( - type="str", - required=False, - ), environment_variables=dict( type="dict", required=False, @@ -308,6 +313,10 @@ def main() -> None: type="int", required=False, ), + cpu_limit=dict( + type="int", + required=False, + ), timeout=dict( type="str", required=False, @@ -331,7 +340,6 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, - elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_container_cron.py b/plugins/modules/scaleway_container_v1beta1_cron.py similarity index 77% rename from plugins/modules/scaleway_container_cron.py rename to plugins/modules/scaleway_container_v1beta1_cron.py index cc237af..e0e8b2d 100644 --- a/plugins/modules/scaleway_container_cron.py +++ b/plugins/modules/scaleway_container_v1beta1_cron.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_container_cron -short_description: Manage Scaleway container's cron +module: scaleway_container_v1beta1_cron +short_description: Manage Scaleway container_v1beta1's cron description: - - This module can be used to manage Scaleway container's cron. + - This module can be used to manage Scaleway container_v1beta1's cron. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - cron_id: - description: cron_id + id: + description: id type: str required: false container_id: @@ -62,7 +62,7 @@ EXAMPLES = r""" - name: Create a cron - scaleway.scaleway.scaleway_container_cron: + scaleway.scaleway.scaleway_container_v1beta1_cron: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" container_id: "aaaaaa" @@ -99,7 +99,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.container.v1beta1 import ContainerV1Beta1API HAS_SCALEWAY_SDK = True @@ -110,9 +110,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_cron(cron_id=id) + resource = api.get_cron(cron_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -126,7 +126,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_cron(**not_none_params) - resource = api.wait_for_cron(cron_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) @@ -134,36 +133,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_cron(cron_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_crons_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No cron found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one cron found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_cron( + cron_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_cron(cron_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_cron(cron_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_cron( + cron_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"container's cron {resource.name} ({resource.id}) deleted", + msg=f"container_v1beta1's cron {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_container_domain.py b/plugins/modules/scaleway_container_v1beta1_domain.py similarity index 81% rename from plugins/modules/scaleway_container_domain.py rename to plugins/modules/scaleway_container_v1beta1_domain.py index f7213a0..c601071 100644 --- a/plugins/modules/scaleway_container_domain.py +++ b/plugins/modules/scaleway_container_v1beta1_domain.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_container_domain -short_description: Manage Scaleway container's domain +module: scaleway_container_v1beta1_domain +short_description: Manage Scaleway container_v1beta1's domain description: - - This module can be used to manage Scaleway container's domain. + - This module can be used to manage Scaleway container_v1beta1's domain. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - domain_id: - description: domain_id + id: + description: id type: str required: false hostname: @@ -54,7 +54,7 @@ EXAMPLES = r""" - name: Create a domain - scaleway.scaleway.scaleway_container_domain: + scaleway.scaleway.scaleway_container_v1beta1_domain: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" hostname: "aaaaaa" @@ -89,7 +89,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.container.v1beta1 import ContainerV1Beta1API HAS_SCALEWAY_SDK = True @@ -100,9 +100,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_domain(domain_id=id) + resource = api.get_domain(domain_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -116,9 +116,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_domain(**not_none_params) - resource = api.wait_for_domain( - domain_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -126,27 +123,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_domain(domain_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_domain( + domain_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_domain(domain_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_domain(domain_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_domain( + domain_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"container's domain {resource.id} deleted", + msg=f"container_v1beta1's domain {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_container_namespace.py b/plugins/modules/scaleway_container_v1beta1_namespace.py similarity index 82% rename from plugins/modules/scaleway_container_namespace.py rename to plugins/modules/scaleway_container_v1beta1_namespace.py index 8ae17c2..0931f10 100644 --- a/plugins/modules/scaleway_container_namespace.py +++ b/plugins/modules/scaleway_container_v1beta1_namespace.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_container_namespace -short_description: Manage Scaleway container's namespace +module: scaleway_container_v1beta1_namespace +short_description: Manage Scaleway container_v1beta1's namespace description: - - This module can be used to manage Scaleway container's namespace. + - This module can be used to manage Scaleway container_v1beta1's namespace. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - namespace_id: - description: namespace_id + id: + description: id type: str required: false region: @@ -67,7 +67,7 @@ EXAMPLES = r""" - name: Create a namespace - scaleway.scaleway.scaleway_container_namespace: + scaleway.scaleway.scaleway_container_v1beta1_namespace: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -110,7 +110,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.container.v1beta1 import ContainerV1Beta1API HAS_SCALEWAY_SDK = True @@ -121,9 +121,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_namespace(namespace_id=id) + resource = api.get_namespace(namespace_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -137,9 +137,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_namespace(**not_none_params) - resource = api.wait_for_namespace( - namespace_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -147,13 +144,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_namespace(namespace_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_namespaces_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_namespace( + namespace_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_namespaces_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No namespace found with name {name}") elif len(resources) > 1: @@ -166,17 +168,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_namespace(namespace_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_namespace(namespace_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_namespace( + namespace_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"container's namespace {resource.name} ({resource.id}) deleted", + msg=f"container_v1beta1's namespace {resource.name} ({resource.id}) deleted", ) @@ -223,7 +222,6 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, - elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_container_token.py b/plugins/modules/scaleway_container_v1beta1_token.py similarity index 83% rename from plugins/modules/scaleway_container_token.py rename to plugins/modules/scaleway_container_v1beta1_token.py index 0a95200..2eba61d 100644 --- a/plugins/modules/scaleway_container_token.py +++ b/plugins/modules/scaleway_container_v1beta1_token.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_container_token -short_description: Manage Scaleway container's token +module: scaleway_container_v1beta1_token +short_description: Manage Scaleway container_v1beta1's token description: - - This module can be used to manage Scaleway container's token. + - This module can be used to manage Scaleway container_v1beta1's token. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - token_id: - description: token_id + id: + description: id type: str required: false region: @@ -62,7 +62,7 @@ EXAMPLES = r""" - name: Create a token - scaleway.scaleway.scaleway_container_token: + scaleway.scaleway.scaleway_container_v1beta1_token: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -97,7 +97,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.container.v1beta1 import ContainerV1Beta1API HAS_SCALEWAY_SDK = True @@ -108,9 +108,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_token(token_id=id) + resource = api.get_token(token_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -124,7 +124,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_token(**not_none_params) - resource = api.wait_for_token(token_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) @@ -132,27 +131,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_token(token_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_token( + token_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_token(token_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_token(token_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_token( + token_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"container's token {resource.id} deleted", + msg=f"container_v1beta1's token {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_container_v1beta1_trigger.py b/plugins/modules/scaleway_container_v1beta1_trigger.py new file mode 100644 index 0000000..f632afb --- /dev/null +++ b/plugins/modules/scaleway_container_v1beta1_trigger.py @@ -0,0 +1,239 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_container_v1beta1_trigger +short_description: Manage Scaleway container_v1beta1's trigger +description: + - This module can be used to manage Scaleway container_v1beta1's trigger. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + name: + description: name + type: str + required: true + container_id: + description: container_id + type: str + required: true + region: + description: region + type: str + required: false + choices: + - fr-par + - nl-ams + - pl-waw + description: + description: description + type: str + required: false + scw_sqs_config: + description: scw_sqs_config + type: dict + required: false + sqs_config: + description: sqs_config + type: dict + required: false + scw_nats_config: + description: scw_nats_config + type: dict + required: false +""" + +EXAMPLES = r""" +- name: Create a trigger + scaleway.scaleway.scaleway_container_v1beta1_trigger: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" + name: "aaaaaa" + container_id: "aaaaaa" +""" + +RETURN = r""" +--- +trigger: + description: The trigger information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + name: "aaaaaa" + description: "aaaaaa" + input_type: sqs + status: ready + error_message: "aaaaaa" + container_id: 00000000-0000-0000-0000-000000000000 + scw_sqs_config: + aaaaaa: bbbbbb + cccccc: dddddd + sqs_config: + aaaaaa: bbbbbb + cccccc: dddddd + scw_nats_config: + aaaaaa: bbbbbb + cccccc: dddddd +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.container.v1beta1 import ContainerV1Beta1API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = ContainerV1Beta1API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_trigger(trigger_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_trigger(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = ContainerV1Beta1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_trigger( + trigger_id=resource_id, + region=module.params["region"], + ) + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_trigger( + trigger_id=resource.id, + region=resource.region, + ) + + module.exit_json( + changed=True, + msg=f"container_v1beta1's trigger {resource.name} ({resource.id}) deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + trigger_id=dict(type="str"), + name=dict( + type="str", + required=True, + ), + container_id=dict( + type="str", + required=True, + ), + region=dict( + type="str", + required=False, + choices=["fr-par", "nl-ams", "pl-waw"], + ), + description=dict( + type="str", + required=False, + ), + scw_sqs_config=dict( + type="dict", + required=False, + ), + sqs_config=dict( + type="dict", + required=False, + ), + scw_nats_config=dict( + type="dict", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + required_one_of=(["trigger_id", "name"],), + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() diff --git a/plugins/modules/scaleway_domain_ssl_certificate.py b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py similarity index 79% rename from plugins/modules/scaleway_domain_ssl_certificate.py rename to plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py index 1d67749..ede0dba 100644 --- a/plugins/modules/scaleway_domain_ssl_certificate.py +++ b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_domain_ssl_certificate -short_description: Manage Scaleway domain's ssl_certificate +module: scaleway_domain_v2beta1_ssl_certificate +short_description: Manage Scaleway domain_v2beta1's ssl_certificate description: - - This module can be used to manage Scaleway domain's ssl_certificate. + - This module can be used to manage Scaleway domain_v2beta1's ssl_certificate. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -43,7 +43,7 @@ EXAMPLES = r""" - name: Create a ssl_certificate - scaleway.scaleway.scaleway_domain_ssl_certificate: + scaleway.scaleway.scaleway_domain_v2beta1_ssl_certificate: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" dns_zone: "aaaaaa" @@ -80,7 +80,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.domain.v2beta1 import DomainV2Beta1API HAS_SCALEWAY_SDK = True @@ -91,9 +91,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = DomainV2Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_ssl_certificate(dns_zone=id) + resource = api.get_ssl_certificate(dns_zone=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -107,9 +107,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_ssl_certificate(**not_none_params) - resource = api.wait_for_ssl_certificate( - dns_zone=resource.dns_zone, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -117,11 +114,11 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = DomainV2Beta1API(client) - dns_zone = module.params.pop("dns_zone", None) + resource_id = module.params.pop("dns_zone", None) - if dns_zone is not None: + if resource_id is not None: resource = api.get_ssl_certificate( - dns_zone=dns_zone, region=module.params["region"] + dns_zone=resource_id, ) else: module.fail_json(msg="dns_zone is required") @@ -130,20 +127,12 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_ssl_certificate( - dns_zone=resource.dns_zone, region=module.params["region"] + dns_zone=resource.id, ) - try: - api.wait_for_ssl_certificate( - dns_zone=resource.dns_zone, region=module.params["region"] - ) - except ScalewayException as e: - if e.status_code != 404: - raise e - module.exit_json( changed=True, - msg=f"domain's ssl_certificate {resource.dns_zone} deleted", + msg=f"domain_v2beta1's ssl_certificate {resource.dns_zone} deleted", ) @@ -165,6 +154,7 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), + dns_zone=dict(type="str"), dns_zone=dict( type="str", required=True, @@ -172,7 +162,6 @@ def main() -> None: alternative_dns_zones=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_flexibleip_flexible_ip.py b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py similarity index 83% rename from plugins/modules/scaleway_flexibleip_flexible_ip.py rename to plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py index 71edf0c..1bada57 100644 --- a/plugins/modules/scaleway_flexibleip_flexible_ip.py +++ b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_flexibleip_flexible_ip -short_description: Manage Scaleway flexibleip's flexible_ip +module: scaleway_flexibleip_v1alpha1_flexible_ip +short_description: Manage Scaleway flexibleip_v1alpha1's flexible_ip description: - - This module can be used to manage Scaleway flexibleip's flexible_ip. + - This module can be used to manage Scaleway flexibleip_v1alpha1's flexible_ip. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - fip_id: - description: fip_id + id: + description: id type: str required: false description: @@ -67,7 +67,7 @@ EXAMPLES = r""" - name: Create a flexible_ip - scaleway.scaleway.scaleway_flexibleip_flexible_ip: + scaleway.scaleway.scaleway_flexibleip_v1alpha1_flexible_ip: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -113,7 +113,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.flexibleip.v1alpha1 import FlexibleipV1Alpha1API HAS_SCALEWAY_SDK = True @@ -124,9 +124,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FlexibleipV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_flexible_ip(fip_id=id) + resource = api.get_flexible_ip(fip_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -140,9 +140,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_flexible_ip(**not_none_params) - resource = api.wait_for_flexible_ip( - fip_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -150,27 +147,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FlexibleipV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_flexible_ip(fip_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_flexible_ip( + fip_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_flexible_ip(fip_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_flexible_ip(fip_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_flexible_ip( + fip_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"flexibleip's flexible_ip {resource.id} deleted", + msg=f"flexibleip_v1alpha1's flexible_ip {resource.id} deleted", ) @@ -212,7 +209,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), server_id=dict( type="str", diff --git a/plugins/modules/scaleway_function_cron.py b/plugins/modules/scaleway_function_v1beta1_cron.py similarity index 77% rename from plugins/modules/scaleway_function_cron.py rename to plugins/modules/scaleway_function_v1beta1_cron.py index c293368..8d5a25b 100644 --- a/plugins/modules/scaleway_function_cron.py +++ b/plugins/modules/scaleway_function_v1beta1_cron.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function_cron -short_description: Manage Scaleway function's cron +module: scaleway_function_v1beta1_cron +short_description: Manage Scaleway function_v1beta1's cron description: - - This module can be used to manage Scaleway function's cron. + - This module can be used to manage Scaleway function_v1beta1's cron. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - cron_id: - description: cron_id + id: + description: id type: str required: false function_id: @@ -62,7 +62,7 @@ EXAMPLES = r""" - name: Create a cron - scaleway.scaleway.scaleway_function_cron: + scaleway.scaleway.scaleway_function_v1beta1_cron: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" function_id: "aaaaaa" @@ -99,7 +99,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -110,9 +110,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_cron(cron_id=id) + resource = api.get_cron(cron_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -126,7 +126,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_cron(**not_none_params) - resource = api.wait_for_cron(cron_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) @@ -134,36 +133,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_cron(cron_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_crons_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No cron found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one cron found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_cron( + cron_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_cron(cron_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_cron(cron_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_cron( + cron_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's cron {resource.name} ({resource.id}) deleted", + msg=f"function_v1beta1's cron {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_function_domain.py b/plugins/modules/scaleway_function_v1beta1_domain.py similarity index 81% rename from plugins/modules/scaleway_function_domain.py rename to plugins/modules/scaleway_function_v1beta1_domain.py index a3a7fa9..642c963 100644 --- a/plugins/modules/scaleway_function_domain.py +++ b/plugins/modules/scaleway_function_v1beta1_domain.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function_domain -short_description: Manage Scaleway function's domain +module: scaleway_function_v1beta1_domain +short_description: Manage Scaleway function_v1beta1's domain description: - - This module can be used to manage Scaleway function's domain. + - This module can be used to manage Scaleway function_v1beta1's domain. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - domain_id: - description: domain_id + id: + description: id type: str required: false hostname: @@ -54,7 +54,7 @@ EXAMPLES = r""" - name: Create a domain - scaleway.scaleway.scaleway_function_domain: + scaleway.scaleway.scaleway_function_v1beta1_domain: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" hostname: "aaaaaa" @@ -89,7 +89,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -100,9 +100,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_domain(domain_id=id) + resource = api.get_domain(domain_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -116,9 +116,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_domain(**not_none_params) - resource = api.wait_for_domain( - domain_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -126,27 +123,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_domain(domain_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_domain( + domain_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_domain(domain_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_domain(domain_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_domain( + domain_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's domain {resource.id} deleted", + msg=f"function_v1beta1's domain {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_function.py b/plugins/modules/scaleway_function_v1beta1_function.py similarity index 81% rename from plugins/modules/scaleway_function.py rename to plugins/modules/scaleway_function_v1beta1_function.py index 179a3ab..8087e5b 100644 --- a/plugins/modules/scaleway_function.py +++ b/plugins/modules/scaleway_function_v1beta1_function.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function -short_description: Manage Scaleway function's function +module: scaleway_function_v1beta1_function +short_description: Manage Scaleway function_v1beta1's function description: - - This module can be used to manage Scaleway function's function. + - This module can be used to manage Scaleway function_v1beta1's function. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - function_id: - description: function_id + id: + description: id type: str required: false namespace_id: @@ -66,6 +66,7 @@ - php82 - node19 - go120 + - node20 privacy: description: privacy type: str @@ -131,7 +132,7 @@ EXAMPLES = r""" - name: Create a function - scaleway.scaleway.scaleway_function: + scaleway.scaleway.scaleway_function_v1beta1_function: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" namespace_id: "aaaaaa" @@ -162,6 +163,7 @@ timeout: "aaaaaa" handler: "aaaaaa" error_message: "aaaaaa" + build_message: "aaaaaa" privacy: public description: "aaaaaa" domain_name: "aaaaaa" @@ -186,7 +188,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -197,9 +199,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_function(function_id=id) + resource = api.get_function(function_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -213,9 +215,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_function(**not_none_params) - resource = api.wait_for_function( - function_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -223,13 +222,19 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_function(function_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_functions_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_function( + function_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_functions_all( + name=module.params["name"], + namespace_id=module.params.get("namespace_id", None), + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No function found with name {name}") elif len(resources) > 1: @@ -242,17 +247,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_function(function_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_function(function_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_function( + function_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's function {resource.name} ({resource.id}) deleted", + msg=f"function_v1beta1's function {resource.name} ({resource.id}) deleted", ) @@ -282,31 +284,7 @@ def main() -> None: runtime=dict( type="str", required=True, - choices=[ - "unknown_runtime", - "golang", - "python", - "python3", - "node8", - "node10", - "node14", - "node16", - "node17", - "python37", - "python38", - "python39", - "python310", - "go113", - "go117", - "go118", - "node18", - "rust165", - "go119", - "python311", - "php82", - "node19", - "go120", - ], + choices=["unknown_runtime", "golang", "python", "python3", "node8", "node10", "node14", "node16", "node17", "python37", "python38", "python39", "python310", "go113", "go117", "go118", "node18", "rust165", "go119", "python311", "php82", "node19", "go120", "node20"], ), privacy=dict( type="str", @@ -358,7 +336,6 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, - elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_function_namespace.py b/plugins/modules/scaleway_function_v1beta1_namespace.py similarity index 82% rename from plugins/modules/scaleway_function_namespace.py rename to plugins/modules/scaleway_function_v1beta1_namespace.py index 2649458..f147db2 100644 --- a/plugins/modules/scaleway_function_namespace.py +++ b/plugins/modules/scaleway_function_v1beta1_namespace.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function_namespace -short_description: Manage Scaleway function's namespace +module: scaleway_function_v1beta1_namespace +short_description: Manage Scaleway function_v1beta1's namespace description: - - This module can be used to manage Scaleway function's namespace. + - This module can be used to manage Scaleway function_v1beta1's namespace. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - namespace_id: - description: namespace_id + id: + description: id type: str required: false region: @@ -67,7 +67,7 @@ EXAMPLES = r""" - name: Create a namespace - scaleway.scaleway.scaleway_function_namespace: + scaleway.scaleway.scaleway_function_v1beta1_namespace: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -110,7 +110,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -121,9 +121,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_namespace(namespace_id=id) + resource = api.get_namespace(namespace_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -137,9 +137,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_namespace(**not_none_params) - resource = api.wait_for_namespace( - namespace_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -147,13 +144,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_namespace(namespace_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_namespaces_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_namespace( + namespace_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_namespaces_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No namespace found with name {name}") elif len(resources) > 1: @@ -166,17 +168,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_namespace(namespace_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_namespace(namespace_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_namespace( + namespace_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's namespace {resource.name} ({resource.id}) deleted", + msg=f"function_v1beta1's namespace {resource.name} ({resource.id}) deleted", ) @@ -223,7 +222,6 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, - elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_function_token.py b/plugins/modules/scaleway_function_v1beta1_token.py similarity index 83% rename from plugins/modules/scaleway_function_token.py rename to plugins/modules/scaleway_function_v1beta1_token.py index 06d50aa..ad46d0f 100644 --- a/plugins/modules/scaleway_function_token.py +++ b/plugins/modules/scaleway_function_v1beta1_token.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function_token -short_description: Manage Scaleway function's token +module: scaleway_function_v1beta1_token +short_description: Manage Scaleway function_v1beta1's token description: - - This module can be used to manage Scaleway function's token. + - This module can be used to manage Scaleway function_v1beta1's token. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - token_id: - description: token_id + id: + description: id type: str required: false region: @@ -62,7 +62,7 @@ EXAMPLES = r""" - name: Create a token - scaleway.scaleway.scaleway_function_token: + scaleway.scaleway.scaleway_function_v1beta1_token: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -97,7 +97,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -108,9 +108,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_token(token_id=id) + resource = api.get_token(token_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -124,7 +124,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_token(**not_none_params) - resource = api.wait_for_token(token_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) @@ -132,27 +131,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_token(token_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_token( + token_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_token(token_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_token(token_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_token( + token_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's token {resource.id} deleted", + msg=f"function_v1beta1's token {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_function_trigger.py b/plugins/modules/scaleway_function_v1beta1_trigger.py similarity index 78% rename from plugins/modules/scaleway_function_trigger.py rename to plugins/modules/scaleway_function_v1beta1_trigger.py index c8dde12..ae73b45 100644 --- a/plugins/modules/scaleway_function_trigger.py +++ b/plugins/modules/scaleway_function_v1beta1_trigger.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_function_trigger -short_description: Manage Scaleway function's trigger +module: scaleway_function_v1beta1_trigger +short_description: Manage Scaleway function_v1beta1's trigger description: - - This module can be used to manage Scaleway function's trigger. + - This module can be used to manage Scaleway function_v1beta1's trigger. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,18 +30,14 @@ default: present choices: ["present", "absent"] type: str - trigger_id: - description: trigger_id + id: + description: id type: str required: false name: description: name type: str required: true - description: - description: description - type: str - required: true function_id: description: function_id type: str @@ -54,6 +50,10 @@ - fr-par - nl-ams - pl-waw + description: + description: description + type: str + required: false scw_sqs_config: description: scw_sqs_config type: dict @@ -70,11 +70,10 @@ EXAMPLES = r""" - name: Create a trigger - scaleway.scaleway.scaleway_function_trigger: + scaleway.scaleway.scaleway_function_v1beta1_trigger: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" name: "aaaaaa" - description: "aaaaaa" function_id: "aaaaaa" """ @@ -116,7 +115,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.function.v1beta1 import FunctionV1Beta1API HAS_SCALEWAY_SDK = True @@ -127,9 +126,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_trigger(trigger_id=id) + resource = api.get_trigger(trigger_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -143,9 +142,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_trigger(**not_none_params) - resource = api.wait_for_trigger( - trigger_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -153,36 +149,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_trigger(trigger_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_triggers_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No trigger found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one trigger found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_trigger( + trigger_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_trigger(trigger_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_trigger(trigger_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_trigger( + trigger_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"function's trigger {resource.name} ({resource.id}) deleted", + msg=f"function_v1beta1's trigger {resource.name} ({resource.id}) deleted", ) @@ -209,10 +196,6 @@ def main() -> None: type="str", required=True, ), - description=dict( - type="str", - required=True, - ), function_id=dict( type="str", required=True, @@ -222,6 +205,10 @@ def main() -> None: required=False, choices=["fr-par", "nl-ams", "pl-waw"], ), + description=dict( + type="str", + required=False, + ), scw_sqs_config=dict( type="dict", required=False, diff --git a/plugins/modules/scaleway_iam_api_key.py b/plugins/modules/scaleway_iam_v1alpha1_api_key.py similarity index 86% rename from plugins/modules/scaleway_iam_api_key.py rename to plugins/modules/scaleway_iam_v1alpha1_api_key.py index 9f9999b..6ce8ee9 100644 --- a/plugins/modules/scaleway_iam_api_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_api_key.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iam_api_key -short_description: Manage Scaleway iam's api_key +module: scaleway_iam_v1alpha1_api_key +short_description: Manage Scaleway iam_v1alpha1's api_key description: - - This module can be used to manage Scaleway iam's api_key. + - This module can be used to manage Scaleway iam_v1alpha1's api_key. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,10 +30,6 @@ default: present choices: ["present", "absent"] type: str - access_key: - description: access_key - type: str - required: false description: description: description type: str @@ -58,7 +54,7 @@ EXAMPLES = r""" - name: Create a api_key - scaleway.scaleway.scaleway_iam_api_key: + scaleway.scaleway.scaleway_iam_v1alpha1_api_key: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -108,9 +104,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_api_key(access_key=id) + resource = api.get_api_key(access_key=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -131,23 +127,25 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - access_key = module.params.pop("access_key", None) + resource_id = module.params.pop("application_id", None) - if access_key is not None: + if resource_id is not None: resource = api.get_api_key( - access_key=access_key, region=module.params["region"] + access_key=resource_id, ) else: - module.fail_json(msg="access_key is required") + module.fail_json(msg="application_id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_api_key(access_key=resource.access_key, region=module.params["region"]) + api.delete_api_key( + access_key=resource.id, + ) module.exit_json( changed=True, - msg=f"iam's api_key {resource.access_key} deleted", + msg=f"iam_v1alpha1's api_key {resource.application_id} deleted", ) diff --git a/plugins/modules/scaleway_iam_application.py b/plugins/modules/scaleway_iam_v1alpha1_application.py similarity index 84% rename from plugins/modules/scaleway_iam_application.py rename to plugins/modules/scaleway_iam_v1alpha1_application.py index 3faa541..2505cdf 100644 --- a/plugins/modules/scaleway_iam_application.py +++ b/plugins/modules/scaleway_iam_v1alpha1_application.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iam_application -short_description: Manage Scaleway iam's application +module: scaleway_iam_v1alpha1_application +short_description: Manage Scaleway iam_v1alpha1's application description: - - This module can be used to manage Scaleway iam's application. + - This module can be used to manage Scaleway iam_v1alpha1's application. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - application_id: - description: application_id + id: + description: id type: str required: false description: @@ -50,7 +50,7 @@ EXAMPLES = r""" - name: Create a application - scaleway.scaleway.scaleway_iam_application: + scaleway.scaleway.scaleway_iam_v1alpha1_application: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -97,9 +97,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_application(application_id=id) + resource = api.get_application(application_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -120,15 +120,16 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_application( - application_id=id, region=module.params["region"] + application_id=resource_id, + ) + elif module.params.get("name", None) is not None: + resources = api.list_applications_all( + name=module.params["name"], ) - elif name is not None: - resources = api.list_applications_all(name=name, region=module.params["region"]) if len(resources) == 0: module.exit_json(msg="No application found with name {name}") elif len(resources) > 1: @@ -141,11 +142,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_application(application_id=resource.id, region=module.params["region"]) + api.delete_application( + application_id=resource.id, + ) module.exit_json( changed=True, - msg=f"iam's application {resource.name} ({resource.id}) deleted", + msg=f"iam_v1alpha1's application {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_iam_group.py b/plugins/modules/scaleway_iam_v1alpha1_group.py similarity index 85% rename from plugins/modules/scaleway_iam_group.py rename to plugins/modules/scaleway_iam_v1alpha1_group.py index a286b7f..2777431 100644 --- a/plugins/modules/scaleway_iam_group.py +++ b/plugins/modules/scaleway_iam_v1alpha1_group.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iam_group -short_description: Manage Scaleway iam's group +module: scaleway_iam_v1alpha1_group +short_description: Manage Scaleway iam_v1alpha1's group description: - - This module can be used to manage Scaleway iam's group. + - This module can be used to manage Scaleway iam_v1alpha1's group. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - group_id: - description: group_id + id: + description: id type: str required: false description: @@ -50,7 +50,7 @@ EXAMPLES = r""" - name: Create a group - scaleway.scaleway.scaleway_iam_group: + scaleway.scaleway.scaleway_iam_v1alpha1_group: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -97,9 +97,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_group(group_id=id) + resource = api.get_group(group_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -120,13 +120,16 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_group(group_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_groups_all(name=name, region=module.params["region"]) + if resource_id is not None: + resource = api.get_group( + group_id=resource_id, + ) + elif module.params.get("name", None) is not None: + resources = api.list_groups_all( + name=module.params["name"], + ) if len(resources) == 0: module.exit_json(msg="No group found with name {name}") elif len(resources) > 1: @@ -139,11 +142,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_group(group_id=resource.id, region=module.params["region"]) + api.delete_group( + group_id=resource.id, + ) module.exit_json( changed=True, - msg=f"iam's group {resource.name} ({resource.id}) deleted", + msg=f"iam_v1alpha1's group {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_iam_policy.py b/plugins/modules/scaleway_iam_v1alpha1_policy.py similarity index 83% rename from plugins/modules/scaleway_iam_policy.py rename to plugins/modules/scaleway_iam_v1alpha1_policy.py index d9609f6..5ff3b1a 100644 --- a/plugins/modules/scaleway_iam_policy.py +++ b/plugins/modules/scaleway_iam_v1alpha1_policy.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iam_policy -short_description: Manage Scaleway iam's policy +module: scaleway_iam_v1alpha1_policy +short_description: Manage Scaleway iam_v1alpha1's policy description: - - This module can be used to manage Scaleway iam's policy. + - This module can be used to manage Scaleway iam_v1alpha1's policy. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - policy_id: - description: policy_id + id: + description: id type: str required: false description: @@ -71,7 +71,7 @@ EXAMPLES = r""" - name: Create a policy - scaleway.scaleway.scaleway_iam_policy: + scaleway.scaleway.scaleway_iam_v1alpha1_policy: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -124,9 +124,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_policy(policy_id=id) + resource = api.get_policy(policy_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -147,30 +147,25 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_policy(policy_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_policys_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No policy found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one policy found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_policy( + policy_id=resource_id, + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_policy(policy_id=resource.id, region=module.params["region"]) + api.delete_policy( + policy_id=resource.id, + ) module.exit_json( changed=True, - msg=f"iam's policy {resource.name} ({resource.id}) deleted", + msg=f"iam_v1alpha1's policy {resource.name} ({resource.id}) deleted", ) @@ -208,7 +203,6 @@ def main() -> None: rules=dict( type="list", required=False, - elements="str", ), user_id=dict( type="str", diff --git a/plugins/modules/scaleway_iam_ssh_key.py b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py similarity index 84% rename from plugins/modules/scaleway_iam_ssh_key.py rename to plugins/modules/scaleway_iam_v1alpha1_ssh_key.py index e3d6e54..0049945 100644 --- a/plugins/modules/scaleway_iam_ssh_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iam_ssh_key -short_description: Manage Scaleway iam's ssh_key +module: scaleway_iam_v1alpha1_ssh_key +short_description: Manage Scaleway iam_v1alpha1's ssh_key description: - - This module can be used to manage Scaleway iam's ssh_key. + - This module can be used to manage Scaleway iam_v1alpha1's ssh_key. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - ssh_key_id: - description: ssh_key_id + id: + description: id type: str required: false public_key: @@ -50,7 +50,7 @@ EXAMPLES = r""" - name: Create a ssh_key - scaleway.scaleway.scaleway_iam_ssh_key: + scaleway.scaleway.scaleway_iam_v1alpha1_ssh_key: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" public_key: "aaaaaa" @@ -98,9 +98,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_ssh_key(ssh_key_id=id) + resource = api.get_ssh_key(ssh_key_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -121,13 +121,16 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_ssh_key(ssh_key_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_ssh_keys_all(name=name, region=module.params["region"]) + if resource_id is not None: + resource = api.get_ssh_key( + ssh_key_id=resource_id, + ) + elif module.params.get("name", None) is not None: + resources = api.list_ssh_keys_all( + name=module.params["name"], + ) if len(resources) == 0: module.exit_json(msg="No ssh_key found with name {name}") elif len(resources) > 1: @@ -140,11 +143,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_ssh_key(ssh_key_id=resource.id, region=module.params["region"]) + api.delete_ssh_key( + ssh_key_id=resource.id, + ) module.exit_json( changed=True, - msg=f"iam's ssh_key {resource.name} ({resource.id}) deleted", + msg=f"iam_v1alpha1's ssh_key {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_instance_image.py b/plugins/modules/scaleway_instance_v1_image.py similarity index 81% rename from plugins/modules/scaleway_instance_image.py rename to plugins/modules/scaleway_instance_v1_image.py index 6827623..1c49bc1 100644 --- a/plugins/modules/scaleway_instance_image.py +++ b/plugins/modules/scaleway_instance_v1_image.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_image -short_description: Manage Scaleway instance's image +module: scaleway_instance_v1_image +short_description: Manage Scaleway instance_v1's image description: - - This module can be used to manage Scaleway instance's image. + - This module can be used to manage Scaleway instance_v1's image. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - image_id: - description: image_id + image: + description: image type: str required: false root_volume: @@ -49,7 +49,7 @@ arch: description: arch type: str - required: true + required: false choices: - x86_64 - arm @@ -82,11 +82,10 @@ EXAMPLES = r""" - name: Create a image - scaleway.scaleway.scaleway_instance_image: + scaleway.scaleway.scaleway_instance_v1_image: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" root_volume: "aaaaaa" - arch: "aaaaaa" """ RETURN = r""" @@ -125,9 +124,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_image(image_id=id) + resource = api.get_image(image_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -148,21 +147,38 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - image = module.params.pop("image", None) - - if image is not None: - resource = api.get_image(image_id=image, region=module.params["region"]) + resource_id = module.params.pop("image", None) + + if resource_id is not None: + resource = api.get_image( + image_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_images_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No image found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one image found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="image is required") if module.check_mode: module.exit_json(changed=True) - api.delete_image(image_id=resource.image, region=module.params["region"]) + api.delete_image( + image_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"instance's image {resource.image} deleted", + msg=f"instance_v1's image {resource.image} deleted", ) @@ -199,7 +215,7 @@ def main() -> None: ), arch=dict( type="str", - required=True, + required=False, choices=["x86_64", "arm"], ), default_bootscript=dict( @@ -221,7 +237,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), public=dict( type="bool", diff --git a/plugins/modules/scaleway_instance_ip.py b/plugins/modules/scaleway_instance_v1_ip.py similarity index 75% rename from plugins/modules/scaleway_instance_ip.py rename to plugins/modules/scaleway_instance_v1_ip.py index d7575f1..8773942 100644 --- a/plugins/modules/scaleway_instance_ip.py +++ b/plugins/modules/scaleway_instance_v1_ip.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_ip -short_description: Manage Scaleway instance's ip +module: scaleway_instance_v1_ip +short_description: Manage Scaleway instance_v1's ip description: - - This module can be used to manage Scaleway instance's ip. + - This module can be used to manage Scaleway instance_v1's ip. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -34,6 +34,15 @@ description: ip type: str required: false + type_: + description: type_ + type: str + required: true + choices: + - unknown_iptype + - nat + - routed_ipv4 + - routed_ipv6 zone: description: zone type: str @@ -59,9 +68,10 @@ EXAMPLES = r""" - name: Create a ip - scaleway.scaleway.scaleway_instance_ip: + scaleway.scaleway.scaleway_instance_v1_ip: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" + type_: "aaaaaa" """ RETURN = r""" @@ -100,9 +110,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_ip(ip=id) + resource = api.get_ip(ip=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -123,21 +133,38 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - ip = module.params.pop("ip", None) - - if ip is not None: - resource = api.get_ip(ip=ip, region=module.params["region"]) + resource_id = module.params.pop("ip", None) + + if resource_id is not None: + resource = api.get_ip( + ip=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_ips_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No ip found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one ip found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="ip is required") if module.check_mode: module.exit_json(changed=True) - api.delete_ip(ip=resource.ip, region=module.params["region"]) + api.delete_ip( + ip=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"instance's ip {resource.ip} deleted", + msg=f"instance_v1's ip {resource.ip} deleted", ) @@ -160,6 +187,11 @@ def main() -> None: argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), ip=dict(type="str"), + type_=dict( + type="str", + required=True, + choices=["unknown_iptype", "nat", "routed_ipv4", "routed_ipv6"], + ), zone=dict( type="str", required=False, @@ -175,7 +207,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), server=dict( type="str", diff --git a/plugins/modules/scaleway_instance_placement_group.py b/plugins/modules/scaleway_instance_v1_placement_group.py similarity index 80% rename from plugins/modules/scaleway_instance_placement_group.py rename to plugins/modules/scaleway_instance_v1_placement_group.py index d4fd405..be40ab1 100644 --- a/plugins/modules/scaleway_instance_placement_group.py +++ b/plugins/modules/scaleway_instance_v1_placement_group.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_placement_group -short_description: Manage Scaleway instance's placement_group +module: scaleway_instance_v1_placement_group +short_description: Manage Scaleway instance_v1's placement_group description: - - This module can be used to manage Scaleway instance's placement_group. + - This module can be used to manage Scaleway instance_v1's placement_group. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - placement_group_id: - description: placement_group_id + placement_group: + description: placement_group type: str required: false policy_mode: @@ -73,7 +73,7 @@ EXAMPLES = r""" - name: Create a placement_group - scaleway.scaleway.scaleway_instance_placement_group: + scaleway.scaleway.scaleway_instance_v1_placement_group: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" policy_mode: "aaaaaa" @@ -116,9 +116,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_placement_group(placement_group_id=id) + resource = api.get_placement_group(placement_group_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -139,12 +139,24 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - placement_group = module.params.pop("placement_group", None) + resource_id = module.params.pop("placement_group", None) - if placement_group is not None: + if resource_id is not None: resource = api.get_placement_group( - placement_group_id=placement_group, region=module.params["region"] + placement_group_id=resource_id, + zone=module.params["zone"], ) + elif module.params.get("name", None) is not None: + resources = api.list_placement_groups_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No placement_group found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one placement_group found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="placement_group is required") @@ -152,12 +164,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_placement_group( - placement_group_id=resource.placement_group, region=module.params["region"] + placement_group_id=resource.id, + zone=resource.zone, ) module.exit_json( changed=True, - msg=f"instance's placement_group {resource.placement_group} deleted", + msg=f"instance_v1's placement_group {resource.placement_group} deleted", ) @@ -209,7 +222,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_instance_private_nic.py b/plugins/modules/scaleway_instance_v1_private_nic.py similarity index 79% rename from plugins/modules/scaleway_instance_private_nic.py rename to plugins/modules/scaleway_instance_v1_private_nic.py index 1cef917..d0f6a0a 100644 --- a/plugins/modules/scaleway_instance_private_nic.py +++ b/plugins/modules/scaleway_instance_v1_private_nic.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_private_nic -short_description: Manage Scaleway instance's private_nic +module: scaleway_instance_v1_private_nic +short_description: Manage Scaleway instance_v1's private_nic description: - - This module can be used to manage Scaleway instance's private_nic. + - This module can be used to manage Scaleway instance_v1's private_nic. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,6 +30,10 @@ default: present choices: ["present", "absent"] type: str + private_nic: + description: private_nic + type: str + required: false server_id: description: server_id type: str @@ -47,11 +51,16 @@ type: list elements: str required: false + ip_ids: + description: ip_ids + type: list + elements: str + required: false """ EXAMPLES = r""" - name: Create a private_nic - scaleway.scaleway.scaleway_instance_private_nic: + scaleway.scaleway.scaleway_instance_v1_private_nic: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" server_id: "aaaaaa" @@ -94,9 +103,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_private_nic(server_id=id) + resource = api.get_private_nic(private_nic_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -117,11 +126,13 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - private_nic = module.params.pop("private_nic", None) + resource_id = module.params.pop("private_nic", None) - if private_nic is not None: + if resource_id is not None: resource = api.get_private_nic( - server_id=private_nic, region=module.params["region"] + server_id=module.params["server_id"], + private_nic_id=resource_id, + zone=module.params["zone"], ) else: module.fail_json(msg="private_nic is required") @@ -130,12 +141,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_private_nic( - server_id=resource.private_nic, region=module.params["region"] + server_id=resource.server_id, + private_nic_id=resource.id, + zone=resource.zone, ) module.exit_json( changed=True, - msg=f"instance's private_nic {resource.private_nic} deleted", + msg=f"instance_v1's private_nic {resource.private_nic} deleted", ) @@ -157,6 +170,7 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), + private_nic_id=dict(type="str"), server_id=dict( type="str", required=True, @@ -172,7 +186,10 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", + ), + ip_ids=dict( + type="list", + required=False, ), ) diff --git a/plugins/modules/scaleway_instance_security_group.py b/plugins/modules/scaleway_instance_v1_security_group.py similarity index 83% rename from plugins/modules/scaleway_instance_security_group.py rename to plugins/modules/scaleway_instance_v1_security_group.py index aff0233..b9cc1c2 100644 --- a/plugins/modules/scaleway_instance_security_group.py +++ b/plugins/modules/scaleway_instance_v1_security_group.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_security_group -short_description: Manage Scaleway instance's security_group +module: scaleway_instance_v1_security_group +short_description: Manage Scaleway instance_v1's security_group description: - - This module can be used to manage Scaleway instance's security_group. + - This module can be used to manage Scaleway instance_v1's security_group. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - security_group_id: - description: security_group_id + security_group: + description: security_group type: str required: false description: @@ -93,7 +93,7 @@ EXAMPLES = r""" - name: Create a security_group - scaleway.scaleway.scaleway_instance_security_group: + scaleway.scaleway.scaleway_instance_v1_security_group: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -138,9 +138,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_security_group(security_group_id=id) + resource = api.get_security_group(security_group_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -161,12 +161,24 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - security_group = module.params.pop("security_group", None) + resource_id = module.params.pop("security_group", None) - if security_group is not None: + if resource_id is not None: resource = api.get_security_group( - security_group_id=security_group, region=module.params["region"] + security_group_id=resource_id, + zone=module.params["zone"], ) + elif module.params.get("name", None) is not None: + resources = api.list_security_groups_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No security_group found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one security_group found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="security_group is required") @@ -174,12 +186,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_security_group( - security_group_id=resource.security_group, region=module.params["region"] + security_group_id=resource.id, + zone=resource.zone, ) module.exit_json( changed=True, - msg=f"instance's security_group {resource.security_group} deleted", + msg=f"instance_v1's security_group {resource.security_group} deleted", ) @@ -239,7 +252,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), organization_default=dict( type="bool", diff --git a/plugins/modules/scaleway_instance_security_group_rule.py b/plugins/modules/scaleway_instance_v1_security_group_rule.py similarity index 83% rename from plugins/modules/scaleway_instance_security_group_rule.py rename to plugins/modules/scaleway_instance_v1_security_group_rule.py index 5caa238..393c9c5 100644 --- a/plugins/modules/scaleway_instance_security_group_rule.py +++ b/plugins/modules/scaleway_instance_v1_security_group_rule.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_security_group_rule -short_description: Manage Scaleway instance's security_group_rule +module: scaleway_instance_v1_security_group_rule +short_description: Manage Scaleway instance_v1's security_group_rule description: - - This module can be used to manage Scaleway instance's security_group_rule. + - This module can be used to manage Scaleway instance_v1's security_group_rule. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,6 +30,10 @@ default: present choices: ["present", "absent"] type: str + rule: + description: rule + type: str + required: false security_group_id: description: security_group_id type: str @@ -53,7 +57,7 @@ protocol: description: protocol type: str - required: true + required: false choices: - TCP - UDP @@ -62,14 +66,14 @@ direction: description: direction type: str - required: true + required: false choices: - inbound - outbound action: description: action type: str - required: true + required: false choices: - accept - drop @@ -85,16 +89,13 @@ EXAMPLES = r""" - name: Create a security_group_rule - scaleway.scaleway.scaleway_instance_security_group_rule: + scaleway.scaleway.scaleway_instance_v1_security_group_rule: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" security_group_id: "aaaaaa" ip_range: "aaaaaa" position: "aaaaaa" editable: true - protocol: "aaaaaa" - direction: "aaaaaa" - action: "aaaaaa" """ RETURN = r""" @@ -133,9 +134,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_security_group_rule(security_group_id=id) + resource = api.get_security_group_rule(security_group_rule_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -156,11 +157,13 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - rule = module.params.pop("rule", None) + resource_id = module.params.pop("rule", None) - if rule is not None: + if resource_id is not None: resource = api.get_security_group_rule( - security_group_id=rule, region=module.params["region"] + security_group_id=module.params["security_group_id"], + security_group_rule_id=resource_id, + zone=module.params["zone"], ) else: module.fail_json(msg="rule is required") @@ -169,12 +172,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_security_group_rule( - security_group_id=resource.rule, region=module.params["region"] + security_group_id=resource.security_group_id, + security_group_rule_id=resource.id, + zone=resource.zone, ) module.exit_json( changed=True, - msg=f"instance's security_group_rule {resource.rule} deleted", + msg=f"instance_v1's security_group_rule {resource.rule} deleted", ) @@ -196,6 +201,7 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), + security_group_rule_id=dict(type="str"), security_group_id=dict( type="str", required=True, @@ -218,17 +224,17 @@ def main() -> None: ), protocol=dict( type="str", - required=True, + required=False, choices=["TCP", "UDP", "ICMP", "ANY"], ), direction=dict( type="str", - required=True, + required=False, choices=["inbound", "outbound"], ), action=dict( type="str", - required=True, + required=False, choices=["accept", "drop"], ), dest_port_from=dict( diff --git a/plugins/modules/scaleway_instance_snapshot.py b/plugins/modules/scaleway_instance_v1_snapshot.py similarity index 82% rename from plugins/modules/scaleway_instance_snapshot.py rename to plugins/modules/scaleway_instance_v1_snapshot.py index 9645245..1102f70 100644 --- a/plugins/modules/scaleway_instance_snapshot.py +++ b/plugins/modules/scaleway_instance_v1_snapshot.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_snapshot -short_description: Manage Scaleway instance's snapshot +module: scaleway_instance_v1_snapshot +short_description: Manage Scaleway instance_v1's snapshot description: - - This module can be used to manage Scaleway instance's snapshot. + - This module can be used to manage Scaleway instance_v1's snapshot. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - snapshot_id: - description: snapshot_id + snapshot: + description: snapshot type: str required: false volume_type: @@ -84,7 +84,7 @@ EXAMPLES = r""" - name: Create a snapshot - scaleway.scaleway.scaleway_instance_snapshot: + scaleway.scaleway.scaleway_instance_v1_snapshot: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" volume_type: "aaaaaa" @@ -126,9 +126,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_snapshot(snapshot_id=id) + resource = api.get_snapshot(snapshot_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -149,23 +149,38 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - snapshot = module.params.pop("snapshot", None) + resource_id = module.params.pop("snapshot", None) - if snapshot is not None: + if resource_id is not None: resource = api.get_snapshot( - snapshot_id=snapshot, region=module.params["region"] + snapshot_id=resource_id, + zone=module.params["zone"], ) + elif module.params.get("name", None) is not None: + resources = api.list_snapshots_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No snapshot found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one snapshot found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="snapshot is required") if module.check_mode: module.exit_json(changed=True) - api.delete_snapshot(snapshot_id=resource.snapshot, region=module.params["region"]) + api.delete_snapshot( + snapshot_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"instance's snapshot {resource.snapshot} deleted", + msg=f"instance_v1's snapshot {resource.snapshot} deleted", ) @@ -208,7 +223,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), organization=dict( type="str", diff --git a/plugins/modules/scaleway_instance_volume.py b/plugins/modules/scaleway_instance_v1_volume.py similarity index 81% rename from plugins/modules/scaleway_instance_volume.py rename to plugins/modules/scaleway_instance_v1_volume.py index ee1bc5b..af190e7 100644 --- a/plugins/modules/scaleway_instance_volume.py +++ b/plugins/modules/scaleway_instance_v1_volume.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_instance_volume -short_description: Manage Scaleway instance's volume +module: scaleway_instance_v1_volume +short_description: Manage Scaleway instance_v1's volume description: - - This module can be used to manage Scaleway instance's volume. + - This module can be used to manage Scaleway instance_v1's volume. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - volume_id: - description: volume_id + volume: + description: volume type: str required: false volume_type: @@ -79,7 +79,7 @@ EXAMPLES = r""" - name: Create a volume - scaleway.scaleway.scaleway_instance_volume: + scaleway.scaleway.scaleway_instance_v1_volume: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" volume_type: "aaaaaa" @@ -121,9 +121,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_volume(volume_id=id) + resource = api.get_volume(volume_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -144,21 +144,38 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - volume = module.params.pop("volume", None) - - if volume is not None: - resource = api.get_volume(volume_id=volume, region=module.params["region"]) + resource_id = module.params.pop("volume", None) + + if resource_id is not None: + resource = api.get_volume( + volume_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_volumes_all( + name=module.params["name"], + zone=module.params["zone"], + ) + if len(resources) == 0: + module.exit_json(msg="No volume found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one volume found with name {name}") + else: + resource = resources[0] else: module.fail_json(msg="volume is required") if module.check_mode: module.exit_json(changed=True) - api.delete_volume(volume_id=resource.volume, region=module.params["region"]) + api.delete_volume( + volume_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"instance's volume {resource.volume} deleted", + msg=f"instance_v1's volume {resource.volume} deleted", ) @@ -205,7 +222,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), size=dict( type="int", diff --git a/plugins/modules/scaleway_iot_device.py b/plugins/modules/scaleway_iot_v1_device.py similarity index 86% rename from plugins/modules/scaleway_iot_device.py rename to plugins/modules/scaleway_iot_v1_device.py index b129f6f..6c527e4 100644 --- a/plugins/modules/scaleway_iot_device.py +++ b/plugins/modules/scaleway_iot_v1_device.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iot_device -short_description: Manage Scaleway iot's device +module: scaleway_iot_v1_device +short_description: Manage Scaleway iot_v1's device description: - - This module can be used to manage Scaleway iot's device. + - This module can be used to manage Scaleway iot_v1's device. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - device_id: - description: device_id + id: + description: id type: str required: false hub_id: @@ -70,7 +70,7 @@ EXAMPLES = r""" - name: Create a device - scaleway.scaleway.scaleway_iot_device: + scaleway.scaleway.scaleway_iot_v1_device: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" hub_id: "aaaaaa" @@ -126,9 +126,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_device(device_id=id) + resource = api.get_device(device_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -149,13 +149,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_device(device_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_devices_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_device( + device_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_devices_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No device found with name {name}") elif len(resources) > 1: @@ -168,11 +173,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_device(device_id=resource.id, region=module.params["region"]) + api.delete_device( + device_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"iot's device {resource.name} ({resource.id}) deleted", + msg=f"iot_v1's device {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_iot_hub.py b/plugins/modules/scaleway_iot_v1_hub.py similarity index 84% rename from plugins/modules/scaleway_iot_hub.py rename to plugins/modules/scaleway_iot_v1_hub.py index 7795aa7..349557f 100644 --- a/plugins/modules/scaleway_iot_hub.py +++ b/plugins/modules/scaleway_iot_v1_hub.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iot_hub -short_description: Manage Scaleway iot's hub +module: scaleway_iot_v1_hub +short_description: Manage Scaleway iot_v1's hub description: - - This module can be used to manage Scaleway iot's hub. + - This module can be used to manage Scaleway iot_v1's hub. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - hub_id: - description: hub_id + id: + description: id type: str required: false region: @@ -53,7 +53,7 @@ product_plan: description: product_plan type: str - required: true + required: false choices: - plan_unknown - plan_shared @@ -75,10 +75,9 @@ EXAMPLES = r""" - name: Create a hub - scaleway.scaleway.scaleway_iot_hub: + scaleway.scaleway.scaleway_iot_v1_hub: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" - product_plan: "aaaaaa" """ RETURN = r""" @@ -123,7 +122,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.iot.v1 import IotV1API HAS_SCALEWAY_SDK = True @@ -134,9 +133,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_hub(hub_id=id) + resource = api.get_hub(hub_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -150,7 +149,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_hub(**not_none_params) - resource = api.wait_for_hub(hub_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) @@ -158,13 +156,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_hub(hub_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_hubs_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_hub( + hub_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_hubs_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No hub found with name {name}") elif len(resources) > 1: @@ -177,17 +180,15 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_hub(hub_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_hub(hub_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_hub( + hub_id=resource.id, + region=resource.region, + delete_devices=resource.delete_devices, + ) module.exit_json( changed=True, - msg=f"iot's hub {resource.name} ({resource.id}) deleted", + msg=f"iot_v1's hub {resource.name} ({resource.id}) deleted", ) @@ -225,7 +226,7 @@ def main() -> None: ), product_plan=dict( type="str", - required=True, + required=False, choices=["plan_unknown", "plan_shared", "plan_dedicated", "plan_ha"], ), disable_events=dict( diff --git a/plugins/modules/scaleway_iot_network.py b/plugins/modules/scaleway_iot_v1_network.py similarity index 83% rename from plugins/modules/scaleway_iot_network.py rename to plugins/modules/scaleway_iot_v1_network.py index 5276fea..b0b2205 100644 --- a/plugins/modules/scaleway_iot_network.py +++ b/plugins/modules/scaleway_iot_v1_network.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iot_network -short_description: Manage Scaleway iot's network +module: scaleway_iot_v1_network +short_description: Manage Scaleway iot_v1's network description: - - This module can be used to manage Scaleway iot's network. + - This module can be used to manage Scaleway iot_v1's network. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - network_id: - description: network_id + id: + description: id type: str required: false hub_id: @@ -57,7 +57,7 @@ type_: description: type_ type: str - required: true + required: false choices: - unknown - sigfox @@ -66,12 +66,11 @@ EXAMPLES = r""" - name: Create a network - scaleway.scaleway.scaleway_iot_network: + scaleway.scaleway.scaleway_iot_v1_network: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" hub_id: "aaaaaa" topic_prefix: "aaaaaa" - type_: "aaaaaa" """ RETURN = r""" @@ -114,9 +113,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_network(network_id=id) + resource = api.get_network(network_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -137,13 +136,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_network(network_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_networks_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_network( + network_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_networks_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No network found with name {name}") elif len(resources) > 1: @@ -156,11 +160,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_network(network_id=resource.id, region=module.params["region"]) + api.delete_network( + network_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"iot's network {resource.name} ({resource.id}) deleted", + msg=f"iot_v1's network {resource.name} ({resource.id}) deleted", ) @@ -202,7 +209,7 @@ def main() -> None: ), type_=dict( type="str", - required=True, + required=False, choices=["unknown", "sigfox", "rest"], ), ) diff --git a/plugins/modules/scaleway_iot_route.py b/plugins/modules/scaleway_iot_v1_route.py similarity index 86% rename from plugins/modules/scaleway_iot_route.py rename to plugins/modules/scaleway_iot_v1_route.py index 8f4f17c..08f5a7f 100644 --- a/plugins/modules/scaleway_iot_route.py +++ b/plugins/modules/scaleway_iot_v1_route.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_iot_route -short_description: Manage Scaleway iot's route +module: scaleway_iot_v1_route +short_description: Manage Scaleway iot_v1's route description: - - This module can be used to manage Scaleway iot's route. + - This module can be used to manage Scaleway iot_v1's route. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - route_id: - description: route_id + id: + description: id type: str required: false hub_id: @@ -70,7 +70,7 @@ EXAMPLES = r""" - name: Create a route - scaleway.scaleway.scaleway_iot_route: + scaleway.scaleway.scaleway_iot_v1_route: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" hub_id: "aaaaaa" @@ -126,9 +126,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_route(route_id=id) + resource = api.get_route(route_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -149,13 +149,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_route(route_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_routes_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_route( + route_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_routes_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No route found with name {name}") elif len(resources) > 1: @@ -168,11 +173,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_route(route_id=resource.id, region=module.params["region"]) + api.delete_route( + route_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"iot's route {resource.name} ({resource.id}) deleted", + msg=f"iot_v1's route {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_k8s_cluster.py b/plugins/modules/scaleway_k8s_v1_cluster.py similarity index 86% rename from plugins/modules/scaleway_k8s_cluster.py rename to plugins/modules/scaleway_k8s_v1_cluster.py index a3226a8..952f4b4 100644 --- a/plugins/modules/scaleway_k8s_cluster.py +++ b/plugins/modules/scaleway_k8s_v1_cluster.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_k8s_cluster -short_description: Manage Scaleway k8s's cluster +module: scaleway_k8s_v1_cluster +short_description: Manage Scaleway k8s_v1's cluster description: - - This module can be used to manage Scaleway k8s's cluster. + - This module can be used to manage Scaleway k8s_v1's cluster. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - cluster_id: - description: cluster_id + id: + description: id type: str required: false type_: @@ -74,7 +74,7 @@ cni: description: cni type: str - required: true + required: false choices: - unknown_cni - cilium @@ -128,17 +128,20 @@ type: list elements: str required: false + private_network_id: + description: private_network_id + type: str + required: false """ EXAMPLES = r""" - name: Create a cluster - scaleway.scaleway.scaleway_k8s_cluster: + scaleway.scaleway.scaleway_k8s_v1_cluster: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" type_: "aaaaaa" description: "aaaaaa" version: "aaaaaa" - cni: "aaaaaa" """ RETURN = r""" @@ -184,6 +187,8 @@ apiserver_cert_sans: - aaaaaa - bbbbbb + private_network_id: 00000000-0000-0000-0000-000000000000 + commitment_ends_at: "aaaaaa" """ from ansible.module_utils.basic import ( @@ -199,7 +204,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.k8s.v1 import K8SV1API HAS_SCALEWAY_SDK = True @@ -210,9 +215,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_cluster(cluster_id=id) + resource = api.get_cluster(cluster_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -226,9 +231,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_cluster(**not_none_params) - resource = api.wait_for_cluster( - cluster_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -236,13 +238,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_cluster(cluster_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_clusters_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_cluster( + cluster_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_clusters_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No cluster found with name {name}") elif len(resources) > 1: @@ -255,17 +262,15 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_cluster(cluster_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_cluster(cluster_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_cluster( + cluster_id=resource.id, + with_additional_resources=resource.with_additional_resources, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"k8s's cluster {resource.name} ({resource.id}) deleted", + msg=f"k8s_v1's cluster {resource.name} ({resource.id}) deleted", ) @@ -320,11 +325,10 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), cni=dict( type="str", - required=True, + required=False, choices=["unknown_cni", "cilium", "calico", "weave", "flannel", "kilo"], ), enable_dashboard=dict( @@ -339,7 +343,6 @@ def main() -> None: pools=dict( type="list", required=False, - elements="str", ), autoscaler_config=dict( type="dict", @@ -352,12 +355,10 @@ def main() -> None: feature_gates=dict( type="list", required=False, - elements="str", ), admission_plugins=dict( type="list", required=False, - elements="str", ), open_id_connect_config=dict( type="dict", @@ -366,7 +367,10 @@ def main() -> None: apiserver_cert_sans=dict( type="list", required=False, - elements="str", + ), + private_network_id=dict( + type="str", + required=False, ), ) diff --git a/plugins/modules/scaleway_k8s_pool.py b/plugins/modules/scaleway_k8s_v1_pool.py similarity index 88% rename from plugins/modules/scaleway_k8s_pool.py rename to plugins/modules/scaleway_k8s_v1_pool.py index d75acbc..1d6be58 100644 --- a/plugins/modules/scaleway_k8s_pool.py +++ b/plugins/modules/scaleway_k8s_v1_pool.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_k8s_pool -short_description: Manage Scaleway k8s's pool +module: scaleway_k8s_v1_pool +short_description: Manage Scaleway k8s_v1's pool description: - - This module can be used to manage Scaleway k8s's pool. + - This module can be used to manage Scaleway k8s_v1's pool. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - pool_id: - description: pool_id + id: + description: id type: str required: false cluster_id: @@ -120,7 +120,7 @@ EXAMPLES = r""" - name: Create a pool - scaleway.scaleway.scaleway_k8s_pool: + scaleway.scaleway.scaleway_k8s_v1_pool: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" cluster_id: "aaaaaa" @@ -182,7 +182,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.k8s.v1 import K8SV1API HAS_SCALEWAY_SDK = True @@ -193,9 +193,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_pool(pool_id=id) + resource = api.get_pool(pool_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -209,7 +209,6 @@ 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"]) module.exit_json(changed=True, data=resource.__dict__) @@ -217,13 +216,19 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_pool(pool_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_pools_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_pool( + pool_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_pools_all( + name=module.params["name"], + cluster_id=module.params.get("cluster_id", None), + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No pool found with name {name}") elif len(resources) > 1: @@ -236,17 +241,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_pool(pool_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_pool(pool_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_pool( + pool_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"k8s's pool {resource.name} ({resource.id}) deleted", + msg=f"k8s_v1's pool {resource.name} ({resource.id}) deleted", ) @@ -323,7 +325,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), kubelet_args=dict( type="dict", diff --git a/plugins/modules/scaleway_lb_acl.py b/plugins/modules/scaleway_lb_v1_acl.py similarity index 82% rename from plugins/modules/scaleway_lb_acl.py rename to plugins/modules/scaleway_lb_v1_acl.py index 8d5f6d2..fb9fdbf 100644 --- a/plugins/modules/scaleway_lb_acl.py +++ b/plugins/modules/scaleway_lb_v1_acl.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_acl -short_description: Manage Scaleway lb's acl +module: scaleway_lb_v1_acl +short_description: Manage Scaleway lb_v1's acl description: - - This module can be used to manage Scaleway lb's acl. + - This module can be used to manage Scaleway lb_v1's acl. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - acl_id: - description: acl_id + id: + description: id type: str required: false frontend_id: @@ -50,14 +50,10 @@ description: description type: str required: true - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw name: description: name type: str @@ -70,7 +66,7 @@ EXAMPLES = r""" - name: Create a acl - scaleway.scaleway.scaleway_lb_acl: + scaleway.scaleway.scaleway_lb_v1_acl: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" frontend_id: "aaaaaa" @@ -119,7 +115,7 @@ try: from scaleway import Client - from scaleway.lb.v1 import LbV1API + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -127,11 +123,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_acl(acl_id=id) + resource = api.get_acl(acl_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -150,15 +146,21 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_acl(acl_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_acls_all(name=name, region=module.params["region"]) + api = LbZonedV1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_acl( + acl_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_acls_all( + name=module.params["name"], + frontend_id=module.params.get("frontend_id", None), + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No acl found with name {name}") elif len(resources) > 1: @@ -171,11 +173,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_acl(acl_id=resource.id, region=module.params["region"]) + api.delete_acl( + acl_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's acl {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's acl {resource.name} ({resource.id}) deleted", ) @@ -214,10 +219,9 @@ def main() -> None: type="str", required=True, ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), name=dict( type="str", diff --git a/plugins/modules/scaleway_lb_backend.py b/plugins/modules/scaleway_lb_v1_backend.py similarity index 79% rename from plugins/modules/scaleway_lb_backend.py rename to plugins/modules/scaleway_lb_v1_backend.py index 03dd8b2..5e83ed9 100644 --- a/plugins/modules/scaleway_lb_backend.py +++ b/plugins/modules/scaleway_lb_v1_backend.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_backend -short_description: Manage Scaleway lb's backend +module: scaleway_lb_v1_backend +short_description: Manage Scaleway lb_v1's backend description: - - This module can be used to manage Scaleway lb's backend. + - This module can be used to manage Scaleway lb_v1's backend. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - backend_id: - description: backend_id + id: + description: id type: str required: false lb_id: @@ -73,14 +73,10 @@ - proxy_protocol_v2 - proxy_protocol_v2_ssl - proxy_protocol_v2_ssl_cn - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw name: description: name type: str @@ -88,14 +84,14 @@ forward_protocol: description: forward_protocol type: str - required: true + required: false choices: - tcp - http forward_port_algorithm: description: forward_port_algorithm type: str - required: true + required: false choices: - roundrobin - leastconn @@ -103,7 +99,7 @@ sticky_sessions: description: sticky_sessions type: str - required: true + required: false choices: - none - cookie @@ -136,11 +132,27 @@ description: ignore_ssl_server_verify type: bool required: false + redispatch_attempt_count: + description: redispatch_attempt_count + type: int + required: false + max_retries: + description: max_retries + type: int + required: false + max_connections: + description: max_connections + type: int + required: false + timeout_queue: + description: timeout_queue + type: str + required: false """ EXAMPLES = r""" - name: Create a backend - scaleway.scaleway.scaleway_lb_backend: + scaleway.scaleway.scaleway_lb_v1_backend: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" lb_id: "aaaaaa" @@ -154,9 +166,6 @@ - bbbbbb on_marked_down_action: "aaaaaa" proxy_protocol: "aaaaaa" - forward_protocol: "aaaaaa" - forward_port_algorithm: "aaaaaa" - sticky_sessions: "aaaaaa" """ RETURN = r""" @@ -193,6 +202,10 @@ failover_host: "aaaaaa" ssl_bridging: 00000000-0000-0000-0000-000000000000 ignore_ssl_server_verify: true + redispatch_attempt_count: 3 + max_retries: 3 + max_connections: 3 + timeout_queue: "aaaaaa" """ from ansible.module_utils.basic import ( @@ -209,7 +222,7 @@ try: from scaleway import Client - from scaleway.lb.v1 import LbV1API + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -217,11 +230,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_backend(backend_id=id) + resource = api.get_backend(backend_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -240,15 +253,21 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_backend(backend_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_backends_all(name=name, region=module.params["region"]) + api = LbZonedV1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_backend( + backend_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_backends_all( + name=module.params["name"], + lb_id=module.params.get("lb_id", None), + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No backend found with name {name}") elif len(resources) > 1: @@ -261,11 +280,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_backend(backend_id=resource.id, region=module.params["region"]) + api.delete_backend( + backend_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's backend {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's backend {resource.name} ({resource.id}) deleted", ) @@ -307,7 +329,6 @@ def main() -> None: server_ip=dict( type="list", required=True, - elements="str", ), on_marked_down_action=dict( type="str", @@ -317,19 +338,11 @@ def main() -> None: proxy_protocol=dict( type="str", required=True, - choices=[ - "proxy_protocol_unknown", - "proxy_protocol_none", - "proxy_protocol_v1", - "proxy_protocol_v2", - "proxy_protocol_v2_ssl", - "proxy_protocol_v2_ssl_cn", - ], + choices=["proxy_protocol_unknown", "proxy_protocol_none", "proxy_protocol_v1", "proxy_protocol_v2", "proxy_protocol_v2_ssl", "proxy_protocol_v2_ssl_cn"], ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), name=dict( type="str", @@ -337,17 +350,17 @@ def main() -> None: ), forward_protocol=dict( type="str", - required=True, + required=False, choices=["tcp", "http"], ), forward_port_algorithm=dict( type="str", - required=True, + required=False, choices=["roundrobin", "leastconn", "first"], ), sticky_sessions=dict( type="str", - required=True, + required=False, choices=["none", "cookie", "table"], ), send_proxy_v2=dict( @@ -378,6 +391,22 @@ def main() -> None: type="bool", required=False, ), + redispatch_attempt_count=dict( + type="int", + required=False, + ), + max_retries=dict( + type="int", + required=False, + ), + max_connections=dict( + type="int", + required=False, + ), + timeout_queue=dict( + type="str", + required=False, + ), ) module = AnsibleModule( diff --git a/plugins/modules/scaleway_lb_certificate.py b/plugins/modules/scaleway_lb_v1_certificate.py similarity index 77% rename from plugins/modules/scaleway_lb_certificate.py rename to plugins/modules/scaleway_lb_v1_certificate.py index 95ebe23..96a6672 100644 --- a/plugins/modules/scaleway_lb_certificate.py +++ b/plugins/modules/scaleway_lb_v1_certificate.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_certificate -short_description: Manage Scaleway lb's certificate +module: scaleway_lb_v1_certificate +short_description: Manage Scaleway lb_v1's certificate description: - - This module can be used to manage Scaleway lb's certificate. + - This module can be used to manage Scaleway lb_v1's certificate. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,22 +30,18 @@ default: present choices: ["present", "absent"] type: str - certificate_id: - description: certificate_id + id: + description: id type: str required: false lb_id: description: lb_id type: str required: true - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw name: description: name type: str @@ -62,7 +58,7 @@ EXAMPLES = r""" - name: Create a certificate - scaleway.scaleway.scaleway_lb_certificate: + scaleway.scaleway.scaleway_lb_v1_certificate: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" lb_id: "aaaaaa" @@ -107,8 +103,8 @@ ) try: - from scaleway import Client, ScalewayException - from scaleway.lb.v1 import LbV1API + from scaleway import Client + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -116,11 +112,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_certificate(certificate_id=id) + resource = api.get_certificate(certificate_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -134,25 +130,26 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_certificate(**not_none_params) - resource = api.wait_for_certificate( - certificate_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_certificate( - certificate_id=id, region=module.params["region"] + certificate_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_certificates_all( + name=module.params["name"], + lb_id=module.params.get("lb_id", None), + zone=module.params["zone"], ) - elif name is not None: - resources = api.list_certificates_all(name=name, region=module.params["region"]) if len(resources) == 0: module.exit_json(msg="No certificate found with name {name}") elif len(resources) > 1: @@ -165,19 +162,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_certificate(certificate_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_certificate( - certificate_id=resource.id, region=module.params["region"] - ) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_certificate( + certificate_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's certificate {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's certificate {resource.name} ({resource.id}) deleted", ) @@ -204,10 +196,9 @@ def main() -> None: type="str", required=True, ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), name=dict( type="str", diff --git a/plugins/modules/scaleway_lb_frontend.py b/plugins/modules/scaleway_lb_v1_frontend.py similarity index 83% rename from plugins/modules/scaleway_lb_frontend.py rename to plugins/modules/scaleway_lb_v1_frontend.py index 4ef554c..7f127d3 100644 --- a/plugins/modules/scaleway_lb_frontend.py +++ b/plugins/modules/scaleway_lb_v1_frontend.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_frontend -short_description: Manage Scaleway lb's frontend +module: scaleway_lb_v1_frontend +short_description: Manage Scaleway lb_v1's frontend description: - - This module can be used to manage Scaleway lb's frontend. + - This module can be used to manage Scaleway lb_v1's frontend. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - frontend_id: - description: frontend_id + id: + description: id type: str required: false lb_id: @@ -50,14 +50,10 @@ description: enable_http3 type: bool required: true - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw name: description: name type: str @@ -79,7 +75,7 @@ EXAMPLES = r""" - name: Create a frontend - scaleway.scaleway.scaleway_lb_frontend: + scaleway.scaleway.scaleway_lb_v1_frontend: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" lb_id: "aaaaaa" @@ -128,7 +124,7 @@ try: from scaleway import Client - from scaleway.lb.v1 import LbV1API + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -136,11 +132,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_frontend(frontend_id=id) + resource = api.get_frontend(frontend_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -159,15 +155,21 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_frontend(frontend_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_frontends_all(name=name, region=module.params["region"]) + api = LbZonedV1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_frontend( + frontend_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_frontends_all( + name=module.params["name"], + lb_id=module.params.get("lb_id", None), + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No frontend found with name {name}") elif len(resources) > 1: @@ -180,11 +182,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_frontend(frontend_id=resource.id, region=module.params["region"]) + api.delete_frontend( + frontend_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's frontend {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's frontend {resource.name} ({resource.id}) deleted", ) @@ -223,10 +228,9 @@ def main() -> None: type="bool", required=True, ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), name=dict( type="str", @@ -243,7 +247,6 @@ def main() -> None: certificate_ids=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_lb.py b/plugins/modules/scaleway_lb_v1_lb.py similarity index 79% rename from plugins/modules/scaleway_lb.py rename to plugins/modules/scaleway_lb_v1_lb.py index a61c0fc..3f1e3d0 100644 --- a/plugins/modules/scaleway_lb.py +++ b/plugins/modules/scaleway_lb_v1_lb.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb -short_description: Manage Scaleway lb's lb +module: scaleway_lb_v1_lb +short_description: Manage Scaleway lb_v1's lb description: - - This module can be used to manage Scaleway lb's lb. + - This module can be used to manage Scaleway lb_v1's lb. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - lb_id: - description: lb_id + id: + description: id type: str required: false description: @@ -51,14 +51,10 @@ - ssl_compatibility_level_intermediate - ssl_compatibility_level_modern - ssl_compatibility_level_old - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw organization_id: description: organization_id type: str @@ -75,6 +71,10 @@ description: ip_id type: str required: false + assign_flexible_ip: + description: assign_flexible_ip + type: bool + required: false tags: description: tags type: list @@ -84,7 +84,7 @@ EXAMPLES = r""" - name: Create a lb - scaleway.scaleway.scaleway_lb: + scaleway.scaleway.scaleway_lb_v1_lb: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -142,8 +142,8 @@ ) try: - from scaleway import Client, ScalewayException - from scaleway.lb.v1 import LbV1API + from scaleway import Client + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -151,11 +151,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_lb(lb_id=id) + resource = api.get_lb(lb_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -169,21 +169,25 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_lb(**not_none_params) - resource = api.wait_for_lb(lb_id=resource.id, region=module.params["region"]) module.exit_json(changed=True, data=resource.__dict__) def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_lb(lb_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_lbs_all(name=name, region=module.params["region"]) + api = LbZonedV1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_lb( + lb_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_lbs_all( + name=module.params["name"], + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No lb found with name {name}") elif len(resources) > 1: @@ -196,17 +200,15 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_lb(lb_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_lb(lb_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_lb( + lb_id=resource.id, + release_ip=resource.release_ip, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's lb {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's lb {resource.name} ({resource.id}) deleted", ) @@ -240,17 +242,11 @@ def main() -> None: ssl_compatibility_level=dict( type="str", required=True, - choices=[ - "ssl_compatibility_level_unknown", - "ssl_compatibility_level_intermediate", - "ssl_compatibility_level_modern", - "ssl_compatibility_level_old", - ], + choices=["ssl_compatibility_level_unknown", "ssl_compatibility_level_intermediate", "ssl_compatibility_level_modern", "ssl_compatibility_level_old"], ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), organization_id=dict( type="str", @@ -268,10 +264,13 @@ def main() -> None: type="str", required=False, ), + assign_flexible_ip=dict( + type="bool", + required=False, + ), tags=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_lb_route.py b/plugins/modules/scaleway_lb_v1_route.py similarity index 83% rename from plugins/modules/scaleway_lb_route.py rename to plugins/modules/scaleway_lb_v1_route.py index 4c0f4c3..84322fd 100644 --- a/plugins/modules/scaleway_lb_route.py +++ b/plugins/modules/scaleway_lb_v1_route.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_route -short_description: Manage Scaleway lb's route +module: scaleway_lb_v1_route +short_description: Manage Scaleway lb_v1's route description: - - This module can be used to manage Scaleway lb's route. + - This module can be used to manage Scaleway lb_v1's route. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - route_id: - description: route_id + id: + description: id type: str required: false frontend_id: @@ -42,14 +42,10 @@ description: backend_id type: str required: true - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw match: description: match type: dict @@ -58,7 +54,7 @@ EXAMPLES = r""" - name: Create a route - scaleway.scaleway.scaleway_lb_route: + scaleway.scaleway.scaleway_lb_v1_route: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" frontend_id: "aaaaaa" @@ -96,7 +92,7 @@ try: from scaleway import Client - from scaleway.lb.v1 import LbV1API + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -104,11 +100,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_route(route_id=id) + resource = api.get_route(route_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -127,23 +123,29 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_route(route_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_route( + route_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_route(route_id=resource.id, region=module.params["region"]) + api.delete_route( + route_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's route {resource.id} deleted", + msg=f"lb_v1's route {resource.id} deleted", ) @@ -174,10 +176,9 @@ def main() -> None: type="str", required=True, ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), match=dict( type="dict", diff --git a/plugins/modules/scaleway_lb_subscriber.py b/plugins/modules/scaleway_lb_v1_subscriber.py similarity index 76% rename from plugins/modules/scaleway_lb_subscriber.py rename to plugins/modules/scaleway_lb_v1_subscriber.py index 2c09f33..ff1b234 100644 --- a/plugins/modules/scaleway_lb_subscriber.py +++ b/plugins/modules/scaleway_lb_v1_subscriber.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_lb_subscriber -short_description: Manage Scaleway lb's subscriber +module: scaleway_lb_v1_subscriber +short_description: Manage Scaleway lb_v1's subscriber description: - - This module can be used to manage Scaleway lb's subscriber. + - This module can be used to manage Scaleway lb_v1's subscriber. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,22 +30,18 @@ default: present choices: ["present", "absent"] type: str - subscriber_id: - description: subscriber_id + id: + description: id type: str required: false name: description: name type: str required: true - region: - description: region + zone: + description: zone type: str required: false - choices: - - fr-par - - nl-ams - - pl-waw email_config: description: email_config type: dict @@ -66,7 +62,7 @@ EXAMPLES = r""" - name: Create a subscriber - scaleway.scaleway.scaleway_lb_subscriber: + scaleway.scaleway.scaleway_lb_v1_subscriber: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" name: "aaaaaa" @@ -103,7 +99,7 @@ try: from scaleway import Client - from scaleway.lb.v1 import LbV1API + from scaleway.lb.v1 import LbZonedV1API HAS_SCALEWAY_SDK = True except ImportError: @@ -111,11 +107,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_subscriber(subscriber_id=id) + resource = api.get_subscriber(subscriber_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -134,32 +130,29 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: - api = LbV1API(client) + api = LbZonedV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_subscriber(subscriber_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_subscribers_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No subscriber found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one subscriber found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_subscriber( + subscriber_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_subscriber(subscriber_id=resource.id, region=module.params["region"]) + api.delete_subscriber( + subscriber_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"lb's subscriber {resource.name} ({resource.id}) deleted", + msg=f"lb_v1's subscriber {resource.name} ({resource.id}) deleted", ) @@ -186,10 +179,9 @@ def main() -> None: type="str", required=True, ), - region=dict( + zone=dict( type="str", required=False, - choices=["fr-par", "nl-ams", "pl-waw"], ), email_config=dict( type="dict", diff --git a/plugins/modules/scaleway_mnq_credential.py b/plugins/modules/scaleway_mnq_v1alpha1_credential.py similarity index 80% rename from plugins/modules/scaleway_mnq_credential.py rename to plugins/modules/scaleway_mnq_v1alpha1_credential.py index 80aa9ef..0b0d6db 100644 --- a/plugins/modules/scaleway_mnq_credential.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_credential.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_mnq_credential -short_description: Manage Scaleway mnq's credential +module: scaleway_mnq_v1alpha1_credential +short_description: Manage Scaleway mnq_v1alpha1's credential description: - - This module can be used to manage Scaleway mnq's credential. + - This module can be used to manage Scaleway mnq_v1alpha1's credential. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - credential_id: - description: credential_id + id: + description: id type: str required: false namespace_id: @@ -58,7 +58,7 @@ EXAMPLES = r""" - name: Create a credential - scaleway.scaleway.scaleway_mnq_credential: + scaleway.scaleway.scaleway_mnq_v1alpha1_credential: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" namespace_id: "aaaaaa" @@ -107,9 +107,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_credential(credential_id=id) + resource = api.get_credential(credential_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -130,30 +130,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_credential(credential_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_credentials_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No credential found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one credential found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_credential( + credential_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_credential(credential_id=resource.id, region=module.params["region"]) + api.delete_credential( + credential_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"mnq's credential {resource.name} ({resource.id}) deleted", + msg=f"mnq_v1alpha1's credential {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_mnq_namespace.py b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py similarity index 79% rename from plugins/modules/scaleway_mnq_namespace.py rename to plugins/modules/scaleway_mnq_v1alpha1_namespace.py index 3938cf8..46e1554 100644 --- a/plugins/modules/scaleway_mnq_namespace.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_mnq_namespace -short_description: Manage Scaleway mnq's namespace +module: scaleway_mnq_v1alpha1_namespace +short_description: Manage Scaleway mnq_v1alpha1's namespace description: - - This module can be used to manage Scaleway mnq's namespace. + - This module can be used to manage Scaleway mnq_v1alpha1's namespace. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - namespace_id: - description: namespace_id + id: + description: id type: str required: false region: @@ -49,7 +49,7 @@ protocol: description: protocol type: str - required: true + required: false choices: - unknown - nats @@ -62,10 +62,9 @@ EXAMPLES = r""" - name: Create a namespace - scaleway.scaleway.scaleway_mnq_namespace: + scaleway.scaleway.scaleway_mnq_v1alpha1_namespace: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" - protocol: "aaaaaa" """ RETURN = r""" @@ -109,9 +108,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_namespace(namespace_id=id) + resource = api.get_namespace(namespace_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -132,30 +131,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_namespace(namespace_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_namespaces_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No namespace found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one namespace found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_namespace( + namespace_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_namespace(namespace_id=resource.id, region=module.params["region"]) + api.delete_namespace( + namespace_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"mnq's namespace {resource.name} ({resource.id}) deleted", + msg=f"mnq_v1alpha1's namespace {resource.name} ({resource.id}) deleted", ) @@ -189,7 +185,7 @@ def main() -> None: ), protocol=dict( type="str", - required=True, + required=False, choices=["unknown", "nats", "sqs_sns"], ), project_id=dict( diff --git a/plugins/modules/scaleway_rdb_database_backup.py b/plugins/modules/scaleway_rdb_v1_database_backup.py similarity index 81% rename from plugins/modules/scaleway_rdb_database_backup.py rename to plugins/modules/scaleway_rdb_v1_database_backup.py index 8968f0a..fc4d5a0 100644 --- a/plugins/modules/scaleway_rdb_database_backup.py +++ b/plugins/modules/scaleway_rdb_v1_database_backup.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_rdb_database_backup -short_description: Manage Scaleway rdb's database_backup +module: scaleway_rdb_v1_database_backup +short_description: Manage Scaleway rdb_v1's database_backup description: - - This module can be used to manage Scaleway rdb's database_backup. + - This module can be used to manage Scaleway rdb_v1's database_backup. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - database_backup_id: - description: database_backup_id + id: + description: id type: str required: false instance_id: @@ -62,7 +62,7 @@ EXAMPLES = r""" - name: Create a database_backup - scaleway.scaleway.scaleway_rdb_database_backup: + scaleway.scaleway.scaleway_rdb_v1_database_backup: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" instance_id: "aaaaaa" @@ -105,7 +105,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.rdb.v1 import RdbV1API HAS_SCALEWAY_SDK = True @@ -116,9 +116,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_database_backup(database_backup_id=id) + resource = api.get_database_backup(database_backup_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -132,9 +132,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_database_backup(**not_none_params) - resource = api.wait_for_database_backup( - database_backup_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -142,16 +139,17 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_database_backup( - database_backup_id=id, region=module.params["region"] + database_backup_id=resource_id, + region=module.params["region"], ) - elif name is not None: + elif module.params.get("name", None) is not None: resources = api.list_database_backups_all( - name=name, region=module.params["region"] + name=module.params["name"], + region=module.params["region"], ) if len(resources) == 0: module.exit_json(msg="No database_backup found with name {name}") @@ -166,20 +164,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_database_backup( - database_backup_id=resource.id, region=module.params["region"] + database_backup_id=resource.id, + region=resource.region, ) - try: - api.wait_for_database_backup( - database_backup_id=resource.id, region=module.params["region"] - ) - except ScalewayException as e: - if e.status_code != 404: - raise e - module.exit_json( changed=True, - msg=f"rdb's database_backup {resource.name} ({resource.id}) deleted", + msg=f"rdb_v1's database_backup {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_rdb_endpoint.py b/plugins/modules/scaleway_rdb_v1_endpoint.py similarity index 80% rename from plugins/modules/scaleway_rdb_endpoint.py rename to plugins/modules/scaleway_rdb_v1_endpoint.py index b259706..ca2db9c 100644 --- a/plugins/modules/scaleway_rdb_endpoint.py +++ b/plugins/modules/scaleway_rdb_v1_endpoint.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_rdb_endpoint -short_description: Manage Scaleway rdb's endpoint +module: scaleway_rdb_v1_endpoint +short_description: Manage Scaleway rdb_v1's endpoint description: - - This module can be used to manage Scaleway rdb's endpoint. + - This module can be used to manage Scaleway rdb_v1's endpoint. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - endpoint_id: - description: endpoint_id + id: + description: id type: str required: false instance_id: @@ -54,7 +54,7 @@ EXAMPLES = r""" - name: Create a endpoint - scaleway.scaleway.scaleway_rdb_endpoint: + scaleway.scaleway.scaleway_rdb_v1_endpoint: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" instance_id: "aaaaaa" @@ -107,9 +107,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_endpoint(endpoint_id=id) + resource = api.get_endpoint(endpoint_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -130,30 +130,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_endpoint(endpoint_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_endpoints_all(name=name, region=module.params["region"]) - if len(resources) == 0: - module.exit_json(msg="No endpoint found with name {name}") - elif len(resources) > 1: - module.exit_json(msg="More than one endpoint found with name {name}") - else: - resource = resources[0] + if resource_id is not None: + resource = api.get_endpoint( + endpoint_id=resource_id, + region=module.params["region"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_endpoint(endpoint_id=resource.id, region=module.params["region"]) + api.delete_endpoint( + endpoint_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"rdb's endpoint {resource.name} ({resource.id}) deleted", + msg=f"rdb_v1's endpoint {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_rdb_instance.py b/plugins/modules/scaleway_rdb_v1_instance.py similarity index 87% rename from plugins/modules/scaleway_rdb_instance.py rename to plugins/modules/scaleway_rdb_v1_instance.py index c7d9df3..1890280 100644 --- a/plugins/modules/scaleway_rdb_instance.py +++ b/plugins/modules/scaleway_rdb_v1_instance.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_rdb_instance -short_description: Manage Scaleway rdb's instance +module: scaleway_rdb_v1_instance +short_description: Manage Scaleway rdb_v1's instance description: - - This module can be used to manage Scaleway rdb's instance. + - This module can be used to manage Scaleway rdb_v1's instance. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - instance_id: - description: instance_id + id: + description: id type: str required: false engine: @@ -112,7 +112,7 @@ EXAMPLES = r""" - name: Create a instance - scaleway.scaleway.scaleway_rdb_instance: + scaleway.scaleway.scaleway_rdb_v1_instance: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" engine: "aaaaaa" @@ -192,7 +192,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.rdb.v1 import RdbV1API HAS_SCALEWAY_SDK = True @@ -203,9 +203,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_instance(instance_id=id) + resource = api.get_instance(instance_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -219,9 +219,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_instance(**not_none_params) - resource = api.wait_for_instance( - instance_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -229,13 +226,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_instance(instance_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_instances_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_instance( + instance_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_instances_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No instance found with name {name}") elif len(resources) > 1: @@ -248,17 +250,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_instance(instance_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_instance(instance_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_instance( + instance_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"rdb's instance {resource.name} ({resource.id}) deleted", + msg=f"rdb_v1's instance {resource.name} ({resource.id}) deleted", ) @@ -339,17 +338,14 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), init_settings=dict( type="list", required=False, - elements="str", ), init_endpoints=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_rdb_read_replica.py b/plugins/modules/scaleway_rdb_v1_read_replica.py similarity index 80% rename from plugins/modules/scaleway_rdb_read_replica.py rename to plugins/modules/scaleway_rdb_v1_read_replica.py index 4784e98..1956f1b 100644 --- a/plugins/modules/scaleway_rdb_read_replica.py +++ b/plugins/modules/scaleway_rdb_v1_read_replica.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_rdb_read_replica -short_description: Manage Scaleway rdb's read_replica +module: scaleway_rdb_v1_read_replica +short_description: Manage Scaleway rdb_v1's read_replica description: - - This module can be used to manage Scaleway rdb's read_replica. + - This module can be used to manage Scaleway rdb_v1's read_replica. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - read_replica_id: - description: read_replica_id + id: + description: id type: str required: false instance_id: @@ -51,11 +51,15 @@ type: list elements: str required: false + same_zone: + description: same_zone + type: bool + required: false """ EXAMPLES = r""" - name: Create a read_replica - scaleway.scaleway.scaleway_rdb_read_replica: + scaleway.scaleway.scaleway_rdb_v1_read_replica: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" instance_id: "aaaaaa" @@ -74,6 +78,7 @@ - bbbbbb status: provisioning region: fr-par + same_zone: true """ from ansible.module_utils.basic import ( @@ -89,7 +94,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.rdb.v1 import RdbV1API HAS_SCALEWAY_SDK = True @@ -100,9 +105,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_read_replica(read_replica_id=id) + resource = api.get_read_replica(read_replica_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -116,9 +121,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_read_replica(**not_none_params) - resource = api.wait_for_read_replica( - read_replica_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -126,11 +128,12 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_read_replica( - read_replica_id=id, region=module.params["region"] + read_replica_id=resource_id, + region=module.params["region"], ) else: module.fail_json(msg="id is required") @@ -138,19 +141,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_read_replica(read_replica_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_read_replica( - read_replica_id=resource.id, region=module.params["region"] - ) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_read_replica( + read_replica_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"rdb's read_replica {resource.id} deleted", + msg=f"rdb_v1's read_replica {resource.id} deleted", ) @@ -185,7 +183,10 @@ def main() -> None: endpoint_spec=dict( type="list", required=False, - elements="str", + ), + same_zone=dict( + type="bool", + required=False, ), ) diff --git a/plugins/modules/scaleway_rdb_snapshot.py b/plugins/modules/scaleway_rdb_v1_snapshot.py similarity index 81% rename from plugins/modules/scaleway_rdb_snapshot.py rename to plugins/modules/scaleway_rdb_v1_snapshot.py index 7352c54..a7f7346 100644 --- a/plugins/modules/scaleway_rdb_snapshot.py +++ b/plugins/modules/scaleway_rdb_v1_snapshot.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_rdb_snapshot -short_description: Manage Scaleway rdb's snapshot +module: scaleway_rdb_v1_snapshot +short_description: Manage Scaleway rdb_v1's snapshot description: - - This module can be used to manage Scaleway rdb's snapshot. + - This module can be used to manage Scaleway rdb_v1's snapshot. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - snapshot_id: - description: snapshot_id + id: + description: id type: str required: false instance_id: @@ -58,7 +58,7 @@ EXAMPLES = r""" - name: Create a snapshot - scaleway.scaleway.scaleway_rdb_snapshot: + scaleway.scaleway.scaleway_rdb_v1_snapshot: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" instance_id: "aaaaaa" @@ -97,7 +97,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.rdb.v1 import RdbV1API HAS_SCALEWAY_SDK = True @@ -108,9 +108,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_snapshot(snapshot_id=id) + resource = api.get_snapshot(snapshot_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -124,9 +124,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_snapshot(**not_none_params) - resource = api.wait_for_snapshot( - snapshot_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -134,13 +131,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_snapshot(snapshot_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_snapshots_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_snapshot( + snapshot_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_snapshots_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No snapshot found with name {name}") elif len(resources) > 1: @@ -153,17 +155,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_snapshot(snapshot_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_snapshot(snapshot_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_snapshot( + snapshot_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"rdb's snapshot {resource.name} ({resource.id}) deleted", + msg=f"rdb_v1's snapshot {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_redis_cluster.py b/plugins/modules/scaleway_redis_v1_cluster.py similarity index 84% rename from plugins/modules/scaleway_redis_cluster.py rename to plugins/modules/scaleway_redis_v1_cluster.py index 0b5b5c5..6b39e8d 100644 --- a/plugins/modules/scaleway_redis_cluster.py +++ b/plugins/modules/scaleway_redis_v1_cluster.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_redis_cluster -short_description: Manage Scaleway redis's cluster +module: scaleway_redis_v1_cluster +short_description: Manage Scaleway redis_v1's cluster description: - - This module can be used to manage Scaleway redis's cluster. + - This module can be used to manage Scaleway redis_v1's cluster. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - cluster_id: - description: cluster_id + id: + description: id type: str required: false version: @@ -94,7 +94,7 @@ EXAMPLES = r""" - name: Create a cluster - scaleway.scaleway.scaleway_redis_cluster: + scaleway.scaleway.scaleway_redis_v1_cluster: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" version: "aaaaaa" @@ -153,7 +153,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.redis.v1 import RedisV1API HAS_SCALEWAY_SDK = True @@ -164,9 +164,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RedisV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_cluster(cluster_id=id) + resource = api.get_cluster(cluster_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -180,9 +180,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_cluster(**not_none_params) - resource = api.wait_for_cluster( - cluster_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -190,13 +187,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RedisV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_cluster(cluster_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_clusters_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_cluster( + cluster_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_clusters_all( + name=module.params["name"], + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No cluster found with name {name}") elif len(resources) > 1: @@ -209,17 +211,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_cluster(cluster_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_cluster(cluster_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_cluster( + cluster_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"redis's cluster {resource.name} ({resource.id}) deleted", + msg=f"redis_v1's cluster {resource.name} ({resource.id}) deleted", ) @@ -278,7 +277,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), cluster_size=dict( type="int", @@ -287,17 +285,14 @@ def main() -> None: acl_rules=dict( type="list", required=False, - elements="str", ), endpoints=dict( type="list", required=False, - elements="str", ), cluster_settings=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_registry_namespace.py b/plugins/modules/scaleway_registry_v1_namespace.py similarity index 82% rename from plugins/modules/scaleway_registry_namespace.py rename to plugins/modules/scaleway_registry_v1_namespace.py index 938d3e5..e97731f 100644 --- a/plugins/modules/scaleway_registry_namespace.py +++ b/plugins/modules/scaleway_registry_v1_namespace.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_registry_namespace -short_description: Manage Scaleway registry's namespace +module: scaleway_registry_v1_namespace +short_description: Manage Scaleway registry_v1's namespace description: - - This module can be used to manage Scaleway registry's namespace. + - This module can be used to manage Scaleway registry_v1's namespace. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - namespace_id: - description: namespace_id + id: + description: id type: str required: false description: @@ -66,7 +66,7 @@ EXAMPLES = r""" - name: Create a namespace - scaleway.scaleway.scaleway_registry_namespace: + scaleway.scaleway.scaleway_registry_v1_namespace: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" description: "aaaaaa" @@ -109,7 +109,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.registry.v1 import RegistryV1API HAS_SCALEWAY_SDK = True @@ -120,9 +120,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RegistryV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_namespace(namespace_id=id) + resource = api.get_namespace(namespace_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -136,9 +136,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_namespace(**not_none_params) - resource = api.wait_for_namespace( - namespace_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -146,13 +143,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = RegistryV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_namespace(namespace_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_namespaces_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_namespace( + namespace_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_namespaces_all( + name=module.params["name"], + region=module.params["region"], + ) if len(resources) == 0: module.exit_json(msg="No namespace found with name {name}") elif len(resources) > 1: @@ -165,17 +167,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_namespace(namespace_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_namespace(namespace_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_namespace( + namespace_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"registry's namespace {resource.name} ({resource.id}) deleted", + msg=f"registry_v1's namespace {resource.name} ({resource.id}) deleted", ) diff --git a/plugins/modules/scaleway_secret_v1alpha1_secret.py b/plugins/modules/scaleway_secret_v1alpha1_secret.py new file mode 100644 index 0000000..59194f5 --- /dev/null +++ b/plugins/modules/scaleway_secret_v1alpha1_secret.py @@ -0,0 +1,246 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_secret_v1alpha1_secret +short_description: Manage Scaleway secret_v1alpha1's secret +description: + - This module can be used to manage Scaleway secret_v1alpha1's secret. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + name: + description: name + type: str + required: true + type_: + description: type_ + type: str + required: true + choices: + - unknown_secret_type + - opaque + - network_edge_certificate + region: + description: region + type: str + required: false + choices: + - fr-par + - nl-ams + - pl-waw + project_id: + description: project_id + type: str + required: false + tags: + description: tags + type: list + elements: str + required: false + description: + description: description + type: str + required: false +""" + +EXAMPLES = r""" +- name: Create a secret + scaleway.scaleway.scaleway_secret_v1alpha1_secret: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" + name: "aaaaaa" + type_: "aaaaaa" +""" + +RETURN = r""" +--- +secret: + description: The secret information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + project_id: 00000000-0000-0000-0000-000000000000 + name: "aaaaaa" + status: ready + created_at: "aaaaaa" + updated_at: "aaaaaa" + tags: + - aaaaaa + - bbbbbb + version_count: 3 + description: "aaaaaa" + is_managed: true + type_: opaque + region: fr-par +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.secret.v1alpha1 import SecretV1Alpha1API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = SecretV1Alpha1API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_secret(secret_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_secret(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = SecretV1Alpha1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_secret( + secret_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_secrets_all( + name=module.params["name"], + region=module.params["region"], + ) + if len(resources) == 0: + module.exit_json(msg="No secret found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one secret found with name {name}") + else: + resource = resources[0] + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_secret( + secret_id=resource.id, + region=resource.region, + ) + + module.exit_json( + changed=True, + msg=f"secret_v1alpha1's secret {resource.name} ({resource.id}) deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + secret_id=dict(type="str", no_log=True), + name=dict( + type="str", + required=True, + ), + type_=dict( + type="str", + required=True, + choices=["unknown_secret_type", "opaque", "network_edge_certificate"], + ), + region=dict( + type="str", + required=False, + choices=["fr-par", "nl-ams", "pl-waw"], + ), + project_id=dict( + type="str", + required=False, + ), + tags=dict( + type="list", + required=False, + ), + description=dict( + type="str", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + required_one_of=(["secret_id", "name"],), + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() diff --git a/plugins/modules/scaleway_secret_version.py b/plugins/modules/scaleway_secret_version.py deleted file mode 100644 index 6d0dda3..0000000 --- a/plugins/modules/scaleway_secret_version.py +++ /dev/null @@ -1,389 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright: (c) 2023, Scaleway -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type - -DOCUMENTATION = r""" ---- -module: scaleway_secret_version -short_description: Manage Scaleway secret's secret version -description: - - This module can be used to manage Scaleway secret's secret version. -version_added: "2.1.0" -author: - - Nathanael Demacon (@quantumsheep) -extends_documentation_fragment: - - scaleway.scaleway.scaleway - - scaleway.scaleway.scaleway_waitable_resource -requirements: - - scaleway >= 0.6.0 -options: - state: - description: - - Indicate desired state of the target. - - C(present) will create a new secret's version. If the secret does not exist, it will be created. - - C(absent) will delete the secret version, if it exists. - - C(disable) will disable the secret version, if it exists. - - C(enable) will enable the secret version, if it exists. - - C(access) will access the secret version, if it exists. - default: present - choices: ["present", "absent", "disable", "enable", "access"] - type: str - secret_id: - description: secret_id - type: str - required: false - name: - description: secret's name - type: str - required: true - region: - description: region - type: str - required: false - choices: - - fr-par - - nl-ams - - pl-waw - project_id: - description: project_id - type: str - required: false - disable_previous: - description: when creating a new version, disable the previous version - type: bool - required: false - destroy_previous: - description: when creating a new version, destroy the previous version - type: bool - required: false - revision: - description: revision - type: str - required: false - tags: - description: tags - type: list - elements: str - required: false - description: - description: description - type: str - required: false - data: - description: the secret value - type: str - required: false -""" - -EXAMPLES = r""" -- name: Create a version of the secret and disable the previous version - scaleway.scaleway.scaleway_secret_version: - access_key: "{{ scw_access_key }}" - secret_key: "{{ scw_secret_key }}" - project_id: "{{ scw_project_id }}" - region: "{{ scw_region }}" - name: "aaaaaa" - state: "present" - disable_previous: true - data: "{{ data }}" - -- name: access the latest version of the secret - scaleway.scaleway.scaleway_secret_access: - access_key: "{{ scw_access_key }}" - secret_key: "{{ scw_secret_key }}" - project_id: "{{ scw_project_id }}" - region: "{{ scw_region }}" - name: "aaaaaa" - register: data -""" - -RETURN = r""" ---- -secret_version: - description: The secret version data - returned: when I(state=present) - type: dict - sample: - id: 00000000-0000-0000-0000-000000000000 - project_id: 00000000-0000-0000-0000-000000000000 - name: "aaaaaa" - status: ready - created_at: "1970-01-01T00:00:00.000000+00:00" - updated_at: "1970-01-01T00:00:00.000000+00:00" - tags: - - aaaaaa - - bbbbbb - region: fr-par - version_count: 3 - description: "foobar" - -secret_data: - description: The value of secret version data - returned: when I(state=access) - type: dict - sample: - data: "my_secret_data" -""" - -import base64 - -from ansible.module_utils.basic import ( - AnsibleModule, - missing_required_lib, -) -from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( - scaleway_argument_spec, - scaleway_waitable_resource_argument_spec, - scaleway_get_client_from_module, - scaleway_pop_client_params, - scaleway_pop_waitable_resource_params, -) - -try: - from scaleway import Client - from scaleway.secret.v1alpha1 import SecretV1Alpha1API - from scaleway_core.api import ScalewayException - - HAS_SCALEWAY_SDK = True -except ImportError: - HAS_SCALEWAY_SDK = False - - -def create(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) - region = module.params.pop("region", None) - project_id = module.params.pop("project_id", None) - name = module.params.pop("name", None) - id = module.params.pop("id", None) - - data = module.params.pop("data", None).encode() - if data is not None: - data = base64.b64encode(data).decode() - - not_none_params = { - key: value for key, value in module.params.items() if value is not None - } - - if id is not None: - secret = api.get_secret(secret_id=id) - secret_version = api.create_secret_version( - secret_id=id, - region=region, - data=data, - **not_none_params, - ) - - if module.check_mode: - module.exit_json(changed=False) - - module.exit_json(changed=False, data=secret) - elif name is not None: - try: - secret = api.get_secret_by_name(secret_name=name, region=region) - except ScalewayException as exc: - if exc.status_code == 404: - secret = api.create_secret( - name=name, project_id=project_id, region=region - ) - else: - raise exc - secret_version = api.create_secret_version( - secret_id=secret.id, - region=region, - data=data, - **not_none_params, - ) - if module.check_mode: - module.exit_json(changed=True) - - module.exit_json( - changed=True, - msg=f"secret {secret.name} ({secret.id}) revision { secret_version.revision }]\ - has been created", - data=secret.__dict__, - ) - - -def delete(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - region = module.params.pop("region", None) - revision = module.params.pop("revision", None) - - if id is not None: - secret = api.get_secret(secret_id=id, region=region) - elif name is not None: - secret = api.get_secret_by_name(secret_name=name, region=region) - else: - module.fail_json(msg="id is required") - - if module.check_mode: - module.exit_json(changed=True) - - api.destroy_secret_version(secret_id=secret.id, region=region, revision=revision) - - module.exit_json( - changed=True, - msg=f"secret's {secret.name} ({secret.id}) revision{ revision } has been deleted", - ) - - -def access(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - region = module.params.pop("region", None) - revision = module.params.pop("revision", None) - if id is not None: - secret = api.get_secret(secret_id=id, region=region) - - if module.check_mode: - module.exit_json(changed=False) - else: - secret = api.get_secret_by_name(secret_name=name, region=region) - - revision = "latest_enabled" if revision is None else revision - secret_version = api.access_secret_version( - secret_id=secret.id, revision=revision, region=region - ) - data = base64.b64decode(secret_version.data) - if module.check_mode: - module.exit_json(changed=True) - module.exit_json(changed=True, data=data) - - -def enable(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) - region = module.params.pop("region", None) - project_id = module.params.pop("project_id", None) - name = module.params.pop("name", None) - id = module.params.pop("id", None) - revision = module.params.pop("revision", None) - - if id is not None: - secret = api.get_secret(secret_id=id) - elif name is not None: - secret = api.get_secret_by_name(secret_name=name, region=region) - api.enable_secret_version(secret_id=secret.id, region=region, revision=revision) - if module.check_mode: - module.exit_json(changed=True) - - module.exit_json( - changed=True, - msg=f"secret's secret {secret.name} ({secret.id}) revision {revision } has been disabled", - data=secret.__dict__, - ) - - -def disable(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) - - id = module.params.pop("id", None) - name = module.params.pop("name", None) - region = module.params.pop("region", None) - revision = module.params.pop("revision", None) - - if id is not None: - secret = api.get_secret(secret_id=id, region=region) - elif name is not None: - secret = api.get_secret_by_name(secret_name=name, region=region) - else: - module.fail_json(msg="id is required") - - if module.check_mode: - module.exit_json(changed=True) - - api.disable_secret_version(secret_id=secret.id, region=region, revision=revision) - - module.exit_json( - changed=True, - msg=f"secret's secret {secret.name} ({secret.id}) revision { revision } has been disabled", - ) - - -def core(module: AnsibleModule) -> None: - client = scaleway_get_client_from_module(module) - - state = module.params.pop("state") - scaleway_pop_client_params(module) - scaleway_pop_waitable_resource_params(module) - - if state == "present": - create(module, client) - elif state == "absent": - delete(module, client) - elif state == "enable": - enable(module, client) - elif state == "disable": - disable(module, client) - elif state == "access": - access(module, client) - - -def main() -> None: - argument_spec = scaleway_argument_spec() - argument_spec.update(scaleway_waitable_resource_argument_spec()) - argument_spec.update( - state=dict( - type="str", - default="present", - choices=["absent", "present", "enable", "disable", "access"], - ), - secret_id=dict(type="str", no_log=True), - name=dict( - type="str", - required=True, - ), - region=dict( - type="str", - required=False, - choices=["fr-par", "nl-ams", "pl-waw"], - ), - project_id=dict( - type="str", - required=False, - ), - tags=dict( - type="list", - required=False, - elements="str", - ), - description=dict( - type="str", - required=False, - ), - destroy_previous=dict(type="bool", required=False), - disable_previous=dict(type="bool", required=False), - data=dict( - type="str", - required=False, - # no_log=True - ), - revision=dict( - type="str", - required=False, - ), - ) - - module = AnsibleModule( - argument_spec=argument_spec, - required_one_of=(["secret_id", "name"],), - supports_check_mode=True, - ) - - if not HAS_SCALEWAY_SDK: - module.fail_json(msg=missing_required_lib("scaleway")) - - core(module) - - -if __name__ == "__main__": - main() diff --git a/plugins/modules/scaleway_test_v1_human.py b/plugins/modules/scaleway_test_v1_human.py new file mode 100644 index 0000000..7d1b93a --- /dev/null +++ b/plugins/modules/scaleway_test_v1_human.py @@ -0,0 +1,281 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_test_v1_human +short_description: Manage Scaleway test_v1's human +description: + - This module can be used to manage Scaleway test_v1's human. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + height: + description: height + type: float + required: true + shoe_size: + description: shoe_size + type: float + required: true + altitude_in_meter: + description: altitude_in_meter + type: int + required: true + altitude_in_millimeter: + description: altitude_in_millimeter + type: int + required: true + fingers_count: + description: fingers_count + type: int + required: true + hair_count: + description: hair_count + type: int + required: true + is_happy: + description: is_happy + type: bool + required: true + eyes_color: + description: eyes_color + type: str + required: true + choices: + - unknown + - amber + - blue + - brown + - gray + - green + - hazel + - red + - violet + name: + description: name + type: str + required: true + organization_id: + description: organization_id + type: str + required: false + project_id: + description: project_id + type: str + required: false +""" + +EXAMPLES = r""" +- name: Create a human + scaleway.scaleway.scaleway_test_v1_human: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" + height: "aaaaaa" + shoe_size: "aaaaaa" + altitude_in_meter: "aaaaaa" + altitude_in_millimeter: "aaaaaa" + fingers_count: "aaaaaa" + hair_count: "aaaaaa" + is_happy: true + eyes_color: "aaaaaa" + name: "aaaaaa" +""" + +RETURN = r""" +--- +human: + description: The human information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + organization_id: 00000000-0000-0000-0000-000000000000 + created_at: "aaaaaa" + updated_at: "aaaaaa" + height: 3.14 + shoe_size: 3.14 + altitude_in_meter: 3 + altitude_in_millimeter: 3 + fingers_count: 3 + hair_count: 3 + is_happy: true + eyes_color: amber + status: stopped + name: "aaaaaa" + project_id: 00000000-0000-0000-0000-000000000000 +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.test.v1 import TestV1API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = TestV1API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_human(human_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_human(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = TestV1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_human( + human_id=resource_id, + ) + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_human( + human_id=resource.id, + ) + + module.exit_json( + changed=True, + msg=f"test_v1's human {resource.name} ({resource.id}) deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + human_id=dict(type="str"), + height=dict( + type="float", + required=True, + ), + shoe_size=dict( + type="float", + required=True, + ), + altitude_in_meter=dict( + type="int", + required=True, + ), + altitude_in_millimeter=dict( + type="int", + required=True, + ), + fingers_count=dict( + type="int", + required=True, + ), + hair_count=dict( + type="int", + required=True, + ), + is_happy=dict( + type="bool", + required=True, + ), + eyes_color=dict( + type="str", + required=True, + choices=["unknown", "amber", "blue", "brown", "gray", "green", "hazel", "red", "violet"], + ), + name=dict( + type="str", + required=True, + ), + organization_id=dict( + type="str", + required=False, + ), + project_id=dict( + type="str", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + required_one_of=(["human_id", "name"],), + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() diff --git a/plugins/modules/scaleway_vpc_private_network.py b/plugins/modules/scaleway_vpc_v1_private_network.py similarity index 85% rename from plugins/modules/scaleway_vpc_private_network.py rename to plugins/modules/scaleway_vpc_v1_private_network.py index 650dd3f..df7b1a8 100644 --- a/plugins/modules/scaleway_vpc_private_network.py +++ b/plugins/modules/scaleway_vpc_v1_private_network.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpc_private_network -short_description: Manage Scaleway vpc's private_network +module: scaleway_vpc_v1_private_network +short_description: Manage Scaleway vpc_v1's private_network description: - - This module can be used to manage Scaleway vpc's private_network. + - This module can be used to manage Scaleway vpc_v1's private_network. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - private_network_id: - description: private_network_id + id: + description: id type: str required: false zone: @@ -60,7 +60,7 @@ EXAMPLES = r""" - name: Create a private_network - scaleway.scaleway.scaleway_vpc_private_network: + scaleway.scaleway.scaleway_vpc_v1_private_network: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -111,9 +111,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_private_network(private_network_id=id) + resource = api.get_private_network(private_network_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -134,16 +134,17 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_private_network( - private_network_id=id, region=module.params["region"] + private_network_id=resource_id, + zone=module.params["zone"], ) - elif name is not None: + elif module.params.get("name", None) is not None: resources = api.list_private_networks_all( - name=name, region=module.params["region"] + name=module.params["name"], + zone=module.params["zone"], ) if len(resources) == 0: module.exit_json(msg="No private_network found with name {name}") @@ -158,12 +159,13 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_private_network( - private_network_id=resource.id, region=module.params["region"] + private_network_id=resource.id, + zone=resource.zone, ) module.exit_json( changed=True, - msg=f"vpc's private_network {resource.name} ({resource.id}) deleted", + msg=f"vpc_v1's private_network {resource.name} ({resource.id}) deleted", ) @@ -201,12 +203,10 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), subnets=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_vpc_v2_private_network.py b/plugins/modules/scaleway_vpc_v2_private_network.py new file mode 100644 index 0000000..e384458 --- /dev/null +++ b/plugins/modules/scaleway_vpc_v2_private_network.py @@ -0,0 +1,241 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_vpc_v2_private_network +short_description: Manage Scaleway vpc_v2's private_network +description: + - This module can be used to manage Scaleway vpc_v2's private_network. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + region: + description: region + type: str + required: false + choices: + - fr-par + - nl-ams + - pl-waw + name: + description: name + type: str + required: false + project_id: + description: project_id + type: str + required: false + tags: + description: tags + type: list + elements: str + required: false + subnets: + description: subnets + type: list + elements: str + required: false + vpc_id: + description: vpc_id + type: str + required: false +""" + +EXAMPLES = r""" +- name: Create a private_network + scaleway.scaleway.scaleway_vpc_v2_private_network: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" +""" + +RETURN = r""" +--- +private_network: + description: The private_network information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + name: "aaaaaa" + organization_id: 00000000-0000-0000-0000-000000000000 + project_id: 00000000-0000-0000-0000-000000000000 + region: fr-par + tags: + - aaaaaa + - bbbbbb + created_at: "aaaaaa" + updated_at: "aaaaaa" + subnets: + - aaaaaa + - bbbbbb + vpc_id: 00000000-0000-0000-0000-000000000000 + dhcp_enabled: true +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.vpc.v2 import VpcV2API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = VpcV2API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_private_network(private_network_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_private_network(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = VpcV2API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_private_network( + private_network_id=resource_id, + region=module.params["region"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_private_networks_all( + name=module.params["name"], + region=module.params["region"], + ) + if len(resources) == 0: + module.exit_json(msg="No private_network found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one private_network found with name {name}") + else: + resource = resources[0] + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_private_network( + private_network_id=resource.id, + region=resource.region, + ) + + module.exit_json( + changed=True, + msg=f"vpc_v2's private_network {resource.name} ({resource.id}) deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + private_network_id=dict(type="str"), + region=dict( + type="str", + required=False, + choices=["fr-par", "nl-ams", "pl-waw"], + ), + name=dict( + type="str", + required=False, + ), + project_id=dict( + type="str", + required=False, + ), + tags=dict( + type="list", + required=False, + ), + subnets=dict( + type="list", + required=False, + ), + vpc_id=dict( + type="str", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + required_one_of=(["private_network_id", "name"],), + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() diff --git a/plugins/modules/scaleway_secret.py b/plugins/modules/scaleway_vpc_v2_vpc.py similarity index 72% rename from plugins/modules/scaleway_secret.py rename to plugins/modules/scaleway_vpc_v2_vpc.py index 88cb16c..f3ca647 100644 --- a/plugins/modules/scaleway_secret.py +++ b/plugins/modules/scaleway_vpc_v2_vpc.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_secret -short_description: Manage Scaleway secret's secret +module: scaleway_vpc_v2_vpc +short_description: Manage Scaleway vpc_v2's vpc description: - - This module can be used to manage Scaleway secret's secret. + - This module can be used to manage Scaleway vpc_v2's vpc. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,12 +30,12 @@ default: present choices: ["present", "absent"] type: str - secret_id: - description: secret_id + id: + description: id type: str required: false - name: - description: name + default_private_network_name: + description: default_private_network_name type: str required: true region: @@ -46,6 +46,10 @@ - fr-par - nl-ams - pl-waw + name: + description: name + type: str + required: false project_id: description: project_id type: str @@ -55,39 +59,35 @@ type: list elements: str required: false - description: - description: description - type: str - required: false """ EXAMPLES = r""" -- name: Create a secret - scaleway.scaleway.scaleway_secret: +- name: Create a vpc + scaleway.scaleway.scaleway_vpc_v2_vpc: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" - name: "aaaaaa" + default_private_network_name: "aaaaaa" """ RETURN = r""" --- -secret: - description: The secret information +vpc: + description: The vpc information returned: when I(state=present) type: dict sample: id: 00000000-0000-0000-0000-000000000000 - project_id: 00000000-0000-0000-0000-000000000000 name: "aaaaaa" - status: ready - created_at: "aaaaaa" - updated_at: "aaaaaa" + organization_id: 00000000-0000-0000-0000-000000000000 + project_id: 00000000-0000-0000-0000-000000000000 + region: fr-par tags: - aaaaaa - bbbbbb - region: fr-par - version_count: 3 - description: "aaaaaa" + is_default: true + created_at: "aaaaaa" + updated_at: "aaaaaa" + private_network_count: 3 """ from ansible.module_utils.basic import ( @@ -104,7 +104,7 @@ try: from scaleway import Client - from scaleway.secret.v1alpha1 import SecretV1Alpha1API + from scaleway.vpc.v2 import VpcV2API HAS_SCALEWAY_SDK = True except ImportError: @@ -112,11 +112,11 @@ def create(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) + api = VpcV2API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_secret(secret_id=id) + resource = api.get_vpc(vpc_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -127,34 +127,37 @@ def create(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) not_none_params = { - key: value - for key, value in module.params.items() if value is not None + key: value for key, value in module.params.items() if value is not None } - resource = api.create_secret(**not_none_params) + resource = api.create_vpc(**not_none_params) module.exit_json(changed=True, data=resource.__dict__) def delete(module: AnsibleModule, client: "Client") -> None: - api = SecretV1Alpha1API(client) + api = VpcV2API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - region = module.params.pop("region", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_secret(secret_id=id, region=region) - elif name is not None: - resource = api.get_secret_by_name(secret_name=name, region=region) + if resource_id is not None: + resource = api.get_vpc( + vpc_id=resource_id, + region=module.params["region"], + ) + else: + module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_secret(secret_id=resource.id, region=region) + api.delete_vpc( + vpc_id=resource.id, + region=resource.region, + ) module.exit_json( changed=True, - msg=f"secret's secret {resource.name} ({resource.id}) deleted", + msg=f"vpc_v2's vpc {resource.name} ({resource.id}) deleted", ) @@ -175,11 +178,9 @@ def main() -> None: argument_spec = scaleway_argument_spec() argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( - state=dict(type="str", - default="present", - choices=["absent", "present"]), - secret_id=dict(type="str", no_log=True), - name=dict( + state=dict(type="str", default="present", choices=["absent", "present"]), + vpc_id=dict(type="str"), + default_private_network_name=dict( type="str", required=True, ), @@ -188,6 +189,10 @@ def main() -> None: required=False, choices=["fr-par", "nl-ams", "pl-waw"], ), + name=dict( + type="str", + required=False, + ), project_id=dict( type="str", required=False, @@ -195,17 +200,12 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", - ), - description=dict( - type="str", - required=False, ), ) module = AnsibleModule( argument_spec=argument_spec, - required_one_of=(["secret_id", "name"], ), + required_one_of=(["vpc_id", "name"],), supports_check_mode=True, ) diff --git a/plugins/modules/scaleway_vpcgw_dhcp.py b/plugins/modules/scaleway_vpcgw_v1_dhcp.py similarity index 91% rename from plugins/modules/scaleway_vpcgw_dhcp.py rename to plugins/modules/scaleway_vpcgw_v1_dhcp.py index 91cdf3c..852562d 100644 --- a/plugins/modules/scaleway_vpcgw_dhcp.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_dhcp -short_description: Manage Scaleway vpcgw's dhcp +module: scaleway_vpcgw_v1_dhcp +short_description: Manage Scaleway vpcgw_v1's dhcp description: - - This module can be used to manage Scaleway vpcgw's dhcp. + - This module can be used to manage Scaleway vpcgw_v1's dhcp. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - dhcp_id: - description: dhcp_id + id: + description: id type: str required: false subnet: @@ -100,7 +100,7 @@ EXAMPLES = r""" - name: Create a dhcp - scaleway.scaleway.scaleway_vpcgw_dhcp: + scaleway.scaleway.scaleway_vpcgw_v1_dhcp: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" subnet: "aaaaaa" @@ -160,9 +160,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_dhcp(dhcp_id=id) + resource = api.get_dhcp(dhcp_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -183,21 +183,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_dhcp(dhcp_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_dhcp( + dhcp_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_dhcp(dhcp_id=resource.id, region=module.params["region"]) + api.delete_dhcp( + dhcp_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"vpcgw's dhcp {resource.id} deleted", + msg=f"vpcgw_v1's dhcp {resource.id} deleted", ) @@ -271,12 +277,10 @@ def main() -> None: dns_servers_override=dict( type="list", required=False, - elements="str", ), dns_search=dict( type="list", required=False, - elements="str", ), dns_local_name=dict( type="str", diff --git a/plugins/modules/scaleway_vpcgw_dhcp_entry.py b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py similarity index 85% rename from plugins/modules/scaleway_vpcgw_dhcp_entry.py rename to plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py index 9e09c1e..d9ffe9b 100644 --- a/plugins/modules/scaleway_vpcgw_dhcp_entry.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_dhcp_entry -short_description: Manage Scaleway vpcgw's dhcp_entry +module: scaleway_vpcgw_v1_dhcp_entry +short_description: Manage Scaleway vpcgw_v1's dhcp_entry description: - - This module can be used to manage Scaleway vpcgw's dhcp_entry. + - This module can be used to manage Scaleway vpcgw_v1's dhcp_entry. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - dhcp_entry_id: - description: dhcp_entry_id + id: + description: id type: str required: false gateway_network_id: @@ -54,7 +54,7 @@ EXAMPLES = r""" - name: Create a dhcp_entry - scaleway.scaleway.scaleway_vpcgw_dhcp_entry: + scaleway.scaleway.scaleway_vpcgw_v1_dhcp_entry: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" gateway_network_id: "aaaaaa" @@ -104,9 +104,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_dhcp_entry(dhcp_entry_id=id) + resource = api.get_dhcp_entry(dhcp_entry_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -127,21 +127,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_dhcp_entry(dhcp_entry_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_dhcp_entry( + dhcp_entry_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_dhcp_entry(dhcp_entry_id=resource.id, region=module.params["region"]) + api.delete_dhcp_entry( + dhcp_entry_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"vpcgw's dhcp_entry {resource.id} deleted", + msg=f"vpcgw_v1's dhcp_entry {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_vpcgw_gateway.py b/plugins/modules/scaleway_vpcgw_v1_gateway.py similarity index 84% rename from plugins/modules/scaleway_vpcgw_gateway.py rename to plugins/modules/scaleway_vpcgw_v1_gateway.py index bcc8122..cc17d5c 100644 --- a/plugins/modules/scaleway_vpcgw_gateway.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_gateway -short_description: Manage Scaleway vpcgw's gateway +module: scaleway_vpcgw_v1_gateway +short_description: Manage Scaleway vpcgw_v1's gateway description: - - This module can be used to manage Scaleway vpcgw's gateway. + - This module can be used to manage Scaleway vpcgw_v1's gateway. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - gateway_id: - description: gateway_id + id: + description: id type: str required: false type_: @@ -80,7 +80,7 @@ EXAMPLES = r""" - name: Create a gateway - scaleway.scaleway.scaleway_vpcgw_gateway: + scaleway.scaleway.scaleway_vpcgw_v1_gateway: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" type_: "aaaaaa" @@ -138,7 +138,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.vpcgw.v1 import VpcgwV1API HAS_SCALEWAY_SDK = True @@ -149,9 +149,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_gateway(gateway_id=id) + resource = api.get_gateway(gateway_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -165,9 +165,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_gateway(**not_none_params) - resource = api.wait_for_gateway( - gateway_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -175,13 +172,18 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) - name = module.params.pop("name", None) - - if id is not None: - resource = api.get_gateway(gateway_id=id, region=module.params["region"]) - elif name is not None: - resources = api.list_gateways_all(name=name, region=module.params["region"]) + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_gateway( + gateway_id=resource_id, + zone=module.params["zone"], + ) + elif module.params.get("name", None) is not None: + resources = api.list_gateways_all( + name=module.params["name"], + zone=module.params["zone"], + ) if len(resources) == 0: module.exit_json(msg="No gateway found with name {name}") elif len(resources) > 1: @@ -194,17 +196,15 @@ def delete(module: AnsibleModule, client: "Client") -> None: if module.check_mode: module.exit_json(changed=True) - api.delete_gateway(gateway_id=resource.id, region=module.params["region"]) - - try: - api.wait_for_gateway(gateway_id=resource.id, region=module.params["region"]) - except ScalewayException as e: - if e.status_code != 404: - raise e + api.delete_gateway( + gateway_id=resource.id, + cleanup_dhcp=resource.cleanup_dhcp, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"vpcgw's gateway {resource.name} ({resource.id}) deleted", + msg=f"vpcgw_v1's gateway {resource.name} ({resource.id}) deleted", ) @@ -254,12 +254,10 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), upstream_dns_servers=dict( type="list", required=False, - elements="str", ), ip_id=dict( type="str", diff --git a/plugins/modules/scaleway_vpcgw_gateway_network.py b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py similarity index 83% rename from plugins/modules/scaleway_vpcgw_gateway_network.py rename to plugins/modules/scaleway_vpcgw_v1_gateway_network.py index d86130b..8cf61e2 100644 --- a/plugins/modules/scaleway_vpcgw_gateway_network.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_gateway_network -short_description: Manage Scaleway vpcgw's gateway_network +module: scaleway_vpcgw_v1_gateway_network +short_description: Manage Scaleway vpcgw_v1's gateway_network description: - - This module can be used to manage Scaleway vpcgw's gateway_network. + - This module can be used to manage Scaleway vpcgw_v1's gateway_network. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - gateway_network_id: - description: gateway_network_id + id: + description: id type: str required: false gateway_id: @@ -54,6 +54,10 @@ description: dhcp_id type: str required: false + dhcp: + description: dhcp + type: dict + required: false address: description: address type: str @@ -66,7 +70,7 @@ EXAMPLES = r""" - name: Create a gateway_network - scaleway.scaleway.scaleway_vpcgw_gateway_network: + scaleway.scaleway.scaleway_vpcgw_v1_gateway_network: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" gateway_id: "aaaaaa" @@ -110,7 +114,7 @@ ) try: - from scaleway import Client, ScalewayException + from scaleway import Client from scaleway.vpcgw.v1 import VpcgwV1API HAS_SCALEWAY_SDK = True @@ -121,9 +125,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_gateway_network(gateway_network_id=id) + resource = api.get_gateway_network(gateway_network_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -137,9 +141,6 @@ def create(module: AnsibleModule, client: "Client") -> None: key: value for key, value in module.params.items() if value is not None } resource = api.create_gateway_network(**not_none_params) - resource = api.wait_for_gateway_network( - gateway_network_id=resource.id, region=module.params["region"] - ) module.exit_json(changed=True, data=resource.__dict__) @@ -147,11 +148,12 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: + if resource_id is not None: resource = api.get_gateway_network( - gateway_network_id=id, region=module.params["region"] + gateway_network_id=resource_id, + zone=module.params["zone"], ) else: module.fail_json(msg="id is required") @@ -160,20 +162,14 @@ def delete(module: AnsibleModule, client: "Client") -> None: module.exit_json(changed=True) api.delete_gateway_network( - gateway_network_id=resource.id, region=module.params["region"] + gateway_network_id=resource.id, + cleanup_dhcp=resource.cleanup_dhcp, + zone=resource.zone, ) - try: - api.wait_for_gateway_network( - gateway_network_id=resource.id, region=module.params["region"] - ) - except ScalewayException as e: - if e.status_code != 404: - raise e - module.exit_json( changed=True, - msg=f"vpcgw's gateway_network {resource.id} deleted", + msg=f"vpcgw_v1's gateway_network {resource.id} deleted", ) @@ -216,6 +212,10 @@ def main() -> None: type="str", required=False, ), + dhcp=dict( + type="dict", + required=False, + ), address=dict( type="str", required=False, diff --git a/plugins/modules/scaleway_vpcgw_ip.py b/plugins/modules/scaleway_vpcgw_v1_ip.py similarity index 86% rename from plugins/modules/scaleway_vpcgw_ip.py rename to plugins/modules/scaleway_vpcgw_v1_ip.py index 46ce88f..9da4b2e 100644 --- a/plugins/modules/scaleway_vpcgw_ip.py +++ b/plugins/modules/scaleway_vpcgw_v1_ip.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_ip -short_description: Manage Scaleway vpcgw's ip +module: scaleway_vpcgw_v1_ip +short_description: Manage Scaleway vpcgw_v1's ip description: - - This module can be used to manage Scaleway vpcgw's ip. + - This module can be used to manage Scaleway vpcgw_v1's ip. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - ip_id: - description: ip_id + id: + description: id type: str required: false zone: @@ -51,7 +51,7 @@ EXAMPLES = r""" - name: Create a ip - scaleway.scaleway.scaleway_vpcgw_ip: + scaleway.scaleway.scaleway_vpcgw_v1_ip: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" """ @@ -101,9 +101,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_ip(ip_id=id) + resource = api.get_ip(ip_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -124,21 +124,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_ip(ip_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_ip( + ip_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_ip(ip_id=resource.id, region=module.params["region"]) + api.delete_ip( + ip_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"vpcgw's ip {resource.id} deleted", + msg=f"vpcgw_v1's ip {resource.id} deleted", ) @@ -172,7 +178,6 @@ def main() -> None: tags=dict( type="list", required=False, - elements="str", ), ) diff --git a/plugins/modules/scaleway_vpcgw_pat_rule.py b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py similarity index 87% rename from plugins/modules/scaleway_vpcgw_pat_rule.py rename to plugins/modules/scaleway_vpcgw_v1_pat_rule.py index 6258f06..5f8885f 100644 --- a/plugins/modules/scaleway_vpcgw_pat_rule.py +++ b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py @@ -9,10 +9,10 @@ DOCUMENTATION = r""" --- -module: scaleway_vpcgw_pat_rule -short_description: Manage Scaleway vpcgw's pat_rule +module: scaleway_vpcgw_v1_pat_rule +short_description: Manage Scaleway vpcgw_v1's pat_rule description: - - This module can be used to manage Scaleway vpcgw's pat_rule. + - This module can be used to manage Scaleway vpcgw_v1's pat_rule. version_added: "2.1.0" author: - Nathanael Demacon (@quantumsheep) @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - pat_rule_id: - description: pat_rule_id + id: + description: id type: str required: false gateway_id: @@ -67,7 +67,7 @@ EXAMPLES = r""" - name: Create a pat_rule - scaleway.scaleway.scaleway_vpcgw_pat_rule: + scaleway.scaleway.scaleway_vpcgw_v1_pat_rule: access_key: "{{ scw_access_key }}" secret_key: "{{ scw_secret_key }}" gateway_id: "aaaaaa" @@ -119,9 +119,9 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) if id is not None: - resource = api.get_pat_rule(pat_rule_id=id) + resource = api.get_pat_rule(pat_rule_id=resource_id) if module.check_mode: module.exit_json(changed=False) @@ -142,21 +142,27 @@ def create(module: AnsibleModule, client: "Client") -> None: def delete(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - id = module.params.pop("id", None) + resource_id = module.params.pop("id", None) - if id is not None: - resource = api.get_pat_rule(pat_rule_id=id, region=module.params["region"]) + if resource_id is not None: + resource = api.get_pat_rule( + pat_rule_id=resource_id, + zone=module.params["zone"], + ) else: module.fail_json(msg="id is required") if module.check_mode: module.exit_json(changed=True) - api.delete_pat_rule(pat_rule_id=resource.id, region=module.params["region"]) + api.delete_pat_rule( + pat_rule_id=resource.id, + zone=resource.zone, + ) module.exit_json( changed=True, - msg=f"vpcgw's pat_rule {resource.id} deleted", + msg=f"vpcgw_v1's pat_rule {resource.id} deleted", ) diff --git a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py new file mode 100644 index 0000000..8e3f2fa --- /dev/null +++ b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py @@ -0,0 +1,247 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_webhosting_v1alpha1_hosting +short_description: Manage Scaleway webhosting_v1alpha1's hosting +description: + - This module can be used to manage Scaleway webhosting_v1alpha1's hosting. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + id: + description: id + type: str + required: false + offer_id: + description: offer_id + type: str + required: true + domain: + description: domain + type: str + required: true + region: + description: region + type: str + required: false + choices: + - fr-par + - nl-ams + - pl-waw + project_id: + description: project_id + type: str + required: false + email: + description: email + type: str + required: false + tags: + description: tags + type: list + elements: str + required: false + option_ids: + description: option_ids + type: list + elements: str + required: false +""" + +EXAMPLES = r""" +- name: Create a hosting + scaleway.scaleway.scaleway_webhosting_v1alpha1_hosting: + access_key: "{{ scw_access_key }}" + secret_key: "{{ scw_secret_key }}" + offer_id: "aaaaaa" + domain: "aaaaaa" +""" + +RETURN = r""" +--- +hosting: + description: The hosting information + returned: when I(state=present) + type: dict + sample: + id: 00000000-0000-0000-0000-000000000000 + organization_id: 00000000-0000-0000-0000-000000000000 + project_id: 00000000-0000-0000-0000-000000000000 + updated_at: "aaaaaa" + created_at: "aaaaaa" + status: delivering + platform_hostname: "aaaaaa" + platform_number: 3 + offer_id: 00000000-0000-0000-0000-000000000000 + offer_name: "aaaaaa" + domain: "aaaaaa" + tags: + - aaaaaa + - bbbbbb + options: + - aaaaaa + - bbbbbb + dns_status: valid + cpanel_urls: + aaaaaa: bbbbbb + cccccc: dddddd + username: "aaaaaa" + region: fr-par +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from scaleway.webhosting.v1alpha1 import WebhostingV1Alpha1API + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = WebhostingV1Alpha1API(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_hosting(hosting_id=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_hosting(**not_none_params) + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = WebhostingV1Alpha1API(client) + + resource_id = module.params.pop("id", None) + + if resource_id is not None: + resource = api.get_hosting( + hosting_id=resource_id, + region=module.params["region"], + ) + else: + module.fail_json(msg="id is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.delete_hosting( + hosting_id=resource.id, + region=resource.region, + ) + + module.exit_json( + changed=True, + msg=f"webhosting_v1alpha1's hosting {resource.id} deleted", + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + hosting_id=dict(type="str"), + offer_id=dict( + type="str", + required=True, + ), + domain=dict( + type="str", + required=True, + ), + region=dict( + type="str", + required=False, + choices=["fr-par", "nl-ams", "pl-waw"], + ), + project_id=dict( + type="str", + required=False, + ), + email=dict( + type="str", + required=False, + ), + tags=dict( + type="list", + required=False, + ), + option_ids=dict( + type="list", + required=False, + ), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() From 337d5e0f16f694d602352ba98830029b4e3d217b Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 16:31:53 +0200 Subject: [PATCH 02/19] chore: update runtime and integration test workflow --- .../workflows/ansible-test-integration.yml | 62 +-------- meta/runtime.yml | 124 +++++++++--------- 2 files changed, 67 insertions(+), 119 deletions(-) diff --git a/.github/workflows/ansible-test-integration.yml b/.github/workflows/ansible-test-integration.yml index 5fd71c6..8a2ef48 100644 --- a/.github/workflows/ansible-test-integration.yml +++ b/.github/workflows/ansible-test-integration.yml @@ -17,66 +17,8 @@ jobs: fail-fast: false max-parallel: 1 matrix: - module: - # - scaleway_account_project - # - scaleway_applesilicon_server - # - scaleway_baremetal_server - # - scaleway_container - # - scaleway_container_cron - # - scaleway_container_domain - # - scaleway_container_namespace - # - scaleway_container_token - # - scaleway_domain_ssl_certificate - # - scaleway_flexibleip_flexible_ip - # - scaleway_function - # - scaleway_function_cron - # - scaleway_function_domain - # - scaleway_function_namespace - # - scaleway_function_token - # - scaleway_function_trigger - # - scaleway_iam_api_key - # - scaleway_iam_application - # - scaleway_iam_group - # - scaleway_iam_policy - # - scaleway_iam_ssh_key - # - scaleway_instance_image - # - scaleway_instance_ip - # - scaleway_instance_placement_group - # - scaleway_instance_private_nic - # - scaleway_instance_security_group - # - scaleway_instance_security_group_rule - # - scaleway_instance_snapshot - # - scaleway_instance_volume - # - scaleway_iot_device - # - scaleway_iot_hub - # - scaleway_iot_network - # - scaleway_iot_route - # - scaleway_k8s_cluster - # - scaleway_k8s_pool - # - scaleway_lb - # - scaleway_lb_acl - # - scaleway_lb_backend - # - scaleway_lb_certificate - # - scaleway_lb_frontend - # - scaleway_lb_route - # - scaleway_lb_subscriber - # - scaleway_mnq_credential - # - scaleway_mnq_namespace - # - scaleway_rdb_database_backup - # - scaleway_rdb_endpoint - # - scaleway_rdb_instance - # - scaleway_rdb_read_replica - # - scaleway_rdb_snapshot - # - scaleway_redis_cluster - - scaleway_registry_namespace - # - scaleway_secret - # - scaleway_vpc_private_network - # - scaleway_vpcgw_dhcp - # - scaleway_vpcgw_dhcp_entry - # - scaleway_vpcgw_gateway - # - scaleway_vpcgw_gateway_network - # - scaleway_vpcgw_ip - # - scaleway_vpcgw_pat_rule + module: [] + # - scaleway_registry_v1_namespace steps: - name: Perform testing diff --git a/meta/runtime.yml b/meta/runtime.yml index 75476f7..f138410 100644 --- a/meta/runtime.yml +++ b/meta/runtime.yml @@ -2,62 +2,68 @@ requires_ansible: ">=2.9.10" action_groups: all: - - scaleway_account_project - - scaleway_applesilicon_server - - scaleway_baremetal_server - - scaleway_container - - scaleway_container_cron - - scaleway_container_domain - - scaleway_container_namespace - - scaleway_container_token - - scaleway_domain_ssl_certificate - - scaleway_flexibleip_flexible_ip - - scaleway_function - - scaleway_function_cron - - scaleway_function_domain - - scaleway_function_namespace - - scaleway_function_token - - scaleway_function_trigger - - scaleway_iam_api_key - - scaleway_iam_application - - scaleway_iam_group - - scaleway_iam_policy - - scaleway_iam_ssh_key - - scaleway_instance_image - - scaleway_instance_ip - - scaleway_instance_placement_group - - scaleway_instance_private_nic - - scaleway_instance_security_group - - scaleway_instance_security_group_rule - - scaleway_instance_snapshot - - scaleway_instance_volume - - scaleway_iot_device - - scaleway_iot_hub - - scaleway_iot_network - - scaleway_iot_route - - scaleway_k8s_cluster - - scaleway_k8s_pool - - scaleway_lb - - scaleway_lb_acl - - scaleway_lb_backend - - scaleway_lb_certificate - - scaleway_lb_frontend - - scaleway_lb_route - - scaleway_lb_subscriber - - scaleway_mnq_credential - - scaleway_mnq_namespace - - scaleway_rdb_database_backup - - scaleway_rdb_endpoint - - scaleway_rdb_instance - - scaleway_rdb_read_replica - - scaleway_rdb_snapshot - - scaleway_redis_cluster - - scaleway_registry_namespace - - scaleway_secret - - scaleway_vpc_private_network - - scaleway_vpcgw_dhcp - - scaleway_vpcgw_dhcp_entry - - scaleway_vpcgw_gateway - - scaleway_vpcgw_gateway_network - - scaleway_vpcgw_ip - - scaleway_vpcgw_pat_rule + - scaleway_account_v2_project + - scaleway_applesilicon_v1alpha1_server + - scaleway_baremetal_v1_server + - scaleway_cockpit_v1beta1_token + - scaleway_container_v1beta1_container + - scaleway_container_v1beta1_cron + - scaleway_container_v1beta1_domain + - scaleway_container_v1beta1_namespace + - scaleway_container_v1beta1_token + - scaleway_container_v1beta1_trigger + - scaleway_domain_v2beta1_ssl_certificate + - scaleway_flexibleip_v1alpha1_flexible_ip + - scaleway_function_v1beta1_cron + - scaleway_function_v1beta1_domain + - scaleway_function_v1beta1_function + - scaleway_function_v1beta1_namespace + - scaleway_function_v1beta1_token + - scaleway_function_v1beta1_trigger + - scaleway_iam_v1alpha1_api_key + - scaleway_iam_v1alpha1_application + - scaleway_iam_v1alpha1_group + - scaleway_iam_v1alpha1_policy + - scaleway_iam_v1alpha1_ssh_key + - scaleway_instance_v1_image + - scaleway_instance_v1_ip + - scaleway_instance_v1_placement_group + - scaleway_instance_v1_private_nic + - scaleway_instance_v1_security_group + - scaleway_instance_v1_security_group_rule + - scaleway_instance_v1_snapshot + - scaleway_instance_v1_volume + - scaleway_iot_v1_device + - scaleway_iot_v1_hub + - scaleway_iot_v1_network + - scaleway_iot_v1_route + - scaleway_k8s_v1_cluster + - scaleway_k8s_v1_pool + - scaleway_lb_v1_acl + - scaleway_lb_v1_backend + - scaleway_lb_v1_certificate + - scaleway_lb_v1_frontend + - scaleway_lb_v1_lb + - scaleway_lb_v1_route + - scaleway_lb_v1_subscriber + - scaleway_mnq_v1alpha1_credential + - scaleway_mnq_v1alpha1_namespace + - scaleway_rdb_v1_database_backup + - scaleway_rdb_v1_endpoint + - scaleway_rdb_v1_instance + - scaleway_rdb_v1_read_replica + - scaleway_rdb_v1_snapshot + - scaleway_redis_v1_cluster + - scaleway_registry_v1_namespace + - scaleway_secret_v1alpha1_secret + - scaleway_test_v1_human + - scaleway_vpc_v1_private_network + - scaleway_vpc_v2_private_network + - scaleway_vpc_v2_vpc + - scaleway_vpcgw_v1_dhcp + - scaleway_vpcgw_v1_dhcp_entry + - scaleway_vpcgw_v1_gateway + - scaleway_vpcgw_v1_gateway_network + - scaleway_vpcgw_v1_ip + - scaleway_vpcgw_v1_pat_rule + - scaleway_webhosting_v1alpha1_hosting \ No newline at end of file From 90cd24f7f598c533c7b8f9a581de6d7701f3c2cc Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 17:29:14 +0200 Subject: [PATCH 03/19] feat: add generator --- generator.py | 318 ++++++++++++++++++++++++++++++++++++ templates/module.py.jinja | 296 +++++++++++++++++++++++++++++++++ templates/runtime.yml.jinja | 7 + templates/test.yml.jinja | 57 +++++++ 4 files changed, 678 insertions(+) create mode 100644 generator.py create mode 100644 templates/module.py.jinja create mode 100644 templates/runtime.yml.jinja create mode 100644 templates/test.yml.jinja diff --git a/generator.py b/generator.py new file mode 100644 index 0000000..080ff86 --- /dev/null +++ b/generator.py @@ -0,0 +1,318 @@ +import importlib +import inspect +from dataclasses import fields +from datetime import datetime +from enum import Enum +from inspect import Parameter, isclass +import pkgutil +from types import FunctionType, NoneType +from typing import ( + Dict, + List, + Optional, + Type, + Union, + get_args, + get_origin, + get_type_hints, +) + +from jinja2 import Environment, FileSystemLoader, select_autoescape + +from scaleway import ALL_REGIONS, WaitForOptions + +import scaleway + + +class FieldTypeDescriptor: + name: str + choices: List[str] + + def __init__(self, field_type: type): + self.name = "???" + + if get_origin(field_type) == Union: + generic_args = get_args(field_type) + field_type = generic_args[0] + + self.name = "" + if field_type == str: + self.name = "str" + elif field_type == int: + self.name = "int" + elif field_type == bool: + self.name = "bool" + elif get_origin(field_type) is dict: + self.name = "dict" + elif get_origin(field_type) is list: + self.name = "list" + elif field_type == float: + self.name = "float" + elif field_type is datetime: + self.name = "str" + elif isclass(field_type): + if issubclass(field_type, Enum): + self.name = "str" + self.choices = [str(choice) for choice in field_type] + else: + self.name = "dict" + + if self.name == "": + raise Exception(f"Unknown type: {field_type}") + + +class FieldDescriptor: + name: str + type: FieldTypeDescriptor + required: bool + description: str + + def __init__(self, name: str, parameter: Parameter): + self.name = name + + if isinstance(parameter, Parameter): + self.type = FieldTypeDescriptor(parameter.annotation) + self.required = parameter.default == inspect.Parameter.empty + else: + self.type = FieldTypeDescriptor(parameter) + self.required = True + + self.description = "" + + if name == "region": + self.type.choices = ALL_REGIONS + + +class MethodDescriptor: + name: str + request_fields: List[FieldDescriptor] + response_fields: List[FieldDescriptor] + + def __init__(self, method: FunctionType): + self.name = method.__name__ + self.request_fields: List[FieldDescriptor] = [] + self.response_fields: List[FieldDescriptor] = [] + + signature = inspect.signature(method) + for name, parameter in signature.parameters.items(): + if name == "self": + continue + + if get_origin(parameter.annotation) is Union: + first_arg = get_args(parameter.annotation)[0] + if get_origin(first_arg) is WaitForOptions: + continue + + self.request_fields.append(FieldDescriptor(name, parameter)) + + return_type = method.__annotations__["return"] + if return_type != NoneType: + origin = get_origin(return_type) + if origin == list or origin == Union: + return_type = get_args(return_type)[0] + + hints = get_type_hints(return_type) + + for field in fields(return_type): + self.response_fields.append( + FieldDescriptor(field.name, hints[field.name]) + ) + + @property + def required_request_fields(self): + return [field for field in self.request_fields if field.required] + + def has_request_field(self, name: str) -> bool: + for field in self.request_fields: + if field.name == name: + return True + + return False + + def has_response_field(self, name: str) -> bool: + for field in self.response_fields: + if field.name == name: + return True + + return False + + +class APIDescriptor: + namespace: str + group: str + + api_class: Type[object] + + name: str + method_create: Optional[MethodDescriptor] + method_get: Optional[MethodDescriptor] + method_update: Optional[MethodDescriptor] + method_delete: Optional[MethodDescriptor] + method_list: Optional[MethodDescriptor] + method_wait_for: Optional[MethodDescriptor] + + request_id_field: Optional[FieldDescriptor] + response_id_field: Optional[FieldDescriptor] + + def __init__( + self, + api_class: Type[object], + namespace: str, + group: str, + methods: List[MethodDescriptor], + ): + self.api_class = api_class + self.namespace = namespace + self.group = group + self.name = f"{namespace}_{group}" if group != "" else namespace + + self.method_create = None + self.method_get = None + self.method_update = None + self.method_delete = None + self.method_list = None + self.method_wait_for = None + + for method in methods: + if method.name.startswith("create_"): + self.method_create = method + elif method.name.startswith("get_"): + self.method_get = method + elif method.name.startswith("update_"): + self.method_update = method + elif method.name.startswith("delete_"): + self.method_delete = method + elif method.name.startswith("list_"): + self.method_list = method + elif method.name.startswith("wait_for_"): + self.method_wait_for = method + + self.request_id_field = None + self.response_id_field = None + + method_with_id_field = ( + self.method_get or self.method_update or self.method_update + ) + if method_with_id_field is None: + raise Exception(f"Unable to find method with ID field for {self.name}") + + for field in method_with_id_field.request_fields: + if f"{group}_id" in field.name: + self.request_id_field = field + break + + for field in method_with_id_field.response_fields: + if f"id" in field.name: + self.response_id_field = field + break + + if self.request_id_field is None: + if len(method_with_id_field.request_fields) == 0: + raise Exception( + f"Unable to find request ID field for {self.name} (no request fields)" + ) + + self.request_id_field = method_with_id_field.request_fields[0] + + if self.response_id_field is None: + if len(method_with_id_field.response_fields) == 0: + raise Exception( + f"Unable to find response ID field for {self.name} (no response fields)" + ) + + self.response_id_field = method_with_id_field.response_fields[0] + + @property + def class_import_path(self) -> str: + return ".".join(self.api_class.__module__.split(".")[:-1]) + + @property + def class_name(self) -> str: + return self.api_class.__name__ + + +def get_api_descriptors(namespace: str, api_class: Type[object]) -> List[APIDescriptor]: + apis: List[APIDescriptor] = [] + + prefixes = ["create_", "get_", "update_", "delete_", "list_", "wait_for_"] + + groups: Dict[str, List[MethodDescriptor]] = {} + + for name, method in inspect.getmembers(api_class, predicate=inspect.isfunction): + for prefix in prefixes: + if not name.startswith(prefix): + continue + + parts = name.split("_", 1) + group = parts[1] + + if prefix == "list_": + if not group.endswith("_all"): + continue + + group = group.removesuffix("s_all") + + try: + method_descriptor = MethodDescriptor(method) + + if group not in groups: + groups[group] = [] + groups[group].append(method_descriptor) + except Exception as e: + print(f"Error processing method {name}: {e}") + + for group, methods in groups.items(): + try: + api = APIDescriptor(api_class, namespace, group, methods) + if ( + api.method_create is None + or api.method_get is None + or api.method_delete is None + ): + continue + apis.append(api) + except Exception as e: + print(f"Error processing API {namespace}.{group}: {e}") + + return apis + + +def main() -> None: + modules = pkgutil.iter_modules(scaleway.__path__) + apis: Dict[str, Type[object]] = {} + + for _, product, _ in modules: + module = importlib.import_module(f"scaleway.{product}") + versions = pkgutil.iter_modules(module.__path__) + + for _, version, _ in versions: + module = importlib.import_module(f"scaleway.{product}.{version}") + + for name, api in inspect.getmembers(module, isclass): + if name.endswith("API"): + apis[f"{product}_{version}"] = api + + env = Environment( + loader=FileSystemLoader("templates"), + autoescape=select_autoescape(), + extensions=["jinja2.ext.loopcontrols"], + ) + + module_names: List[str] = [] + + for name, api in apis.items(): + descriptors = get_api_descriptors(name, api) + + for descriptor in descriptors: + module_code = env.get_template("module.py.jinja").render(api=descriptor) + with open(f"plugins/modules/scaleway_{descriptor.name}.py", "w") as f: + f.write(module_code) + + module_names.append(descriptor.name) + + with open(f"meta/runtime.yml", "w") as f: + content = env.get_template("runtime.yml.jinja").render(module_names=module_names) + f.write(content) + +if __name__ == "__main__": + main() diff --git a/templates/module.py.jinja b/templates/module.py.jinja new file mode 100644 index 0000000..a0982ca --- /dev/null +++ b/templates/module.py.jinja @@ -0,0 +1,296 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Copyright: (c) 2023, Scaleway +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: scaleway_{{ api.name }} +short_description: Manage Scaleway {{ api.namespace }}'s {{ api.group }} +description: + - This module can be used to manage Scaleway {{ api.namespace }}'s {{ api.group }}. +version_added: "2.1.0" +author: + - Nathanael Demacon (@quantumsheep) +extends_documentation_fragment: + - scaleway.scaleway.scaleway + - scaleway.scaleway.scaleway_waitable_resource +requirements: + - scaleway >= 0.6.0 +options: + state: + description: + - Indicate desired state of the target. + - C(present) will create the resource. + - C(absent) will delete the resource, if it exists. + default: present + choices: ["present", "absent"] + type: str + {%- if not api.method_create.has_request_field(api.response_id_field.name) %} + {{ api.response_id_field.name }}: + description: {{ api.response_id_field.name }} + type: str + required: false + {%- endif %} + {%- for field in api.method_create.request_fields %} + {{ field.name }}: + description: {{ field.name }} + type: {{ field.type.name }} + {%- if field.type.name == "list" %} + elements: str + {%- endif %} + required: {% if field.required %}true{%- else %}false{%- endif %} + {%- if field.type.choices %} + choices: + {%- for choice in field.type.choices %} + - {{ choice }} + {%- endfor %} + {%- endif %} + {%- endfor %} +""" + +EXAMPLES = r""" +- name: Create a {{ api.group }} + scaleway.scaleway.scaleway_{{ api.name }}: + access_key: "{{ "{{ scw_access_key }}" }}" + secret_key: "{{ "{{ scw_secret_key }}" }}" + {%- for field in api.method_create.request_fields -%} + {%- if field.required %} + {%- if field.type.name == "bool" %} + {{ field.name }}: true + {%- elif field.type.name == "list" %} + {{ field.name }}: + - aaaaaa + - bbbbbb + {%- elif field.type.name == "dict" %} + {{ field.name }}: + aaaaaa: bbbbbb + cccccc: dddddd + {%- else %} + {{ field.name }}: "aaaaaa" + {%- endif %} + {%- endif %} + {%- endfor %} +""" + +RETURN = r""" +--- +{{ api.group }}: + description: The {{ api.group }} information + returned: when I(state=present) + type: dict + sample: + {%- for field in api.method_get.response_fields %} + {%- if field.type.choices %} + {%- for choice in field.type.choices %} + {%- if "unknown" not in choice %} + {{ field.name }}: {{ choice }} + {%- break %} + {%- endif %} + {%- endfor %} + {%- elif "id" in field.name %} + {{ field.name }}: 00000000-0000-0000-0000-000000000000 + {%- elif field.type.name == "str" %} + {{ field.name }}: "aaaaaa" + {%- elif field.type.name == "int" %} + {{ field.name }}: 3 + {%- elif field.type.name == "float" %} + {{ field.name }}: 3.14 + {%- elif field.type.name == "bool" %} + {{ field.name }}: true + {%- elif field.type.name == "list" %} + {{ field.name }}: + - aaaaaa + - bbbbbb + {%- elif field.type.name == "dict" %} + {{ field.name }}: + aaaaaa: bbbbbb + cccccc: dddddd + {%- endif %} + {%- endfor %} +""" + +from ansible.module_utils.basic import ( + AnsibleModule, + missing_required_lib, +) +from ansible_collections.scaleway.scaleway.plugins.module_utils.scaleway import ( + scaleway_argument_spec, + scaleway_waitable_resource_argument_spec, + scaleway_get_client_from_module, + scaleway_pop_client_params, + scaleway_pop_waitable_resource_params, +) + +try: + from scaleway import Client + from {{ api.class_import_path }} import {{ api.class_name }} + + HAS_SCALEWAY_SDK = True +except ImportError: + HAS_SCALEWAY_SDK = False + + +def create(module: AnsibleModule, client: "Client") -> None: + api = {{ api.class_name }}(client) + + resource_id = module.params.pop("id", None) + if id is not None: + resource = api.get_{{ api.group }}({{ api.request_id_field.name }}=resource_id) + + if module.check_mode: + module.exit_json(changed=False) + + module.exit_json(changed=False, data=resource) + + if module.check_mode: + module.exit_json(changed=True) + + not_none_params = { + key: value for key, value in module.params.items() if value is not None + } + resource = api.create_{{ api.group }}(**not_none_params) + {%- if api.method_wait_for != None %} + resource = api.{{ api.method_wait_for.name }}({{ api.request_id_field.name }}=resource.{{ api.response_id_field.name }}, region=module.params["region"]) + {%- endif %} + + module.exit_json(changed=True, data=resource.__dict__) + + +def delete(module: AnsibleModule, client: "Client") -> None: + api = {{ api.class_name }}(client) + + resource_id = module.params.pop("{{ api.response_id_field.name }}", None) + + if resource_id is not None: + resource = api.get_{{ api.group }}( + {%- for field in api.method_get.required_request_fields %} + {%- if field.name == api.request_id_field.name %} + {{ field.name }}=resource_id, + {%- else %} + {{ field.name }}=module.params["{{ field.name }}"], + {%- endif %} + {%- endfor %} + {%- if api.method_get.has_request_field("region") %} + region=module.params["region"], + {%- endif %} + {%- if api.method_get.has_request_field("zone") %} + zone=module.params["zone"], + {%- endif %} + ) + {%- if api.method_list != None and api.method_list.has_request_field("name") %} + elif module.params.get("name", None) is not None: + resources = api.{{ api.method_list.name }}( + name=module.params["name"], + {%- for field in api.method_list.required_request_fields %} + {{ field.name }}=module.params.get("{{ field.name }}", None), + {%- endfor %} + {%- if api.method_get.has_request_field("region") %} + region=module.params["region"], + {%- endif %} + {%- if api.method_get.has_request_field("zone") %} + zone=module.params["zone"], + {%- endif %} + ) + if len(resources) == 0: + module.exit_json(msg="No {{ api.group }} found with name {name}") + elif len(resources) > 1: + module.exit_json(msg="More than one {{ api.group }} found with name {name}") + else: + resource = resources[0] + {%- endif %} + else: + module.fail_json(msg="{{ api.response_id_field.name }} is required") + + if module.check_mode: + module.exit_json(changed=True) + + api.{{ api.method_delete.name }}( + {%- for field in api.method_delete.request_fields %} + {%- if field.name == api.request_id_field.name %} + {{ field.name }}=resource.id, + {%- else %} + {{ field.name }}=resource.{{ field.name }}, + {%- endif %} + {%- endfor %} + ) + {%- if api.method_wait_for != None %} + + try: + api.{{ api.method_wait_for.name }}({{ api.request_id_field.name }}=resource.{{ api.response_id_field.name }}, region=module.params["region"]) + except ScalewayException as e: + if e.status_code != 404: + raise e + {%- endif %} + + module.exit_json( + changed=True, + {%- if api.method_get.has_response_field("name") %} + msg=f"{{ api.namespace }}'s {{ api.group }} {resource.name} ({resource.{{ api.response_id_field.name }}}) deleted", + {%- else %} + msg=f"{{ api.namespace }}'s {{ api.group }} {resource.{{ api.response_id_field.name }}} deleted", + {%- endif %} + ) + + +def core(module: AnsibleModule) -> None: + client = scaleway_get_client_from_module(module) + + state = module.params.pop("state") + scaleway_pop_client_params(module) + scaleway_pop_waitable_resource_params(module) + + if state == "present": + create(module, client) + elif state == "absent": + delete(module, client) + + +def main() -> None: + argument_spec = scaleway_argument_spec() + argument_spec.update(scaleway_waitable_resource_argument_spec()) + argument_spec.update( + state=dict(type="str", default="present", choices=["absent", "present"]), + {%- if api.request_id_field not in api.method_create.request_fields %} + {{ api.request_id_field.name }}=dict(type="str" + {%- if ("password" in api.request_id_field.name) or ("secret" in api.request_id_field.name) or ("key" in api.request_id_field.name) -%} + , no_log=True + {%- endif -%} + ), + {%- endif %} + {%- for field in api.method_create.request_fields %} + {{ field.name }}=dict( + type="{{ field.type.name }}", + required={{ field.required }}{%- if field.type.choices %}, + choices=[{%- for choice in field.type.choices %}"{{ choice }}"{%- if not loop.last %}, {% endif %}{%- endfor %}]{%- endif %}, + {%- if field.name == "list" %} + elements="str", + {%- endif %} + {%- if ("password" in field.name) or ("secret" in field.name) or ("key" in field.name) %} + no_log=True, + {%- endif %} + ), + {%- endfor %} + ) + + module = AnsibleModule( + argument_spec=argument_spec, + {%- if api.method_create.has_request_field("name") %} + required_one_of=(["{{ api.request_id_field.name }}", "name"],), + {%- endif %} + supports_check_mode=True, + ) + + if not HAS_SCALEWAY_SDK: + module.fail_json(msg=missing_required_lib("scaleway")) + + core(module) + + +if __name__ == "__main__": + main() + diff --git a/templates/runtime.yml.jinja b/templates/runtime.yml.jinja new file mode 100644 index 0000000..d8ccdb0 --- /dev/null +++ b/templates/runtime.yml.jinja @@ -0,0 +1,7 @@ +--- +requires_ansible: ">=2.9.10" +action_groups: + all: + {%- for name in module_names %} + - scaleway_{{ name }} + {%- endfor %} diff --git a/templates/test.yml.jinja b/templates/test.yml.jinja new file mode 100644 index 0000000..652ccbc --- /dev/null +++ b/templates/test.yml.jinja @@ -0,0 +1,57 @@ +--- +- block: + - name: Ensure Access Key is provided + ansible.builtin.fail: + msg: scw_access_key should be defined in tests/integration/integration_config.yml + when: + - scw_access_key is not defined + - scw_access_key | length == 0 + + - name: Ensure Secret Key is provided + ansible.builtin.fail: + msg: scw_secret_key should be defined in tests/integration/integration_config.yml + when: + - scw_secret_key is not defined + - scw_secret_key | length == 0 + + - name: Create {{ module_name }} + quantumsheep.scaleway.scaleway_{{ module_name }}: + access_key: "{{ "{{ scw_access_key }}" }}" + secret_key: "{{ "{{ scw_secret_key }}" }}" + state: present + {%- for name, field in create_request_fields.items() %} + {%- if field['required'] %} + {%- if name == 'project_id' %} + {{ name }}: "{{ "{{ scaleway_project }}" }}" + {%- elif name == 'organization_id' %} + {{ name }}: "{{ "{{ scaleway_organization }}" }} + {%- elif name == 'region' %} + {{ name }}: "{{ "{{ scaleway_region }}" }} + {%- else %} + {{ name }}: "{{ "{{ resource_" }}{{ name }} {{ "}}" }}" + {%- endif %} + {%- endif %} + {%- endfor %} + register: integration_{{ module_name }}_creation + + - name: Create a {{ module_name }} (Check) + check_mode: yes + quantumsheep.scaleway.scaleway_{{ module_name }}: + access_key: "{{ "{{ scw_access_key }}" }}" + secret_key: "{{ "{{ scw_secret_key }}" }}" + state: present + {%- for name, field in create_request_fields.items() %} + {%- if field['required'] %} + {%- if name == 'project_id' %} + {{ name }}: "{{ "{{ scaleway_project }}" }}" + {%- elif name == 'organization_id' %} + {{ name }}: "{{ "{{ scaleway_organization }}" }} + {%- elif name == 'region' %} + {{ name }}: "{{ "{{ scaleway_region }}" }} + {%- else %} + {{ name }}: "{{ "{{ resource_" }}{{ name }} {{ "}}" }}" + {%- endif %} + {%- endif %} + {%- endfor %} + register: integration_{{ module_name }}_creation_check + From 24c164208667ea797ab04e81eef568ae2e947072 Mon Sep 17 00:00:00 2001 From: jaime Bernabe <6184069+Monitob@users.noreply.github.com> Date: Mon, 17 Jul 2023 17:21:25 +0200 Subject: [PATCH 04/19] ci: set python version 3.9 --- .github/workflows/ansible-test-sanity.yml | 4 ++-- .github/workflows/extra-docs-linting.yml | 6 ++++++ .github/workflows/release.yml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index daae699..a0dcf38 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -23,8 +23,8 @@ jobs: uses: ansible-community/ansible-test-gh-action@release/v1 with: ansible-core-version: ${{ matrix.ansible }} - origin-python-version: 3.8 - target-python-version: 3.8 + origin-python-version: 3.9 + target-python-version: 3.9 testing-type: sanity sanity: diff --git a/.github/workflows/extra-docs-linting.yml b/.github/workflows/extra-docs-linting.yml index 8969958..050726d 100644 --- a/.github/workflows/extra-docs-linting.yml +++ b/.github/workflows/extra-docs-linting.yml @@ -25,7 +25,13 @@ jobs: - name: Set up Python uses: actions/setup-python@v3 with: +<<<<<<< HEAD python-version: '3.10' +||||||| parent of b6150b7 (ci: set python version 3.9) + python-version: '3.11' +======= + python-version: '3.9' +>>>>>>> b6150b7 (ci: set python version 3.9) - name: Install antsibull-docs run: pip install antsibull-docs --disable-pip-version-check diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9f5176b..cc1ba1f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: 3.9 - name: Install Ansible run: pip install ansible From 68260194e2c84d9e026b2f311114db07642782f4 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 17:48:02 +0200 Subject: [PATCH 05/19] feat: handle double properties --- generator.py | 5 ++++- plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py | 1 - templates/module.py.jinja | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/generator.py b/generator.py index 080ff86..4d0feeb 100644 --- a/generator.py +++ b/generator.py @@ -311,8 +311,11 @@ def main() -> None: module_names.append(descriptor.name) with open(f"meta/runtime.yml", "w") as f: - content = env.get_template("runtime.yml.jinja").render(module_names=module_names) + content = env.get_template("runtime.yml.jinja").render( + module_names=module_names + ) f.write(content) + if __name__ == "__main__": main() diff --git a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py index ede0dba..e55fdcd 100644 --- a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py +++ b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py @@ -154,7 +154,6 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), - dns_zone=dict(type="str"), dns_zone=dict( type="str", required=True, diff --git a/templates/module.py.jinja b/templates/module.py.jinja index a0982ca..1b35679 100644 --- a/templates/module.py.jinja +++ b/templates/module.py.jinja @@ -255,7 +255,7 @@ def main() -> None: argument_spec.update(scaleway_waitable_resource_argument_spec()) argument_spec.update( state=dict(type="str", default="present", choices=["absent", "present"]), - {%- if api.request_id_field not in api.method_create.request_fields %} + {%- if not api.method_create.has_request_field(api.request_id_field.name) %} {{ api.request_id_field.name }}=dict(type="str" {%- if ("password" in api.request_id_field.name) or ("secret" in api.request_id_field.name) or ("key" in api.request_id_field.name) -%} , no_log=True From 1c3b3715cb2fad0b19894f09e1603b2859a825e5 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 17:53:19 +0200 Subject: [PATCH 06/19] chore: test devel in python 3.10 --- .github/workflows/ansible-test-sanity.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index a0dcf38..fc519cb 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -33,17 +33,21 @@ jobs: strategy: matrix: ansible: - - stable-2.10 - - stable-2.11 - - stable-2.12 - - stable-2.13 - - devel + - stable-2.10 + - stable-2.11 + - stable-2.12 + - stable-2.13 + python: + - 3.9 + include: + - ansible: devel + python: 3.10 runs-on: ubuntu-latest steps: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: ansible-core-version: ${{ matrix.ansible }} - origin-python-version: 3.9 - target-python-version: 3.9 + origin-python-version: ${{ matrix.python }} + target-python-version: ${{ matrix.python }} testing-type: sanity From eb6244f843ea5aaaca888c91f65a9818623052cf Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 17:54:41 +0200 Subject: [PATCH 07/19] fix: float --- .github/workflows/ansible-test-sanity.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index fc519cb..01cbebd 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -41,7 +41,7 @@ jobs: - 3.9 include: - ansible: devel - python: 3.10 + python: "3.10" runs-on: ubuntu-latest steps: - name: Perform testing From 359817af40e17cba31f6cd7832ac35dabd0390c2 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:13:35 +0200 Subject: [PATCH 08/19] 3.8 --- .github/workflows/ansible-test-sanity.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index 01cbebd..3e26a68 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -38,7 +38,7 @@ jobs: - stable-2.12 - stable-2.13 python: - - 3.9 + - 3.8 include: - ansible: devel python: "3.10" From 97df3d256f9f99aff7e33e0992084236920b280e Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:17:48 +0200 Subject: [PATCH 09/19] chore: 3.8 --- .github/workflows/ansible-test-sanity.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index 3e26a68..342400b 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -17,14 +17,16 @@ jobs: matrix: ansible: - stable-2.9 + python: + - 3.8 runs-on: ubuntu-latest steps: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: ansible-core-version: ${{ matrix.ansible }} - origin-python-version: 3.9 - target-python-version: 3.9 + origin-python-version: ${{ matrix.python }} + target-python-version: ${{ matrix.python }} testing-type: sanity sanity: From f933ee2002c3653c7eceaa4773a18b1bac17c02e Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:21:23 +0200 Subject: [PATCH 10/19] update scaleway --- plugins/inventory/scaleway.py | 2 +- plugins/modules/scaleway_account_v2_project.py | 2 +- plugins/modules/scaleway_applesilicon_v1alpha1_server.py | 2 +- plugins/modules/scaleway_baremetal_v1_server.py | 2 +- plugins/modules/scaleway_cockpit_v1beta1_token.py | 2 +- plugins/modules/scaleway_container_v1beta1_container.py | 2 +- plugins/modules/scaleway_container_v1beta1_cron.py | 2 +- plugins/modules/scaleway_container_v1beta1_domain.py | 2 +- plugins/modules/scaleway_container_v1beta1_namespace.py | 2 +- plugins/modules/scaleway_container_v1beta1_token.py | 2 +- plugins/modules/scaleway_container_v1beta1_trigger.py | 2 +- plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py | 2 +- plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py | 2 +- plugins/modules/scaleway_function_v1beta1_cron.py | 2 +- plugins/modules/scaleway_function_v1beta1_domain.py | 2 +- plugins/modules/scaleway_function_v1beta1_function.py | 2 +- plugins/modules/scaleway_function_v1beta1_namespace.py | 2 +- plugins/modules/scaleway_function_v1beta1_token.py | 2 +- plugins/modules/scaleway_function_v1beta1_trigger.py | 2 +- plugins/modules/scaleway_iam_v1alpha1_api_key.py | 2 +- plugins/modules/scaleway_iam_v1alpha1_application.py | 2 +- plugins/modules/scaleway_iam_v1alpha1_group.py | 2 +- plugins/modules/scaleway_iam_v1alpha1_policy.py | 2 +- plugins/modules/scaleway_iam_v1alpha1_ssh_key.py | 2 +- plugins/modules/scaleway_instance_v1_image.py | 2 +- plugins/modules/scaleway_instance_v1_ip.py | 2 +- plugins/modules/scaleway_instance_v1_placement_group.py | 2 +- plugins/modules/scaleway_instance_v1_private_nic.py | 2 +- plugins/modules/scaleway_instance_v1_security_group.py | 2 +- plugins/modules/scaleway_instance_v1_security_group_rule.py | 2 +- plugins/modules/scaleway_instance_v1_snapshot.py | 2 +- plugins/modules/scaleway_instance_v1_volume.py | 2 +- plugins/modules/scaleway_iot_v1_device.py | 2 +- plugins/modules/scaleway_iot_v1_hub.py | 2 +- plugins/modules/scaleway_iot_v1_network.py | 2 +- plugins/modules/scaleway_iot_v1_route.py | 2 +- plugins/modules/scaleway_k8s_v1_cluster.py | 2 +- plugins/modules/scaleway_k8s_v1_pool.py | 2 +- plugins/modules/scaleway_lb_v1_acl.py | 2 +- plugins/modules/scaleway_lb_v1_backend.py | 2 +- plugins/modules/scaleway_lb_v1_certificate.py | 2 +- plugins/modules/scaleway_lb_v1_frontend.py | 2 +- plugins/modules/scaleway_lb_v1_lb.py | 2 +- plugins/modules/scaleway_lb_v1_route.py | 2 +- plugins/modules/scaleway_lb_v1_subscriber.py | 2 +- plugins/modules/scaleway_mnq_v1alpha1_credential.py | 2 +- plugins/modules/scaleway_mnq_v1alpha1_namespace.py | 2 +- plugins/modules/scaleway_rdb_v1_database_backup.py | 2 +- plugins/modules/scaleway_rdb_v1_endpoint.py | 2 +- plugins/modules/scaleway_rdb_v1_instance.py | 2 +- plugins/modules/scaleway_rdb_v1_read_replica.py | 2 +- plugins/modules/scaleway_rdb_v1_snapshot.py | 2 +- plugins/modules/scaleway_redis_v1_cluster.py | 2 +- plugins/modules/scaleway_registry_v1_namespace.py | 2 +- plugins/modules/scaleway_secret_v1alpha1_secret.py | 2 +- plugins/modules/scaleway_test_v1_human.py | 2 +- plugins/modules/scaleway_vpc_v1_private_network.py | 2 +- plugins/modules/scaleway_vpc_v2_private_network.py | 2 +- plugins/modules/scaleway_vpc_v2_vpc.py | 2 +- plugins/modules/scaleway_vpcgw_v1_dhcp.py | 2 +- plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py | 2 +- plugins/modules/scaleway_vpcgw_v1_gateway.py | 2 +- plugins/modules/scaleway_vpcgw_v1_gateway_network.py | 2 +- plugins/modules/scaleway_vpcgw_v1_ip.py | 2 +- plugins/modules/scaleway_vpcgw_v1_pat_rule.py | 2 +- plugins/modules/scaleway_webhosting_v1alpha1_hosting.py | 2 +- requirements-scaleway.txt | 2 +- templates/module.py.jinja | 2 +- 68 files changed, 68 insertions(+), 68 deletions(-) diff --git a/plugins/inventory/scaleway.py b/plugins/inventory/scaleway.py index 90eb8a5..78d2d6c 100644 --- a/plugins/inventory/scaleway.py +++ b/plugins/inventory/scaleway.py @@ -15,7 +15,7 @@ short_description: Scaleway inventory source version_added: "1.0.0" requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 description: - Scaleway inventory plugin. - Uses configuration file that ends with '(scaleway|scw).(yaml|yml)'. diff --git a/plugins/modules/scaleway_account_v2_project.py b/plugins/modules/scaleway_account_v2_project.py index 873e5ef..13cff12 100644 --- a/plugins/modules/scaleway_account_v2_project.py +++ b/plugins/modules/scaleway_account_v2_project.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_applesilicon_v1alpha1_server.py b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py index 3c530c7..a398e0d 100644 --- a/plugins/modules/scaleway_applesilicon_v1alpha1_server.py +++ b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_baremetal_v1_server.py b/plugins/modules/scaleway_baremetal_v1_server.py index 1d070cc..0ad574b 100644 --- a/plugins/modules/scaleway_baremetal_v1_server.py +++ b/plugins/modules/scaleway_baremetal_v1_server.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_cockpit_v1beta1_token.py b/plugins/modules/scaleway_cockpit_v1beta1_token.py index 1a31f8d..1c26eaf 100644 --- a/plugins/modules/scaleway_cockpit_v1beta1_token.py +++ b/plugins/modules/scaleway_cockpit_v1beta1_token.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_container.py b/plugins/modules/scaleway_container_v1beta1_container.py index a5ab303..6f63202 100644 --- a/plugins/modules/scaleway_container_v1beta1_container.py +++ b/plugins/modules/scaleway_container_v1beta1_container.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_cron.py b/plugins/modules/scaleway_container_v1beta1_cron.py index e0e8b2d..88a2697 100644 --- a/plugins/modules/scaleway_container_v1beta1_cron.py +++ b/plugins/modules/scaleway_container_v1beta1_cron.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_domain.py b/plugins/modules/scaleway_container_v1beta1_domain.py index c601071..7f046e9 100644 --- a/plugins/modules/scaleway_container_v1beta1_domain.py +++ b/plugins/modules/scaleway_container_v1beta1_domain.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_namespace.py b/plugins/modules/scaleway_container_v1beta1_namespace.py index 0931f10..0feecfe 100644 --- a/plugins/modules/scaleway_container_v1beta1_namespace.py +++ b/plugins/modules/scaleway_container_v1beta1_namespace.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_token.py b/plugins/modules/scaleway_container_v1beta1_token.py index 2eba61d..9e4014b 100644 --- a/plugins/modules/scaleway_container_v1beta1_token.py +++ b/plugins/modules/scaleway_container_v1beta1_token.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_container_v1beta1_trigger.py b/plugins/modules/scaleway_container_v1beta1_trigger.py index f632afb..5d3a14e 100644 --- a/plugins/modules/scaleway_container_v1beta1_trigger.py +++ b/plugins/modules/scaleway_container_v1beta1_trigger.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py index e55fdcd..30db47f 100644 --- a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py +++ b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py index 1bada57..ceaf964 100644 --- a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py +++ b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_cron.py b/plugins/modules/scaleway_function_v1beta1_cron.py index 8d5a25b..e7b14d1 100644 --- a/plugins/modules/scaleway_function_v1beta1_cron.py +++ b/plugins/modules/scaleway_function_v1beta1_cron.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_domain.py b/plugins/modules/scaleway_function_v1beta1_domain.py index 642c963..6d1ea8e 100644 --- a/plugins/modules/scaleway_function_v1beta1_domain.py +++ b/plugins/modules/scaleway_function_v1beta1_domain.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_function.py b/plugins/modules/scaleway_function_v1beta1_function.py index 8087e5b..a423115 100644 --- a/plugins/modules/scaleway_function_v1beta1_function.py +++ b/plugins/modules/scaleway_function_v1beta1_function.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_namespace.py b/plugins/modules/scaleway_function_v1beta1_namespace.py index f147db2..30a9244 100644 --- a/plugins/modules/scaleway_function_v1beta1_namespace.py +++ b/plugins/modules/scaleway_function_v1beta1_namespace.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_token.py b/plugins/modules/scaleway_function_v1beta1_token.py index ad46d0f..54e6a07 100644 --- a/plugins/modules/scaleway_function_v1beta1_token.py +++ b/plugins/modules/scaleway_function_v1beta1_token.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_function_v1beta1_trigger.py b/plugins/modules/scaleway_function_v1beta1_trigger.py index ae73b45..1e061e2 100644 --- a/plugins/modules/scaleway_function_v1beta1_trigger.py +++ b/plugins/modules/scaleway_function_v1beta1_trigger.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iam_v1alpha1_api_key.py b/plugins/modules/scaleway_iam_v1alpha1_api_key.py index 6ce8ee9..1103a78 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_api_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_api_key.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iam_v1alpha1_application.py b/plugins/modules/scaleway_iam_v1alpha1_application.py index 2505cdf..a136550 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_application.py +++ b/plugins/modules/scaleway_iam_v1alpha1_application.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iam_v1alpha1_group.py b/plugins/modules/scaleway_iam_v1alpha1_group.py index 2777431..36216fa 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_group.py +++ b/plugins/modules/scaleway_iam_v1alpha1_group.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iam_v1alpha1_policy.py b/plugins/modules/scaleway_iam_v1alpha1_policy.py index 5ff3b1a..9194fcf 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_policy.py +++ b/plugins/modules/scaleway_iam_v1alpha1_policy.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py index 0049945..d41c6d7 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_image.py b/plugins/modules/scaleway_instance_v1_image.py index 1c49bc1..804e16e 100644 --- a/plugins/modules/scaleway_instance_v1_image.py +++ b/plugins/modules/scaleway_instance_v1_image.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_ip.py b/plugins/modules/scaleway_instance_v1_ip.py index 8773942..913dcba 100644 --- a/plugins/modules/scaleway_instance_v1_ip.py +++ b/plugins/modules/scaleway_instance_v1_ip.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_placement_group.py b/plugins/modules/scaleway_instance_v1_placement_group.py index be40ab1..ae56625 100644 --- a/plugins/modules/scaleway_instance_v1_placement_group.py +++ b/plugins/modules/scaleway_instance_v1_placement_group.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_private_nic.py b/plugins/modules/scaleway_instance_v1_private_nic.py index d0f6a0a..8dc9e95 100644 --- a/plugins/modules/scaleway_instance_v1_private_nic.py +++ b/plugins/modules/scaleway_instance_v1_private_nic.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_security_group.py b/plugins/modules/scaleway_instance_v1_security_group.py index b9cc1c2..ce98210 100644 --- a/plugins/modules/scaleway_instance_v1_security_group.py +++ b/plugins/modules/scaleway_instance_v1_security_group.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_security_group_rule.py b/plugins/modules/scaleway_instance_v1_security_group_rule.py index 393c9c5..aa16274 100644 --- a/plugins/modules/scaleway_instance_v1_security_group_rule.py +++ b/plugins/modules/scaleway_instance_v1_security_group_rule.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_snapshot.py b/plugins/modules/scaleway_instance_v1_snapshot.py index 1102f70..0d9e5d5 100644 --- a/plugins/modules/scaleway_instance_v1_snapshot.py +++ b/plugins/modules/scaleway_instance_v1_snapshot.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_instance_v1_volume.py b/plugins/modules/scaleway_instance_v1_volume.py index af190e7..6d46403 100644 --- a/plugins/modules/scaleway_instance_v1_volume.py +++ b/plugins/modules/scaleway_instance_v1_volume.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iot_v1_device.py b/plugins/modules/scaleway_iot_v1_device.py index 6c527e4..6f32649 100644 --- a/plugins/modules/scaleway_iot_v1_device.py +++ b/plugins/modules/scaleway_iot_v1_device.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iot_v1_hub.py b/plugins/modules/scaleway_iot_v1_hub.py index 349557f..f03111b 100644 --- a/plugins/modules/scaleway_iot_v1_hub.py +++ b/plugins/modules/scaleway_iot_v1_hub.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iot_v1_network.py b/plugins/modules/scaleway_iot_v1_network.py index b0b2205..5ba365e 100644 --- a/plugins/modules/scaleway_iot_v1_network.py +++ b/plugins/modules/scaleway_iot_v1_network.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_iot_v1_route.py b/plugins/modules/scaleway_iot_v1_route.py index 08f5a7f..4a74610 100644 --- a/plugins/modules/scaleway_iot_v1_route.py +++ b/plugins/modules/scaleway_iot_v1_route.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_k8s_v1_cluster.py b/plugins/modules/scaleway_k8s_v1_cluster.py index 952f4b4..c628d91 100644 --- a/plugins/modules/scaleway_k8s_v1_cluster.py +++ b/plugins/modules/scaleway_k8s_v1_cluster.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_k8s_v1_pool.py b/plugins/modules/scaleway_k8s_v1_pool.py index 1d6be58..a4ee0f5 100644 --- a/plugins/modules/scaleway_k8s_v1_pool.py +++ b/plugins/modules/scaleway_k8s_v1_pool.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_acl.py b/plugins/modules/scaleway_lb_v1_acl.py index fb9fdbf..326dae7 100644 --- a/plugins/modules/scaleway_lb_v1_acl.py +++ b/plugins/modules/scaleway_lb_v1_acl.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_backend.py b/plugins/modules/scaleway_lb_v1_backend.py index 5e83ed9..ae99a76 100644 --- a/plugins/modules/scaleway_lb_v1_backend.py +++ b/plugins/modules/scaleway_lb_v1_backend.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_certificate.py b/plugins/modules/scaleway_lb_v1_certificate.py index 96a6672..39ad3d4 100644 --- a/plugins/modules/scaleway_lb_v1_certificate.py +++ b/plugins/modules/scaleway_lb_v1_certificate.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_frontend.py b/plugins/modules/scaleway_lb_v1_frontend.py index 7f127d3..f74bec9 100644 --- a/plugins/modules/scaleway_lb_v1_frontend.py +++ b/plugins/modules/scaleway_lb_v1_frontend.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_lb.py b/plugins/modules/scaleway_lb_v1_lb.py index 3f1e3d0..e858549 100644 --- a/plugins/modules/scaleway_lb_v1_lb.py +++ b/plugins/modules/scaleway_lb_v1_lb.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_route.py b/plugins/modules/scaleway_lb_v1_route.py index 84322fd..cfa407d 100644 --- a/plugins/modules/scaleway_lb_v1_route.py +++ b/plugins/modules/scaleway_lb_v1_route.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_lb_v1_subscriber.py b/plugins/modules/scaleway_lb_v1_subscriber.py index ff1b234..1655b68 100644 --- a/plugins/modules/scaleway_lb_v1_subscriber.py +++ b/plugins/modules/scaleway_lb_v1_subscriber.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_mnq_v1alpha1_credential.py b/plugins/modules/scaleway_mnq_v1alpha1_credential.py index 0b0d6db..0234c17 100644 --- a/plugins/modules/scaleway_mnq_v1alpha1_credential.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_credential.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_mnq_v1alpha1_namespace.py b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py index 46e1554..4e1ba49 100644 --- a/plugins/modules/scaleway_mnq_v1alpha1_namespace.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_rdb_v1_database_backup.py b/plugins/modules/scaleway_rdb_v1_database_backup.py index fc4d5a0..f80dfd6 100644 --- a/plugins/modules/scaleway_rdb_v1_database_backup.py +++ b/plugins/modules/scaleway_rdb_v1_database_backup.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_rdb_v1_endpoint.py b/plugins/modules/scaleway_rdb_v1_endpoint.py index ca2db9c..2c65832 100644 --- a/plugins/modules/scaleway_rdb_v1_endpoint.py +++ b/plugins/modules/scaleway_rdb_v1_endpoint.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_rdb_v1_instance.py b/plugins/modules/scaleway_rdb_v1_instance.py index 1890280..0225817 100644 --- a/plugins/modules/scaleway_rdb_v1_instance.py +++ b/plugins/modules/scaleway_rdb_v1_instance.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_rdb_v1_read_replica.py b/plugins/modules/scaleway_rdb_v1_read_replica.py index 1956f1b..af8727a 100644 --- a/plugins/modules/scaleway_rdb_v1_read_replica.py +++ b/plugins/modules/scaleway_rdb_v1_read_replica.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_rdb_v1_snapshot.py b/plugins/modules/scaleway_rdb_v1_snapshot.py index a7f7346..07ddca5 100644 --- a/plugins/modules/scaleway_rdb_v1_snapshot.py +++ b/plugins/modules/scaleway_rdb_v1_snapshot.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_redis_v1_cluster.py b/plugins/modules/scaleway_redis_v1_cluster.py index 6b39e8d..b2dec96 100644 --- a/plugins/modules/scaleway_redis_v1_cluster.py +++ b/plugins/modules/scaleway_redis_v1_cluster.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_registry_v1_namespace.py b/plugins/modules/scaleway_registry_v1_namespace.py index e97731f..18a48ed 100644 --- a/plugins/modules/scaleway_registry_v1_namespace.py +++ b/plugins/modules/scaleway_registry_v1_namespace.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_secret_v1alpha1_secret.py b/plugins/modules/scaleway_secret_v1alpha1_secret.py index 59194f5..8fcef85 100644 --- a/plugins/modules/scaleway_secret_v1alpha1_secret.py +++ b/plugins/modules/scaleway_secret_v1alpha1_secret.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_test_v1_human.py b/plugins/modules/scaleway_test_v1_human.py index 7d1b93a..eac3153 100644 --- a/plugins/modules/scaleway_test_v1_human.py +++ b/plugins/modules/scaleway_test_v1_human.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpc_v1_private_network.py b/plugins/modules/scaleway_vpc_v1_private_network.py index df7b1a8..4dbdfd7 100644 --- a/plugins/modules/scaleway_vpc_v1_private_network.py +++ b/plugins/modules/scaleway_vpc_v1_private_network.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpc_v2_private_network.py b/plugins/modules/scaleway_vpc_v2_private_network.py index e384458..6760ff5 100644 --- a/plugins/modules/scaleway_vpc_v2_private_network.py +++ b/plugins/modules/scaleway_vpc_v2_private_network.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpc_v2_vpc.py b/plugins/modules/scaleway_vpc_v2_vpc.py index f3ca647..92b60fe 100644 --- a/plugins/modules/scaleway_vpc_v2_vpc.py +++ b/plugins/modules/scaleway_vpc_v2_vpc.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_dhcp.py b/plugins/modules/scaleway_vpcgw_v1_dhcp.py index 852562d..1be877f 100644 --- a/plugins/modules/scaleway_vpcgw_v1_dhcp.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py index d9ffe9b..945e52a 100644 --- a/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_gateway.py b/plugins/modules/scaleway_vpcgw_v1_gateway.py index cc17d5c..c112118 100644 --- a/plugins/modules/scaleway_vpcgw_v1_gateway.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_gateway_network.py b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py index 8cf61e2..75f6b34 100644 --- a/plugins/modules/scaleway_vpcgw_v1_gateway_network.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_ip.py b/plugins/modules/scaleway_vpcgw_v1_ip.py index 9da4b2e..14bd831 100644 --- a/plugins/modules/scaleway_vpcgw_v1_ip.py +++ b/plugins/modules/scaleway_vpcgw_v1_ip.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_vpcgw_v1_pat_rule.py b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py index 5f8885f..867f1e1 100644 --- a/plugins/modules/scaleway_vpcgw_v1_pat_rule.py +++ b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py index 8e3f2fa..6427751 100644 --- a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py +++ b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py @@ -20,7 +20,7 @@ - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: diff --git a/requirements-scaleway.txt b/requirements-scaleway.txt index 30d948f..7e02353 100644 --- a/requirements-scaleway.txt +++ b/requirements-scaleway.txt @@ -1 +1 @@ -scaleway>=0.9.0 +scaleway>=0.16.0 diff --git a/templates/module.py.jinja b/templates/module.py.jinja index 1b35679..250c7e7 100644 --- a/templates/module.py.jinja +++ b/templates/module.py.jinja @@ -20,7 +20,7 @@ extends_documentation_fragment: - scaleway.scaleway.scaleway - scaleway.scaleway.scaleway_waitable_resource requirements: - - scaleway >= 0.6.0 + - scaleway >= 0.16.0 options: state: description: From 22339ce9f53b74b747713bf98eb13007b4cfb7f3 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:32:28 +0200 Subject: [PATCH 11/19] remove devel --- .github/workflows/ansible-test-sanity.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index 342400b..a82ded2 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -41,9 +41,10 @@ jobs: - stable-2.13 python: - 3.8 - include: - - ansible: devel - python: "3.10" + # https://github.com/yaml/pyyaml/issues/601 + # include: + # - ansible: devel + # python: "3.10" runs-on: ubuntu-latest steps: - name: Perform testing From a87a8fec207a59c3b3bff03a891332979cf5e434 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:43:48 +0200 Subject: [PATCH 12/19] fix id name --- plugins/modules/scaleway_account_v2_project.py | 6 +++--- plugins/modules/scaleway_applesilicon_v1alpha1_server.py | 6 +++--- plugins/modules/scaleway_baremetal_v1_server.py | 6 +++--- plugins/modules/scaleway_cockpit_v1beta1_token.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_container.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_cron.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_domain.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_namespace.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_token.py | 6 +++--- plugins/modules/scaleway_container_v1beta1_trigger.py | 6 +++--- .../modules/scaleway_domain_v2beta1_ssl_certificate.py | 2 +- .../modules/scaleway_flexibleip_v1alpha1_flexible_ip.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_cron.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_domain.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_function.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_namespace.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_token.py | 6 +++--- plugins/modules/scaleway_function_v1beta1_trigger.py | 6 +++--- plugins/modules/scaleway_iam_v1alpha1_api_key.py | 6 +++++- plugins/modules/scaleway_iam_v1alpha1_application.py | 6 +++--- plugins/modules/scaleway_iam_v1alpha1_group.py | 6 +++--- plugins/modules/scaleway_iam_v1alpha1_policy.py | 6 +++--- plugins/modules/scaleway_iam_v1alpha1_ssh_key.py | 6 +++--- plugins/modules/scaleway_instance_v1_image.py | 6 +++--- plugins/modules/scaleway_instance_v1_ip.py | 2 +- plugins/modules/scaleway_instance_v1_placement_group.py | 6 +++--- plugins/modules/scaleway_instance_v1_private_nic.py | 6 +++--- plugins/modules/scaleway_instance_v1_security_group.py | 6 +++--- .../modules/scaleway_instance_v1_security_group_rule.py | 6 +++--- plugins/modules/scaleway_instance_v1_snapshot.py | 6 +++--- plugins/modules/scaleway_instance_v1_volume.py | 6 +++--- plugins/modules/scaleway_iot_v1_device.py | 6 +++--- plugins/modules/scaleway_iot_v1_hub.py | 6 +++--- plugins/modules/scaleway_iot_v1_network.py | 6 +++--- plugins/modules/scaleway_iot_v1_route.py | 6 +++--- plugins/modules/scaleway_k8s_v1_cluster.py | 6 +++--- plugins/modules/scaleway_k8s_v1_pool.py | 6 +++--- plugins/modules/scaleway_lb_v1_acl.py | 6 +++--- plugins/modules/scaleway_lb_v1_backend.py | 6 +++--- plugins/modules/scaleway_lb_v1_certificate.py | 6 +++--- plugins/modules/scaleway_lb_v1_frontend.py | 6 +++--- plugins/modules/scaleway_lb_v1_lb.py | 6 +++--- plugins/modules/scaleway_lb_v1_route.py | 6 +++--- plugins/modules/scaleway_lb_v1_subscriber.py | 6 +++--- plugins/modules/scaleway_mnq_v1alpha1_credential.py | 6 +++--- plugins/modules/scaleway_mnq_v1alpha1_namespace.py | 6 +++--- plugins/modules/scaleway_rdb_v1_database_backup.py | 6 +++--- plugins/modules/scaleway_rdb_v1_endpoint.py | 6 +++--- plugins/modules/scaleway_rdb_v1_instance.py | 6 +++--- plugins/modules/scaleway_rdb_v1_read_replica.py | 6 +++--- plugins/modules/scaleway_rdb_v1_snapshot.py | 6 +++--- plugins/modules/scaleway_redis_v1_cluster.py | 6 +++--- plugins/modules/scaleway_registry_v1_namespace.py | 6 +++--- plugins/modules/scaleway_secret_v1alpha1_secret.py | 6 +++--- plugins/modules/scaleway_test_v1_human.py | 6 +++--- plugins/modules/scaleway_vpc_v1_private_network.py | 6 +++--- plugins/modules/scaleway_vpc_v2_private_network.py | 6 +++--- plugins/modules/scaleway_vpc_v2_vpc.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_dhcp.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_gateway.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_gateway_network.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_ip.py | 6 +++--- plugins/modules/scaleway_vpcgw_v1_pat_rule.py | 6 +++--- plugins/modules/scaleway_webhosting_v1alpha1_hosting.py | 6 +++--- templates/module.py.jinja | 8 ++++---- 66 files changed, 197 insertions(+), 193 deletions(-) diff --git a/plugins/modules/scaleway_account_v2_project.py b/plugins/modules/scaleway_account_v2_project.py index 13cff12..599a8b9 100644 --- a/plugins/modules/scaleway_account_v2_project.py +++ b/plugins/modules/scaleway_account_v2_project.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + project_id: + description: project_id type: str required: false name: @@ -94,7 +94,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = AccountV2API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("project_id", None) if id is not None: resource = api.get_project(project_id=resource_id) diff --git a/plugins/modules/scaleway_applesilicon_v1alpha1_server.py b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py index a398e0d..307f926 100644 --- a/plugins/modules/scaleway_applesilicon_v1alpha1_server.py +++ b/plugins/modules/scaleway_applesilicon_v1alpha1_server.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + server_id: + description: server_id type: str required: false type_: @@ -105,7 +105,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ApplesiliconV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("server_id", None) if id is not None: resource = api.get_server(server_id=resource_id) diff --git a/plugins/modules/scaleway_baremetal_v1_server.py b/plugins/modules/scaleway_baremetal_v1_server.py index 0ad574b..90482f7 100644 --- a/plugins/modules/scaleway_baremetal_v1_server.py +++ b/plugins/modules/scaleway_baremetal_v1_server.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + server_id: + description: server_id type: str required: false offer_id: @@ -146,7 +146,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = BaremetalV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("server_id", None) if id is not None: resource = api.get_server(server_id=resource_id) diff --git a/plugins/modules/scaleway_cockpit_v1beta1_token.py b/plugins/modules/scaleway_cockpit_v1beta1_token.py index 1c26eaf..d2982e8 100644 --- a/plugins/modules/scaleway_cockpit_v1beta1_token.py +++ b/plugins/modules/scaleway_cockpit_v1beta1_token.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + token_id: + description: token_id type: str required: false project_id: @@ -97,7 +97,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = CockpitV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("token_id", None) if id is not None: resource = api.get_token(token_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_container.py b/plugins/modules/scaleway_container_v1beta1_container.py index 6f63202..11f04a3 100644 --- a/plugins/modules/scaleway_container_v1beta1_container.py +++ b/plugins/modules/scaleway_container_v1beta1_container.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + container_id: + description: container_id type: str required: false namespace_id: @@ -191,7 +191,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("container_id", None) if id is not None: resource = api.get_container(container_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_cron.py b/plugins/modules/scaleway_container_v1beta1_cron.py index 88a2697..0918fa7 100644 --- a/plugins/modules/scaleway_container_v1beta1_cron.py +++ b/plugins/modules/scaleway_container_v1beta1_cron.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + cron_id: + description: cron_id type: str required: false container_id: @@ -110,7 +110,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("cron_id", None) if id is not None: resource = api.get_cron(cron_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_domain.py b/plugins/modules/scaleway_container_v1beta1_domain.py index 7f046e9..81ed8b2 100644 --- a/plugins/modules/scaleway_container_v1beta1_domain.py +++ b/plugins/modules/scaleway_container_v1beta1_domain.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + domain_id: + description: domain_id type: str required: false hostname: @@ -100,7 +100,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("domain_id", None) if id is not None: resource = api.get_domain(domain_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_namespace.py b/plugins/modules/scaleway_container_v1beta1_namespace.py index 0feecfe..ff649c0 100644 --- a/plugins/modules/scaleway_container_v1beta1_namespace.py +++ b/plugins/modules/scaleway_container_v1beta1_namespace.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + namespace_id: + description: namespace_id type: str required: false region: @@ -121,7 +121,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("namespace_id", None) if id is not None: resource = api.get_namespace(namespace_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_token.py b/plugins/modules/scaleway_container_v1beta1_token.py index 9e4014b..091f937 100644 --- a/plugins/modules/scaleway_container_v1beta1_token.py +++ b/plugins/modules/scaleway_container_v1beta1_token.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + token_id: + description: token_id type: str required: false region: @@ -108,7 +108,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("token_id", None) if id is not None: resource = api.get_token(token_id=resource_id) diff --git a/plugins/modules/scaleway_container_v1beta1_trigger.py b/plugins/modules/scaleway_container_v1beta1_trigger.py index 5d3a14e..de71e92 100644 --- a/plugins/modules/scaleway_container_v1beta1_trigger.py +++ b/plugins/modules/scaleway_container_v1beta1_trigger.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + trigger_id: + description: trigger_id type: str required: false name: @@ -126,7 +126,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = ContainerV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("trigger_id", None) if id is not None: resource = api.get_trigger(trigger_id=resource_id) diff --git a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py index 30db47f..1e93aa7 100644 --- a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py +++ b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py @@ -91,7 +91,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = DomainV2Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("dns_zone", None) if id is not None: resource = api.get_ssl_certificate(dns_zone=resource_id) diff --git a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py index ceaf964..2610c2c 100644 --- a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py +++ b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + fip_id: + description: fip_id type: str required: false description: @@ -124,7 +124,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FlexibleipV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("fip_id", None) if id is not None: resource = api.get_flexible_ip(fip_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_cron.py b/plugins/modules/scaleway_function_v1beta1_cron.py index e7b14d1..bf8f6c4 100644 --- a/plugins/modules/scaleway_function_v1beta1_cron.py +++ b/plugins/modules/scaleway_function_v1beta1_cron.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + cron_id: + description: cron_id type: str required: false function_id: @@ -110,7 +110,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("cron_id", None) if id is not None: resource = api.get_cron(cron_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_domain.py b/plugins/modules/scaleway_function_v1beta1_domain.py index 6d1ea8e..6e00a02 100644 --- a/plugins/modules/scaleway_function_v1beta1_domain.py +++ b/plugins/modules/scaleway_function_v1beta1_domain.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + domain_id: + description: domain_id type: str required: false hostname: @@ -100,7 +100,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("domain_id", None) if id is not None: resource = api.get_domain(domain_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_function.py b/plugins/modules/scaleway_function_v1beta1_function.py index a423115..290b0f3 100644 --- a/plugins/modules/scaleway_function_v1beta1_function.py +++ b/plugins/modules/scaleway_function_v1beta1_function.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + function_id: + description: function_id type: str required: false namespace_id: @@ -199,7 +199,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("function_id", None) if id is not None: resource = api.get_function(function_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_namespace.py b/plugins/modules/scaleway_function_v1beta1_namespace.py index 30a9244..91eb356 100644 --- a/plugins/modules/scaleway_function_v1beta1_namespace.py +++ b/plugins/modules/scaleway_function_v1beta1_namespace.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + namespace_id: + description: namespace_id type: str required: false region: @@ -121,7 +121,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("namespace_id", None) if id is not None: resource = api.get_namespace(namespace_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_token.py b/plugins/modules/scaleway_function_v1beta1_token.py index 54e6a07..45ba281 100644 --- a/plugins/modules/scaleway_function_v1beta1_token.py +++ b/plugins/modules/scaleway_function_v1beta1_token.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + token_id: + description: token_id type: str required: false region: @@ -108,7 +108,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("token_id", None) if id is not None: resource = api.get_token(token_id=resource_id) diff --git a/plugins/modules/scaleway_function_v1beta1_trigger.py b/plugins/modules/scaleway_function_v1beta1_trigger.py index 1e061e2..056a606 100644 --- a/plugins/modules/scaleway_function_v1beta1_trigger.py +++ b/plugins/modules/scaleway_function_v1beta1_trigger.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + trigger_id: + description: trigger_id type: str required: false name: @@ -126,7 +126,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = FunctionV1Beta1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("trigger_id", None) if id is not None: resource = api.get_trigger(trigger_id=resource_id) diff --git a/plugins/modules/scaleway_iam_v1alpha1_api_key.py b/plugins/modules/scaleway_iam_v1alpha1_api_key.py index 1103a78..6624309 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_api_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_api_key.py @@ -30,6 +30,10 @@ default: present choices: ["present", "absent"] type: str + access_key: + description: access_key + type: str + required: false description: description: description type: str @@ -104,7 +108,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("access_key", None) if id is not None: resource = api.get_api_key(access_key=resource_id) diff --git a/plugins/modules/scaleway_iam_v1alpha1_application.py b/plugins/modules/scaleway_iam_v1alpha1_application.py index a136550..a0c51e7 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_application.py +++ b/plugins/modules/scaleway_iam_v1alpha1_application.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + application_id: + description: application_id type: str required: false description: @@ -97,7 +97,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("application_id", None) if id is not None: resource = api.get_application(application_id=resource_id) diff --git a/plugins/modules/scaleway_iam_v1alpha1_group.py b/plugins/modules/scaleway_iam_v1alpha1_group.py index 36216fa..7c38020 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_group.py +++ b/plugins/modules/scaleway_iam_v1alpha1_group.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + group_id: + description: group_id type: str required: false description: @@ -97,7 +97,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("group_id", None) if id is not None: resource = api.get_group(group_id=resource_id) diff --git a/plugins/modules/scaleway_iam_v1alpha1_policy.py b/plugins/modules/scaleway_iam_v1alpha1_policy.py index 9194fcf..2310657 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_policy.py +++ b/plugins/modules/scaleway_iam_v1alpha1_policy.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + policy_id: + description: policy_id type: str required: false description: @@ -124,7 +124,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("policy_id", None) if id is not None: resource = api.get_policy(policy_id=resource_id) diff --git a/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py index d41c6d7..9597ab2 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py +++ b/plugins/modules/scaleway_iam_v1alpha1_ssh_key.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + ssh_key_id: + description: ssh_key_id type: str required: false public_key: @@ -98,7 +98,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IamV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("ssh_key_id", None) if id is not None: resource = api.get_ssh_key(ssh_key_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_image.py b/plugins/modules/scaleway_instance_v1_image.py index 804e16e..0cf26d8 100644 --- a/plugins/modules/scaleway_instance_v1_image.py +++ b/plugins/modules/scaleway_instance_v1_image.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - image: - description: image + image_id: + description: image_id type: str required: false root_volume: @@ -124,7 +124,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("image_id", None) if id is not None: resource = api.get_image(image_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_ip.py b/plugins/modules/scaleway_instance_v1_ip.py index 913dcba..3016627 100644 --- a/plugins/modules/scaleway_instance_v1_ip.py +++ b/plugins/modules/scaleway_instance_v1_ip.py @@ -110,7 +110,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("ip", None) if id is not None: resource = api.get_ip(ip=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_placement_group.py b/plugins/modules/scaleway_instance_v1_placement_group.py index ae56625..6f40996 100644 --- a/plugins/modules/scaleway_instance_v1_placement_group.py +++ b/plugins/modules/scaleway_instance_v1_placement_group.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - placement_group: - description: placement_group + placement_group_id: + description: placement_group_id type: str required: false policy_mode: @@ -116,7 +116,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("placement_group_id", None) if id is not None: resource = api.get_placement_group(placement_group_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_private_nic.py b/plugins/modules/scaleway_instance_v1_private_nic.py index 8dc9e95..55ef2c4 100644 --- a/plugins/modules/scaleway_instance_v1_private_nic.py +++ b/plugins/modules/scaleway_instance_v1_private_nic.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - private_nic: - description: private_nic + private_nic_id: + description: private_nic_id type: str required: false server_id: @@ -103,7 +103,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("private_nic_id", None) if id is not None: resource = api.get_private_nic(private_nic_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_security_group.py b/plugins/modules/scaleway_instance_v1_security_group.py index ce98210..c49c5c9 100644 --- a/plugins/modules/scaleway_instance_v1_security_group.py +++ b/plugins/modules/scaleway_instance_v1_security_group.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - security_group: - description: security_group + security_group_id: + description: security_group_id type: str required: false description: @@ -138,7 +138,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("security_group_id", None) if id is not None: resource = api.get_security_group(security_group_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_security_group_rule.py b/plugins/modules/scaleway_instance_v1_security_group_rule.py index aa16274..003e304 100644 --- a/plugins/modules/scaleway_instance_v1_security_group_rule.py +++ b/plugins/modules/scaleway_instance_v1_security_group_rule.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - rule: - description: rule + security_group_rule_id: + description: security_group_rule_id type: str required: false security_group_id: @@ -134,7 +134,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("security_group_rule_id", None) if id is not None: resource = api.get_security_group_rule(security_group_rule_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_snapshot.py b/plugins/modules/scaleway_instance_v1_snapshot.py index 0d9e5d5..90da43d 100644 --- a/plugins/modules/scaleway_instance_v1_snapshot.py +++ b/plugins/modules/scaleway_instance_v1_snapshot.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - snapshot: - description: snapshot + snapshot_id: + description: snapshot_id type: str required: false volume_type: @@ -126,7 +126,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("snapshot_id", None) if id is not None: resource = api.get_snapshot(snapshot_id=resource_id) diff --git a/plugins/modules/scaleway_instance_v1_volume.py b/plugins/modules/scaleway_instance_v1_volume.py index 6d46403..30c819b 100644 --- a/plugins/modules/scaleway_instance_v1_volume.py +++ b/plugins/modules/scaleway_instance_v1_volume.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - volume: - description: volume + volume_id: + description: volume_id type: str required: false volume_type: @@ -121,7 +121,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = InstanceV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("volume_id", None) if id is not None: resource = api.get_volume(volume_id=resource_id) diff --git a/plugins/modules/scaleway_iot_v1_device.py b/plugins/modules/scaleway_iot_v1_device.py index 6f32649..a363a8a 100644 --- a/plugins/modules/scaleway_iot_v1_device.py +++ b/plugins/modules/scaleway_iot_v1_device.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + device_id: + description: device_id type: str required: false hub_id: @@ -126,7 +126,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("device_id", None) if id is not None: resource = api.get_device(device_id=resource_id) diff --git a/plugins/modules/scaleway_iot_v1_hub.py b/plugins/modules/scaleway_iot_v1_hub.py index f03111b..4fb024d 100644 --- a/plugins/modules/scaleway_iot_v1_hub.py +++ b/plugins/modules/scaleway_iot_v1_hub.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + hub_id: + description: hub_id type: str required: false region: @@ -133,7 +133,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("hub_id", None) if id is not None: resource = api.get_hub(hub_id=resource_id) diff --git a/plugins/modules/scaleway_iot_v1_network.py b/plugins/modules/scaleway_iot_v1_network.py index 5ba365e..a15fd6a 100644 --- a/plugins/modules/scaleway_iot_v1_network.py +++ b/plugins/modules/scaleway_iot_v1_network.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + network_id: + description: network_id type: str required: false hub_id: @@ -113,7 +113,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("network_id", None) if id is not None: resource = api.get_network(network_id=resource_id) diff --git a/plugins/modules/scaleway_iot_v1_route.py b/plugins/modules/scaleway_iot_v1_route.py index 4a74610..93da4d6 100644 --- a/plugins/modules/scaleway_iot_v1_route.py +++ b/plugins/modules/scaleway_iot_v1_route.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + route_id: + description: route_id type: str required: false hub_id: @@ -126,7 +126,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = IotV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("route_id", None) if id is not None: resource = api.get_route(route_id=resource_id) diff --git a/plugins/modules/scaleway_k8s_v1_cluster.py b/plugins/modules/scaleway_k8s_v1_cluster.py index c628d91..3fbe017 100644 --- a/plugins/modules/scaleway_k8s_v1_cluster.py +++ b/plugins/modules/scaleway_k8s_v1_cluster.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + cluster_id: + description: cluster_id type: str required: false type_: @@ -215,7 +215,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("cluster_id", None) if id is not None: resource = api.get_cluster(cluster_id=resource_id) diff --git a/plugins/modules/scaleway_k8s_v1_pool.py b/plugins/modules/scaleway_k8s_v1_pool.py index a4ee0f5..d1f8701 100644 --- a/plugins/modules/scaleway_k8s_v1_pool.py +++ b/plugins/modules/scaleway_k8s_v1_pool.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + pool_id: + description: pool_id type: str required: false cluster_id: @@ -193,7 +193,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = K8SV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("pool_id", None) if id is not None: resource = api.get_pool(pool_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_acl.py b/plugins/modules/scaleway_lb_v1_acl.py index 326dae7..df0f3ff 100644 --- a/plugins/modules/scaleway_lb_v1_acl.py +++ b/plugins/modules/scaleway_lb_v1_acl.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + acl_id: + description: acl_id type: str required: false frontend_id: @@ -125,7 +125,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("acl_id", None) if id is not None: resource = api.get_acl(acl_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_backend.py b/plugins/modules/scaleway_lb_v1_backend.py index ae99a76..c649420 100644 --- a/plugins/modules/scaleway_lb_v1_backend.py +++ b/plugins/modules/scaleway_lb_v1_backend.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + backend_id: + description: backend_id type: str required: false lb_id: @@ -232,7 +232,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("backend_id", None) if id is not None: resource = api.get_backend(backend_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_certificate.py b/plugins/modules/scaleway_lb_v1_certificate.py index 39ad3d4..7583845 100644 --- a/plugins/modules/scaleway_lb_v1_certificate.py +++ b/plugins/modules/scaleway_lb_v1_certificate.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + certificate_id: + description: certificate_id type: str required: false lb_id: @@ -114,7 +114,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("certificate_id", None) if id is not None: resource = api.get_certificate(certificate_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_frontend.py b/plugins/modules/scaleway_lb_v1_frontend.py index f74bec9..c7eed0a 100644 --- a/plugins/modules/scaleway_lb_v1_frontend.py +++ b/plugins/modules/scaleway_lb_v1_frontend.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + frontend_id: + description: frontend_id type: str required: false lb_id: @@ -134,7 +134,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("frontend_id", None) if id is not None: resource = api.get_frontend(frontend_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_lb.py b/plugins/modules/scaleway_lb_v1_lb.py index e858549..d4eb23c 100644 --- a/plugins/modules/scaleway_lb_v1_lb.py +++ b/plugins/modules/scaleway_lb_v1_lb.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + lb_id: + description: lb_id type: str required: false description: @@ -153,7 +153,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("lb_id", None) if id is not None: resource = api.get_lb(lb_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_route.py b/plugins/modules/scaleway_lb_v1_route.py index cfa407d..da706a7 100644 --- a/plugins/modules/scaleway_lb_v1_route.py +++ b/plugins/modules/scaleway_lb_v1_route.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + route_id: + description: route_id type: str required: false frontend_id: @@ -102,7 +102,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("route_id", None) if id is not None: resource = api.get_route(route_id=resource_id) diff --git a/plugins/modules/scaleway_lb_v1_subscriber.py b/plugins/modules/scaleway_lb_v1_subscriber.py index 1655b68..bb6ca4e 100644 --- a/plugins/modules/scaleway_lb_v1_subscriber.py +++ b/plugins/modules/scaleway_lb_v1_subscriber.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + subscriber_id: + description: subscriber_id type: str required: false name: @@ -109,7 +109,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = LbZonedV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("subscriber_id", None) if id is not None: resource = api.get_subscriber(subscriber_id=resource_id) diff --git a/plugins/modules/scaleway_mnq_v1alpha1_credential.py b/plugins/modules/scaleway_mnq_v1alpha1_credential.py index 0234c17..ae4d707 100644 --- a/plugins/modules/scaleway_mnq_v1alpha1_credential.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_credential.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + credential_id: + description: credential_id type: str required: false namespace_id: @@ -107,7 +107,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("credential_id", None) if id is not None: resource = api.get_credential(credential_id=resource_id) diff --git a/plugins/modules/scaleway_mnq_v1alpha1_namespace.py b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py index 4e1ba49..ee18bb7 100644 --- a/plugins/modules/scaleway_mnq_v1alpha1_namespace.py +++ b/plugins/modules/scaleway_mnq_v1alpha1_namespace.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + namespace_id: + description: namespace_id type: str required: false region: @@ -108,7 +108,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = MnqV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("namespace_id", None) if id is not None: resource = api.get_namespace(namespace_id=resource_id) diff --git a/plugins/modules/scaleway_rdb_v1_database_backup.py b/plugins/modules/scaleway_rdb_v1_database_backup.py index f80dfd6..d66c913 100644 --- a/plugins/modules/scaleway_rdb_v1_database_backup.py +++ b/plugins/modules/scaleway_rdb_v1_database_backup.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + database_backup_id: + description: database_backup_id type: str required: false instance_id: @@ -116,7 +116,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("database_backup_id", None) if id is not None: resource = api.get_database_backup(database_backup_id=resource_id) diff --git a/plugins/modules/scaleway_rdb_v1_endpoint.py b/plugins/modules/scaleway_rdb_v1_endpoint.py index 2c65832..512b8ae 100644 --- a/plugins/modules/scaleway_rdb_v1_endpoint.py +++ b/plugins/modules/scaleway_rdb_v1_endpoint.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + endpoint_id: + description: endpoint_id type: str required: false instance_id: @@ -107,7 +107,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("endpoint_id", None) if id is not None: resource = api.get_endpoint(endpoint_id=resource_id) diff --git a/plugins/modules/scaleway_rdb_v1_instance.py b/plugins/modules/scaleway_rdb_v1_instance.py index 0225817..c929091 100644 --- a/plugins/modules/scaleway_rdb_v1_instance.py +++ b/plugins/modules/scaleway_rdb_v1_instance.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + instance_id: + description: instance_id type: str required: false engine: @@ -203,7 +203,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("instance_id", None) if id is not None: resource = api.get_instance(instance_id=resource_id) diff --git a/plugins/modules/scaleway_rdb_v1_read_replica.py b/plugins/modules/scaleway_rdb_v1_read_replica.py index af8727a..e2f40ed 100644 --- a/plugins/modules/scaleway_rdb_v1_read_replica.py +++ b/plugins/modules/scaleway_rdb_v1_read_replica.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + read_replica_id: + description: read_replica_id type: str required: false instance_id: @@ -105,7 +105,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("read_replica_id", None) if id is not None: resource = api.get_read_replica(read_replica_id=resource_id) diff --git a/plugins/modules/scaleway_rdb_v1_snapshot.py b/plugins/modules/scaleway_rdb_v1_snapshot.py index 07ddca5..c7afc3d 100644 --- a/plugins/modules/scaleway_rdb_v1_snapshot.py +++ b/plugins/modules/scaleway_rdb_v1_snapshot.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + snapshot_id: + description: snapshot_id type: str required: false instance_id: @@ -108,7 +108,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RdbV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("snapshot_id", None) if id is not None: resource = api.get_snapshot(snapshot_id=resource_id) diff --git a/plugins/modules/scaleway_redis_v1_cluster.py b/plugins/modules/scaleway_redis_v1_cluster.py index b2dec96..2ff4179 100644 --- a/plugins/modules/scaleway_redis_v1_cluster.py +++ b/plugins/modules/scaleway_redis_v1_cluster.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + cluster_id: + description: cluster_id type: str required: false version: @@ -164,7 +164,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RedisV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("cluster_id", None) if id is not None: resource = api.get_cluster(cluster_id=resource_id) diff --git a/plugins/modules/scaleway_registry_v1_namespace.py b/plugins/modules/scaleway_registry_v1_namespace.py index 18a48ed..952a3ba 100644 --- a/plugins/modules/scaleway_registry_v1_namespace.py +++ b/plugins/modules/scaleway_registry_v1_namespace.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + namespace_id: + description: namespace_id type: str required: false description: @@ -120,7 +120,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = RegistryV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("namespace_id", None) if id is not None: resource = api.get_namespace(namespace_id=resource_id) diff --git a/plugins/modules/scaleway_secret_v1alpha1_secret.py b/plugins/modules/scaleway_secret_v1alpha1_secret.py index 8fcef85..50829ac 100644 --- a/plugins/modules/scaleway_secret_v1alpha1_secret.py +++ b/plugins/modules/scaleway_secret_v1alpha1_secret.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + secret_id: + description: secret_id type: str required: false name: @@ -125,7 +125,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = SecretV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("secret_id", None) if id is not None: resource = api.get_secret(secret_id=resource_id) diff --git a/plugins/modules/scaleway_test_v1_human.py b/plugins/modules/scaleway_test_v1_human.py index eac3153..dd300f2 100644 --- a/plugins/modules/scaleway_test_v1_human.py +++ b/plugins/modules/scaleway_test_v1_human.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + human_id: + description: human_id type: str required: false height: @@ -154,7 +154,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = TestV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("human_id", None) if id is not None: resource = api.get_human(human_id=resource_id) diff --git a/plugins/modules/scaleway_vpc_v1_private_network.py b/plugins/modules/scaleway_vpc_v1_private_network.py index 4dbdfd7..3b22e85 100644 --- a/plugins/modules/scaleway_vpc_v1_private_network.py +++ b/plugins/modules/scaleway_vpc_v1_private_network.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + private_network_id: + description: private_network_id type: str required: false zone: @@ -111,7 +111,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("private_network_id", None) if id is not None: resource = api.get_private_network(private_network_id=resource_id) diff --git a/plugins/modules/scaleway_vpc_v2_private_network.py b/plugins/modules/scaleway_vpc_v2_private_network.py index 6760ff5..d4c94c6 100644 --- a/plugins/modules/scaleway_vpc_v2_private_network.py +++ b/plugins/modules/scaleway_vpc_v2_private_network.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + private_network_id: + description: private_network_id type: str required: false region: @@ -121,7 +121,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcV2API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("private_network_id", None) if id is not None: resource = api.get_private_network(private_network_id=resource_id) diff --git a/plugins/modules/scaleway_vpc_v2_vpc.py b/plugins/modules/scaleway_vpc_v2_vpc.py index 92b60fe..98d0282 100644 --- a/plugins/modules/scaleway_vpc_v2_vpc.py +++ b/plugins/modules/scaleway_vpc_v2_vpc.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + vpc_id: + description: vpc_id type: str required: false default_private_network_name: @@ -114,7 +114,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcV2API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("vpc_id", None) if id is not None: resource = api.get_vpc(vpc_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_dhcp.py b/plugins/modules/scaleway_vpcgw_v1_dhcp.py index 1be877f..9efab5a 100644 --- a/plugins/modules/scaleway_vpcgw_v1_dhcp.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + dhcp_id: + description: dhcp_id type: str required: false subnet: @@ -160,7 +160,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("dhcp_id", None) if id is not None: resource = api.get_dhcp(dhcp_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py index 945e52a..925d83a 100644 --- a/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp_entry.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + dhcp_entry_id: + description: dhcp_entry_id type: str required: false gateway_network_id: @@ -104,7 +104,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("dhcp_entry_id", None) if id is not None: resource = api.get_dhcp_entry(dhcp_entry_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_gateway.py b/plugins/modules/scaleway_vpcgw_v1_gateway.py index c112118..ae0bdb6 100644 --- a/plugins/modules/scaleway_vpcgw_v1_gateway.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + gateway_id: + description: gateway_id type: str required: false type_: @@ -149,7 +149,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("gateway_id", None) if id is not None: resource = api.get_gateway(gateway_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_gateway_network.py b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py index 75f6b34..bf570a7 100644 --- a/plugins/modules/scaleway_vpcgw_v1_gateway_network.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway_network.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + gateway_network_id: + description: gateway_network_id type: str required: false gateway_id: @@ -125,7 +125,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("gateway_network_id", None) if id is not None: resource = api.get_gateway_network(gateway_network_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_ip.py b/plugins/modules/scaleway_vpcgw_v1_ip.py index 14bd831..9844e9e 100644 --- a/plugins/modules/scaleway_vpcgw_v1_ip.py +++ b/plugins/modules/scaleway_vpcgw_v1_ip.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + ip_id: + description: ip_id type: str required: false zone: @@ -101,7 +101,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("ip_id", None) if id is not None: resource = api.get_ip(ip_id=resource_id) diff --git a/plugins/modules/scaleway_vpcgw_v1_pat_rule.py b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py index 867f1e1..1cc80d2 100644 --- a/plugins/modules/scaleway_vpcgw_v1_pat_rule.py +++ b/plugins/modules/scaleway_vpcgw_v1_pat_rule.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + pat_rule_id: + description: pat_rule_id type: str required: false gateway_id: @@ -119,7 +119,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = VpcgwV1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("pat_rule_id", None) if id is not None: resource = api.get_pat_rule(pat_rule_id=resource_id) diff --git a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py index 6427751..ae9e8ab 100644 --- a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py +++ b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py @@ -30,8 +30,8 @@ default: present choices: ["present", "absent"] type: str - id: - description: id + hosting_id: + description: hosting_id type: str required: false offer_id: @@ -135,7 +135,7 @@ def create(module: AnsibleModule, client: "Client") -> None: api = WebhostingV1Alpha1API(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("hosting_id", None) if id is not None: resource = api.get_hosting(hosting_id=resource_id) diff --git a/templates/module.py.jinja b/templates/module.py.jinja index 250c7e7..55f6f1c 100644 --- a/templates/module.py.jinja +++ b/templates/module.py.jinja @@ -30,9 +30,9 @@ options: default: present choices: ["present", "absent"] type: str - {%- if not api.method_create.has_request_field(api.response_id_field.name) %} - {{ api.response_id_field.name }}: - description: {{ api.response_id_field.name }} + {%- if not api.method_create.has_request_field(api.request_id_field.name) %} + {{ api.request_id_field.name }}: + description: {{ api.request_id_field.name }} type: str required: false {%- endif %} @@ -138,7 +138,7 @@ except ImportError: def create(module: AnsibleModule, client: "Client") -> None: api = {{ api.class_name }}(client) - resource_id = module.params.pop("id", None) + resource_id = module.params.pop("{{ api.request_id_field.name }}", None) if id is not None: resource = api.get_{{ api.group }}({{ api.request_id_field.name }}=resource_id) From 9445ea2c23b77e9c055988d186e7ecaf731f53d9 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Mon, 17 Jul 2023 18:57:39 +0200 Subject: [PATCH 13/19] ignore --- galaxy.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/galaxy.yml b/galaxy.yml index 375bdbb..d95cb8d 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -24,3 +24,6 @@ build_ignore: - changelogs/.plugin-cache.yaml - .DS_Store - "*.tar.gz" + - generator.py + - templates + - .github From 4d433fbb215be7cdfdda9bb7144f2accce3ed6f1 Mon Sep 17 00:00:00 2001 From: jaime Bernabe <6184069+Monitob@users.noreply.github.com> Date: Tue, 18 Jul 2023 11:27:41 +0200 Subject: [PATCH 14/19] fix: ci typo --- .github/workflows/extra-docs-linting.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/extra-docs-linting.yml b/.github/workflows/extra-docs-linting.yml index 050726d..f66f2d5 100644 --- a/.github/workflows/extra-docs-linting.yml +++ b/.github/workflows/extra-docs-linting.yml @@ -25,13 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v3 with: -<<<<<<< HEAD - python-version: '3.10' -||||||| parent of b6150b7 (ci: set python version 3.9) - python-version: '3.11' -======= python-version: '3.9' ->>>>>>> b6150b7 (ci: set python version 3.9) - name: Install antsibull-docs run: pip install antsibull-docs --disable-pip-version-check From ca84842d16db6c50310fe5521daef2e4bc57e33d Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 18 Jul 2023 13:47:53 +0200 Subject: [PATCH 15/19] remove unwanted files during tests --- .github/workflows/ansible-test-sanity.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index a82ded2..8001a4a 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -24,6 +24,9 @@ jobs: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: + pre-test-cmd: | + rm generator.py + rm -r templates ansible-core-version: ${{ matrix.ansible }} origin-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }} @@ -50,6 +53,9 @@ jobs: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: + pre-test-cmd: | + rm generator.py + rm -r templates ansible-core-version: ${{ matrix.ansible }} origin-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }} From 2a18bf9be1d01452a9dd63e0271ddbd93f20c7de Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 18 Jul 2023 13:55:09 +0200 Subject: [PATCH 16/19] fix pre-test-cmd --- .github/workflows/ansible-test-sanity.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index 8001a4a..fe5fcd1 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -24,9 +24,7 @@ jobs: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: - pre-test-cmd: | - rm generator.py - rm -r templates + pre-test-cmd: rm -r generator.py templates ansible-core-version: ${{ matrix.ansible }} origin-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }} @@ -53,9 +51,7 @@ jobs: - name: Perform testing uses: ansible-community/ansible-test-gh-action@release/v1 with: - pre-test-cmd: | - rm generator.py - rm -r templates + pre-test-cmd: rm -r generator.py templates ansible-core-version: ${{ matrix.ansible }} origin-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }} From e3240ab319c138a2c534092cc9456582da37819d Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 18 Jul 2023 14:26:21 +0200 Subject: [PATCH 17/19] reformat --- generator.py | 8 +++--- .../modules/scaleway_account_v2_project.py | 3 +-- .../scaleway_function_v1beta1_function.py | 27 ++++++++++++++++++- plugins/modules/scaleway_lb_v1_backend.py | 9 ++++++- plugins/modules/scaleway_lb_v1_lb.py | 7 ++++- plugins/modules/scaleway_test_v1_human.py | 12 ++++++++- 6 files changed, 57 insertions(+), 9 deletions(-) diff --git a/generator.py b/generator.py index 4d0feeb..a43a690 100644 --- a/generator.py +++ b/generator.py @@ -1,10 +1,11 @@ import importlib import inspect +import pkgutil +import subprocess from dataclasses import fields from datetime import datetime from enum import Enum from inspect import Parameter, isclass -import pkgutil from types import FunctionType, NoneType from typing import ( Dict, @@ -19,9 +20,8 @@ from jinja2 import Environment, FileSystemLoader, select_autoescape -from scaleway import ALL_REGIONS, WaitForOptions - import scaleway +from scaleway import ALL_REGIONS, WaitForOptions class FieldTypeDescriptor: @@ -310,6 +310,8 @@ def main() -> None: module_names.append(descriptor.name) + subprocess.run(["black", "plugins/modules"]) + with open(f"meta/runtime.yml", "w") as f: content = env.get_template("runtime.yml.jinja").render( module_names=module_names diff --git a/plugins/modules/scaleway_account_v2_project.py b/plugins/modules/scaleway_account_v2_project.py index 599a8b9..014920f 100644 --- a/plugins/modules/scaleway_account_v2_project.py +++ b/plugins/modules/scaleway_account_v2_project.py @@ -120,8 +120,7 @@ def delete(module: AnsibleModule, client: "Client") -> None: resource_id = module.params.pop("id", None) if resource_id is not None: - resource = api.get_project( - ) + resource = api.get_project() elif module.params.get("name", None) is not None: resources = api.list_projects_all( name=module.params["name"], diff --git a/plugins/modules/scaleway_function_v1beta1_function.py b/plugins/modules/scaleway_function_v1beta1_function.py index 290b0f3..e4c65fc 100644 --- a/plugins/modules/scaleway_function_v1beta1_function.py +++ b/plugins/modules/scaleway_function_v1beta1_function.py @@ -284,7 +284,32 @@ def main() -> None: runtime=dict( type="str", required=True, - choices=["unknown_runtime", "golang", "python", "python3", "node8", "node10", "node14", "node16", "node17", "python37", "python38", "python39", "python310", "go113", "go117", "go118", "node18", "rust165", "go119", "python311", "php82", "node19", "go120", "node20"], + choices=[ + "unknown_runtime", + "golang", + "python", + "python3", + "node8", + "node10", + "node14", + "node16", + "node17", + "python37", + "python38", + "python39", + "python310", + "go113", + "go117", + "go118", + "node18", + "rust165", + "go119", + "python311", + "php82", + "node19", + "go120", + "node20", + ], ), privacy=dict( type="str", diff --git a/plugins/modules/scaleway_lb_v1_backend.py b/plugins/modules/scaleway_lb_v1_backend.py index c649420..ebb62bc 100644 --- a/plugins/modules/scaleway_lb_v1_backend.py +++ b/plugins/modules/scaleway_lb_v1_backend.py @@ -338,7 +338,14 @@ def main() -> None: proxy_protocol=dict( type="str", required=True, - choices=["proxy_protocol_unknown", "proxy_protocol_none", "proxy_protocol_v1", "proxy_protocol_v2", "proxy_protocol_v2_ssl", "proxy_protocol_v2_ssl_cn"], + choices=[ + "proxy_protocol_unknown", + "proxy_protocol_none", + "proxy_protocol_v1", + "proxy_protocol_v2", + "proxy_protocol_v2_ssl", + "proxy_protocol_v2_ssl_cn", + ], ), zone=dict( type="str", diff --git a/plugins/modules/scaleway_lb_v1_lb.py b/plugins/modules/scaleway_lb_v1_lb.py index d4eb23c..2400dfe 100644 --- a/plugins/modules/scaleway_lb_v1_lb.py +++ b/plugins/modules/scaleway_lb_v1_lb.py @@ -242,7 +242,12 @@ def main() -> None: ssl_compatibility_level=dict( type="str", required=True, - choices=["ssl_compatibility_level_unknown", "ssl_compatibility_level_intermediate", "ssl_compatibility_level_modern", "ssl_compatibility_level_old"], + choices=[ + "ssl_compatibility_level_unknown", + "ssl_compatibility_level_intermediate", + "ssl_compatibility_level_modern", + "ssl_compatibility_level_old", + ], ), zone=dict( type="str", diff --git a/plugins/modules/scaleway_test_v1_human.py b/plugins/modules/scaleway_test_v1_human.py index dd300f2..a42cbd2 100644 --- a/plugins/modules/scaleway_test_v1_human.py +++ b/plugins/modules/scaleway_test_v1_human.py @@ -249,7 +249,17 @@ def main() -> None: eyes_color=dict( type="str", required=True, - choices=["unknown", "amber", "blue", "brown", "gray", "green", "hazel", "red", "violet"], + choices=[ + "unknown", + "amber", + "blue", + "brown", + "gray", + "green", + "hazel", + "red", + "violet", + ], ), name=dict( type="str", From 2282b5c49316140a6af26c62dbc0d66115423721 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 18 Jul 2023 14:59:25 +0200 Subject: [PATCH 18/19] fix: add elements in argument spec --- plugins/modules/scaleway_baremetal_v1_server.py | 2 ++ plugins/modules/scaleway_container_v1beta1_container.py | 1 + plugins/modules/scaleway_container_v1beta1_namespace.py | 1 + plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py | 1 + plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py | 1 + plugins/modules/scaleway_function_v1beta1_function.py | 1 + plugins/modules/scaleway_function_v1beta1_namespace.py | 1 + plugins/modules/scaleway_iam_v1alpha1_policy.py | 1 + plugins/modules/scaleway_instance_v1_image.py | 1 + plugins/modules/scaleway_instance_v1_ip.py | 1 + plugins/modules/scaleway_instance_v1_placement_group.py | 1 + plugins/modules/scaleway_instance_v1_private_nic.py | 2 ++ plugins/modules/scaleway_instance_v1_security_group.py | 1 + plugins/modules/scaleway_instance_v1_snapshot.py | 1 + plugins/modules/scaleway_instance_v1_volume.py | 1 + plugins/modules/scaleway_k8s_v1_cluster.py | 5 +++++ plugins/modules/scaleway_k8s_v1_pool.py | 1 + plugins/modules/scaleway_lb_v1_backend.py | 1 + plugins/modules/scaleway_lb_v1_frontend.py | 1 + plugins/modules/scaleway_lb_v1_lb.py | 1 + plugins/modules/scaleway_rdb_v1_instance.py | 3 +++ plugins/modules/scaleway_rdb_v1_read_replica.py | 1 + plugins/modules/scaleway_redis_v1_cluster.py | 4 ++++ plugins/modules/scaleway_secret_v1alpha1_secret.py | 1 + plugins/modules/scaleway_vpc_v1_private_network.py | 2 ++ plugins/modules/scaleway_vpc_v2_private_network.py | 2 ++ plugins/modules/scaleway_vpc_v2_vpc.py | 1 + plugins/modules/scaleway_vpcgw_v1_dhcp.py | 2 ++ plugins/modules/scaleway_vpcgw_v1_gateway.py | 2 ++ plugins/modules/scaleway_vpcgw_v1_ip.py | 1 + plugins/modules/scaleway_webhosting_v1alpha1_hosting.py | 2 ++ templates/module.py.jinja | 2 +- 32 files changed, 48 insertions(+), 1 deletion(-) diff --git a/plugins/modules/scaleway_baremetal_v1_server.py b/plugins/modules/scaleway_baremetal_v1_server.py index 90482f7..a78d83c 100644 --- a/plugins/modules/scaleway_baremetal_v1_server.py +++ b/plugins/modules/scaleway_baremetal_v1_server.py @@ -250,6 +250,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), install=dict( type="dict", @@ -258,6 +259,7 @@ def main() -> None: option_ids=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_container_v1beta1_container.py b/plugins/modules/scaleway_container_v1beta1_container.py index 11f04a3..d85d872 100644 --- a/plugins/modules/scaleway_container_v1beta1_container.py +++ b/plugins/modules/scaleway_container_v1beta1_container.py @@ -340,6 +340,7 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, + elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_container_v1beta1_namespace.py b/plugins/modules/scaleway_container_v1beta1_namespace.py index ff649c0..a9ea016 100644 --- a/plugins/modules/scaleway_container_v1beta1_namespace.py +++ b/plugins/modules/scaleway_container_v1beta1_namespace.py @@ -222,6 +222,7 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, + elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py index 1e93aa7..695b2c3 100644 --- a/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py +++ b/plugins/modules/scaleway_domain_v2beta1_ssl_certificate.py @@ -161,6 +161,7 @@ def main() -> None: alternative_dns_zones=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py index 2610c2c..89bc904 100644 --- a/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py +++ b/plugins/modules/scaleway_flexibleip_v1alpha1_flexible_ip.py @@ -209,6 +209,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), server_id=dict( type="str", diff --git a/plugins/modules/scaleway_function_v1beta1_function.py b/plugins/modules/scaleway_function_v1beta1_function.py index e4c65fc..322df6b 100644 --- a/plugins/modules/scaleway_function_v1beta1_function.py +++ b/plugins/modules/scaleway_function_v1beta1_function.py @@ -361,6 +361,7 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, + elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_function_v1beta1_namespace.py b/plugins/modules/scaleway_function_v1beta1_namespace.py index 91eb356..39aa97c 100644 --- a/plugins/modules/scaleway_function_v1beta1_namespace.py +++ b/plugins/modules/scaleway_function_v1beta1_namespace.py @@ -222,6 +222,7 @@ def main() -> None: secret_environment_variables=dict( type="list", required=False, + elements="str", no_log=True, ), ) diff --git a/plugins/modules/scaleway_iam_v1alpha1_policy.py b/plugins/modules/scaleway_iam_v1alpha1_policy.py index 2310657..4995255 100644 --- a/plugins/modules/scaleway_iam_v1alpha1_policy.py +++ b/plugins/modules/scaleway_iam_v1alpha1_policy.py @@ -203,6 +203,7 @@ def main() -> None: rules=dict( type="list", required=False, + elements="str", ), user_id=dict( type="str", diff --git a/plugins/modules/scaleway_instance_v1_image.py b/plugins/modules/scaleway_instance_v1_image.py index 0cf26d8..b3c0cc0 100644 --- a/plugins/modules/scaleway_instance_v1_image.py +++ b/plugins/modules/scaleway_instance_v1_image.py @@ -237,6 +237,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), public=dict( type="bool", diff --git a/plugins/modules/scaleway_instance_v1_ip.py b/plugins/modules/scaleway_instance_v1_ip.py index 3016627..8db41ac 100644 --- a/plugins/modules/scaleway_instance_v1_ip.py +++ b/plugins/modules/scaleway_instance_v1_ip.py @@ -207,6 +207,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), server=dict( type="str", diff --git a/plugins/modules/scaleway_instance_v1_placement_group.py b/plugins/modules/scaleway_instance_v1_placement_group.py index 6f40996..e36fc91 100644 --- a/plugins/modules/scaleway_instance_v1_placement_group.py +++ b/plugins/modules/scaleway_instance_v1_placement_group.py @@ -222,6 +222,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_instance_v1_private_nic.py b/plugins/modules/scaleway_instance_v1_private_nic.py index 55ef2c4..e552078 100644 --- a/plugins/modules/scaleway_instance_v1_private_nic.py +++ b/plugins/modules/scaleway_instance_v1_private_nic.py @@ -186,10 +186,12 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), ip_ids=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_instance_v1_security_group.py b/plugins/modules/scaleway_instance_v1_security_group.py index c49c5c9..751ff4c 100644 --- a/plugins/modules/scaleway_instance_v1_security_group.py +++ b/plugins/modules/scaleway_instance_v1_security_group.py @@ -252,6 +252,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), organization_default=dict( type="bool", diff --git a/plugins/modules/scaleway_instance_v1_snapshot.py b/plugins/modules/scaleway_instance_v1_snapshot.py index 90da43d..eda5073 100644 --- a/plugins/modules/scaleway_instance_v1_snapshot.py +++ b/plugins/modules/scaleway_instance_v1_snapshot.py @@ -223,6 +223,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), organization=dict( type="str", diff --git a/plugins/modules/scaleway_instance_v1_volume.py b/plugins/modules/scaleway_instance_v1_volume.py index 30c819b..d4e2a34 100644 --- a/plugins/modules/scaleway_instance_v1_volume.py +++ b/plugins/modules/scaleway_instance_v1_volume.py @@ -222,6 +222,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), size=dict( type="int", diff --git a/plugins/modules/scaleway_k8s_v1_cluster.py b/plugins/modules/scaleway_k8s_v1_cluster.py index 3fbe017..8333063 100644 --- a/plugins/modules/scaleway_k8s_v1_cluster.py +++ b/plugins/modules/scaleway_k8s_v1_cluster.py @@ -325,6 +325,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), cni=dict( type="str", @@ -343,6 +344,7 @@ def main() -> None: pools=dict( type="list", required=False, + elements="str", ), autoscaler_config=dict( type="dict", @@ -355,10 +357,12 @@ def main() -> None: feature_gates=dict( type="list", required=False, + elements="str", ), admission_plugins=dict( type="list", required=False, + elements="str", ), open_id_connect_config=dict( type="dict", @@ -367,6 +371,7 @@ def main() -> None: apiserver_cert_sans=dict( type="list", required=False, + elements="str", ), private_network_id=dict( type="str", diff --git a/plugins/modules/scaleway_k8s_v1_pool.py b/plugins/modules/scaleway_k8s_v1_pool.py index d1f8701..1f468ff 100644 --- a/plugins/modules/scaleway_k8s_v1_pool.py +++ b/plugins/modules/scaleway_k8s_v1_pool.py @@ -325,6 +325,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), kubelet_args=dict( type="dict", diff --git a/plugins/modules/scaleway_lb_v1_backend.py b/plugins/modules/scaleway_lb_v1_backend.py index ebb62bc..b316248 100644 --- a/plugins/modules/scaleway_lb_v1_backend.py +++ b/plugins/modules/scaleway_lb_v1_backend.py @@ -329,6 +329,7 @@ def main() -> None: server_ip=dict( type="list", required=True, + elements="str", ), on_marked_down_action=dict( type="str", diff --git a/plugins/modules/scaleway_lb_v1_frontend.py b/plugins/modules/scaleway_lb_v1_frontend.py index c7eed0a..7a7420c 100644 --- a/plugins/modules/scaleway_lb_v1_frontend.py +++ b/plugins/modules/scaleway_lb_v1_frontend.py @@ -247,6 +247,7 @@ def main() -> None: certificate_ids=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_lb_v1_lb.py b/plugins/modules/scaleway_lb_v1_lb.py index 2400dfe..9383af1 100644 --- a/plugins/modules/scaleway_lb_v1_lb.py +++ b/plugins/modules/scaleway_lb_v1_lb.py @@ -276,6 +276,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_rdb_v1_instance.py b/plugins/modules/scaleway_rdb_v1_instance.py index c929091..ccaa170 100644 --- a/plugins/modules/scaleway_rdb_v1_instance.py +++ b/plugins/modules/scaleway_rdb_v1_instance.py @@ -338,14 +338,17 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), init_settings=dict( type="list", required=False, + elements="str", ), init_endpoints=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_rdb_v1_read_replica.py b/plugins/modules/scaleway_rdb_v1_read_replica.py index e2f40ed..ee4f2a3 100644 --- a/plugins/modules/scaleway_rdb_v1_read_replica.py +++ b/plugins/modules/scaleway_rdb_v1_read_replica.py @@ -183,6 +183,7 @@ def main() -> None: endpoint_spec=dict( type="list", required=False, + elements="str", ), same_zone=dict( type="bool", diff --git a/plugins/modules/scaleway_redis_v1_cluster.py b/plugins/modules/scaleway_redis_v1_cluster.py index 2ff4179..84b26d9 100644 --- a/plugins/modules/scaleway_redis_v1_cluster.py +++ b/plugins/modules/scaleway_redis_v1_cluster.py @@ -277,6 +277,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), cluster_size=dict( type="int", @@ -285,14 +286,17 @@ def main() -> None: acl_rules=dict( type="list", required=False, + elements="str", ), endpoints=dict( type="list", required=False, + elements="str", ), cluster_settings=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_secret_v1alpha1_secret.py b/plugins/modules/scaleway_secret_v1alpha1_secret.py index 50829ac..f710fc5 100644 --- a/plugins/modules/scaleway_secret_v1alpha1_secret.py +++ b/plugins/modules/scaleway_secret_v1alpha1_secret.py @@ -223,6 +223,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), description=dict( type="str", diff --git a/plugins/modules/scaleway_vpc_v1_private_network.py b/plugins/modules/scaleway_vpc_v1_private_network.py index 3b22e85..bfc8e98 100644 --- a/plugins/modules/scaleway_vpc_v1_private_network.py +++ b/plugins/modules/scaleway_vpc_v1_private_network.py @@ -203,10 +203,12 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), subnets=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_vpc_v2_private_network.py b/plugins/modules/scaleway_vpc_v2_private_network.py index d4c94c6..319865d 100644 --- a/plugins/modules/scaleway_vpc_v2_private_network.py +++ b/plugins/modules/scaleway_vpc_v2_private_network.py @@ -214,10 +214,12 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), subnets=dict( type="list", required=False, + elements="str", ), vpc_id=dict( type="str", diff --git a/plugins/modules/scaleway_vpc_v2_vpc.py b/plugins/modules/scaleway_vpc_v2_vpc.py index 98d0282..9262b4c 100644 --- a/plugins/modules/scaleway_vpc_v2_vpc.py +++ b/plugins/modules/scaleway_vpc_v2_vpc.py @@ -200,6 +200,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_vpcgw_v1_dhcp.py b/plugins/modules/scaleway_vpcgw_v1_dhcp.py index 9efab5a..c4d6e19 100644 --- a/plugins/modules/scaleway_vpcgw_v1_dhcp.py +++ b/plugins/modules/scaleway_vpcgw_v1_dhcp.py @@ -277,10 +277,12 @@ def main() -> None: dns_servers_override=dict( type="list", required=False, + elements="str", ), dns_search=dict( type="list", required=False, + elements="str", ), dns_local_name=dict( type="str", diff --git a/plugins/modules/scaleway_vpcgw_v1_gateway.py b/plugins/modules/scaleway_vpcgw_v1_gateway.py index ae0bdb6..e8399b0 100644 --- a/plugins/modules/scaleway_vpcgw_v1_gateway.py +++ b/plugins/modules/scaleway_vpcgw_v1_gateway.py @@ -254,10 +254,12 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), upstream_dns_servers=dict( type="list", required=False, + elements="str", ), ip_id=dict( type="str", diff --git a/plugins/modules/scaleway_vpcgw_v1_ip.py b/plugins/modules/scaleway_vpcgw_v1_ip.py index 9844e9e..874e9cc 100644 --- a/plugins/modules/scaleway_vpcgw_v1_ip.py +++ b/plugins/modules/scaleway_vpcgw_v1_ip.py @@ -178,6 +178,7 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), ) diff --git a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py index ae9e8ab..98f288c 100644 --- a/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py +++ b/plugins/modules/scaleway_webhosting_v1alpha1_hosting.py @@ -225,10 +225,12 @@ def main() -> None: tags=dict( type="list", required=False, + elements="str", ), option_ids=dict( type="list", required=False, + elements="str", ), ) diff --git a/templates/module.py.jinja b/templates/module.py.jinja index 55f6f1c..096f3e9 100644 --- a/templates/module.py.jinja +++ b/templates/module.py.jinja @@ -267,7 +267,7 @@ def main() -> None: type="{{ field.type.name }}", required={{ field.required }}{%- if field.type.choices %}, choices=[{%- for choice in field.type.choices %}"{{ choice }}"{%- if not loop.last %}, {% endif %}{%- endfor %}]{%- endif %}, - {%- if field.name == "list" %} + {%- if field.type.name == "list" %} elements="str", {%- endif %} {%- if ("password" in field.name) or ("secret" in field.name) or ("key" in field.name) %} From a65dc08d9b6fa3630c92c523fe9d9e17635bbd18 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 18 Jul 2023 17:18:42 +0200 Subject: [PATCH 19/19] update sanity --- .github/workflows/ansible-test-sanity.yml | 24 +---------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/.github/workflows/ansible-test-sanity.yml b/.github/workflows/ansible-test-sanity.yml index fe5fcd1..826633e 100644 --- a/.github/workflows/ansible-test-sanity.yml +++ b/.github/workflows/ansible-test-sanity.yml @@ -10,36 +10,15 @@ on: workflow_dispatch: jobs: - sanity_29: - timeout-minutes: 60 - name: Sanity (Ⓐ$${{ matrix.ansible }}) - strategy: - matrix: - ansible: - - stable-2.9 - python: - - 3.8 - runs-on: ubuntu-latest - steps: - - name: Perform testing - uses: ansible-community/ansible-test-gh-action@release/v1 - with: - pre-test-cmd: rm -r generator.py templates - ansible-core-version: ${{ matrix.ansible }} - origin-python-version: ${{ matrix.python }} - target-python-version: ${{ matrix.python }} - testing-type: sanity - sanity: timeout-minutes: 30 name: Sanity (Ⓐ$${{ matrix.ansible }}) strategy: matrix: ansible: - - stable-2.10 - - stable-2.11 - stable-2.12 - stable-2.13 + - stable-2.14 python: - 3.8 # https://github.com/yaml/pyyaml/issues/601 @@ -53,6 +32,5 @@ jobs: with: pre-test-cmd: rm -r generator.py templates ansible-core-version: ${{ matrix.ansible }} - origin-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }} testing-type: sanity