From 4ea1a3c577b769a628c359f5b05f184bd6cdca11 Mon Sep 17 00:00:00 2001 From: mimihalescu Date: Thu, 28 Jul 2022 12:12:15 +0300 Subject: [PATCH 1/5] feat: implement private k8s cluster --- docs/api/managed-kubernetes/k8s_cluster.md | 4 +++ plugins/modules/k8s_cluster.py | 30 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/docs/api/managed-kubernetes/k8s_cluster.md b/docs/api/managed-kubernetes/k8s_cluster.md index 2109660d..c3013709 100644 --- a/docs/api/managed-kubernetes/k8s_cluster.md +++ b/docs/api/managed-kubernetes/k8s_cluster.md @@ -50,6 +50,10 @@ This is a simple module that supports creating or removing K8s Clusters. This mo | maintenance_window | False | dict | | The datacenter location. | | api_subnet_allow_list | False | list | | The datacenter location. | | s3_buckets_param | False | list | | The datacenter location. | + | public | False | str | | The indicator if the cluster is public or private. | + | location | False | str | | The location of the cluster if the cluster is private. This property is immutable. The location must be enabled for your contract or you must have a Datacenter within that location. This attribute is mandatory if the cluster is private. | + | nat_gateway_ip | False | str | | The nat gateway IP of the cluster if the cluster is private. | + | node_subnet | False | str | | The node subnet of the cluster if the cluster is private. | | api_url | False | str | | The Ionos API base URL. | | username | False | str | | The Ionos username. Overrides the IONOS_USERNAME environment variable. | | password | False | str | | The Ionos password. Overrides the IONOS_PASSWORD environment variable. | diff --git a/plugins/modules/k8s_cluster.py b/plugins/modules/k8s_cluster.py index 39f65b96..771d058c 100644 --- a/plugins/modules/k8s_cluster.py +++ b/plugins/modules/k8s_cluster.py @@ -66,6 +66,28 @@ 'type': 'list', 'elements': 'str', }, + 'public': { + 'description': ['The indicator if the cluster is public or private.'], + 'available': ['present'], + 'type': 'str' + }, + 'location': { + 'description': 'The location of the cluster if the cluster is private. This property is immutable. The ' + 'location must be enabled for your contract or you must have a Datacenter within that ' + 'location. This attribute is mandatory if the cluster is private.', + 'available': ['present'], + 'type': 'str' + }, + 'nat_gateway_ip': { + 'description': 'The nat gateway IP of the cluster if the cluster is private.', + 'available': ['present'], + 'type': 'str' + }, + 'node_subnet': { + 'description': 'The node subnet of the cluster if the cluster is private.', + 'available': ['present'], + 'type': 'str' + }, 'api_url': { 'description': ['The Ionos API base URL.'], 'version_added': '2.4', @@ -223,6 +245,10 @@ def create_k8s_cluster(module, client): cluster_name = module.params.get('cluster_name') k8s_version = module.params.get('k8s_version') maintenance = module.params.get('maintenance_window') + public = module.params.get('public') + location = module.params.get('location') + nat_gateway_ip = module.params.get('nat_gateway_ip') + node_subnet = module.params.get('node_subnet') wait = module.params.get('wait') api_subnet_allow_list = module.params.get('api_subnet_allow_list') s3_buckets = list(map(lambda bucket_name: S3Bucket(name=bucket_name))) if module.params.get('s3_buckets') else None @@ -254,6 +280,10 @@ def create_k8s_cluster(module, client): maintenance_window=maintenance_window, api_subnet_allow_list=api_subnet_allow_list, s3_buckets=s3_buckets, + public=public, + nat_gateway_ip=nat_gateway_ip, + node_subnet=node_subnet, + location=location ) k8s_cluster = KubernetesCluster(properties=k8s_cluster_properties) From 79cd4eacb09eef7fce4cb95b03744b931115a4c0 Mon Sep 17 00:00:00 2001 From: Radu Mocanu Date: Mon, 18 Dec 2023 19:19:11 +0200 Subject: [PATCH 2/5] test: add private cluster test, changed public to bool --- docs/api/managed-kubernetes/k8s_cluster.md | 2 +- plugins/modules/k8s_cluster.py | 2 +- .../managed-kubernetes/cluster/all-tests.yml | 4 +- .../cluster/private-k8s-cluster-test.yml | 46 ++++++++----------- tests/managed-kubernetes/cluster/vars.yml | 1 + 5 files changed, 24 insertions(+), 31 deletions(-) diff --git a/docs/api/managed-kubernetes/k8s_cluster.md b/docs/api/managed-kubernetes/k8s_cluster.md index 2002f073..1fad8f3f 100644 --- a/docs/api/managed-kubernetes/k8s_cluster.md +++ b/docs/api/managed-kubernetes/k8s_cluster.md @@ -120,7 +120,7 @@ This is a simple module that supports creating or removing K8s Clusters. This mo List of S3 buckets configured for K8s usage. At the moment, it contains only one S3 bucket that is used to store K8s API audit logs. - public
str + public
bool False The indicator if the cluster is public or private. diff --git a/plugins/modules/k8s_cluster.py b/plugins/modules/k8s_cluster.py index 9500c302..9905f535 100644 --- a/plugins/modules/k8s_cluster.py +++ b/plugins/modules/k8s_cluster.py @@ -70,7 +70,7 @@ 'public': { 'description': ['The indicator if the cluster is public or private.'], 'available': ['present'], - 'type': 'str' + 'type': 'bool' }, 'location': { 'description': 'The location of the cluster if the cluster is private. This property is immutable. The ' diff --git a/tests/managed-kubernetes/cluster/all-tests.yml b/tests/managed-kubernetes/cluster/all-tests.yml index a3b80db5..8ddd82b5 100644 --- a/tests/managed-kubernetes/cluster/all-tests.yml +++ b/tests/managed-kubernetes/cluster/all-tests.yml @@ -5,5 +5,5 @@ - name: Run K8s Cluster Test import_playbook: k8s-cluster-test.yml -#- name: Run Private K8s Cluster Test -# import_playbook: private-k8s-cluster-test.yml +- name: Run Private K8s Cluster Test + import_playbook: private-k8s-cluster-test.yml diff --git a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml index 34c3d0f5..b912b001 100644 --- a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml +++ b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml @@ -21,6 +21,14 @@ state: present register: ipblock_response + - name: Create NAT Gateway + nat_gateway: + datacenter: "{{ datacenter_response.datacenter.id }}" + name: "{{ nat }}" + public_ips: "{{ ipblock_response_create.ipblock.properties.ips }}" + wait: true + register: nat_gateway_response + - name: Create k8s cluster k8s_cluster: cluster_name: "ansible-cluster-{{100|random}}" @@ -28,40 +36,24 @@ day_of_the_week: "Wednesday" time: "12:02:00" public: False + location: "{{ location }}" + node_subnet: 192.168.0.0/16 + nat_gateway_ip: "{{ ipblock_response.ipblock.properties.ips[0] }}" register: cluster_response - - name: Create k8s cluster nodepool - k8s_nodepool: - nodepool_name: "ansible-nodepool-{{100|random}}" - k8s_cluster: "{{ cluster_response.cluster.id }}" - datacenter_id: "{{ datacenter_response.datacenter.id }}" - node_count: 2 - cpu_family: "INTEL_SKYLAKE" - cores_count: "1" - ram_size: "2048" - availability_zone: "AUTO" - storage_type: "HDD" - storage_size: "100" - gateway_ip: "{{ ipblock_response.ipblock.properties.ips[0] }}" - wait: true - register: nodepool_response - - - name: Debug - Show nodepool - debug: - msg: "{{ nodepool_response.nodepool }}" - - - name: Delete k8s cluster nodepool - k8s_nodepool: - k8s_cluster: "{{ cluster_response.cluster.id }}" - nodepool_id: "{{ nodepool_response.nodepool.id }}" - wait: true - state: absent - - name: Delete k8s cluster k8s_cluster: k8s_cluster: "{{ cluster_response.cluster.id }}" state: absent + - name: Remove NAT Gateway + nat_gateway: + nat_gateway: "{{ nat_gateway_response.nat_gateway.id }}" + datacenter: "{{ datacenter_response.datacenter.id }}" + wait: true + wait_timeout: 2000 + state: absent + - name: Remove datacenter datacenter: datacenter: "{{ datacenter_response.datacenter.id }}" diff --git a/tests/managed-kubernetes/cluster/vars.yml b/tests/managed-kubernetes/cluster/vars.yml index 5926f704..75a2e4aa 100644 --- a/tests/managed-kubernetes/cluster/vars.yml +++ b/tests/managed-kubernetes/cluster/vars.yml @@ -1,5 +1,6 @@ name: "AnsibleAutoTestK8sCluster" datacenter: "AnsibleAutoTestK8sCluster" +nat: "AnsibleAutoTestNATCluster" description: Ansible test description server: "AnsibleAutoTestK8sCluster" nic: "AnsibleAutoTestK8sCluster" From 127413e2fb90a4e3a11fabdde03a8bd82079224d Mon Sep 17 00:00:00 2001 From: Radu Mocanu Date: Tue, 19 Dec 2023 12:57:12 +0200 Subject: [PATCH 3/5] test: fix wrong variable name --- tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml index b912b001..8d03fe4f 100644 --- a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml +++ b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml @@ -25,7 +25,7 @@ nat_gateway: datacenter: "{{ datacenter_response.datacenter.id }}" name: "{{ nat }}" - public_ips: "{{ ipblock_response_create.ipblock.properties.ips }}" + public_ips: "{{ ipblock_response.ipblock.properties.ips }}" wait: true register: nat_gateway_response From eec769ec472f7dc44163a25b58ef48f41d2b4ed1 Mon Sep 17 00:00:00 2001 From: Radu Mocanu Date: Tue, 19 Dec 2023 16:07:24 +0200 Subject: [PATCH 4/5] test: increase waiting time --- tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml index 8d03fe4f..6e331d3b 100644 --- a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml +++ b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml @@ -27,6 +27,7 @@ name: "{{ nat }}" public_ips: "{{ ipblock_response.ipblock.properties.ips }}" wait: true + wait_timeout: 1200 register: nat_gateway_response - name: Create k8s cluster From b163fbf7743c81ed87bf9201553340ad7af2dad4 Mon Sep 17 00:00:00 2001 From: Radu Mocanu Date: Tue, 19 Dec 2023 16:28:51 +0200 Subject: [PATCH 5/5] test: remove nat gateway creation --- .../cluster/private-k8s-cluster-test.yml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml index 6e331d3b..d7c70ce7 100644 --- a/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml +++ b/tests/managed-kubernetes/cluster/private-k8s-cluster-test.yml @@ -21,15 +21,6 @@ state: present register: ipblock_response - - name: Create NAT Gateway - nat_gateway: - datacenter: "{{ datacenter_response.datacenter.id }}" - name: "{{ nat }}" - public_ips: "{{ ipblock_response.ipblock.properties.ips }}" - wait: true - wait_timeout: 1200 - register: nat_gateway_response - - name: Create k8s cluster k8s_cluster: cluster_name: "ansible-cluster-{{100|random}}" @@ -47,14 +38,6 @@ k8s_cluster: "{{ cluster_response.cluster.id }}" state: absent - - name: Remove NAT Gateway - nat_gateway: - nat_gateway: "{{ nat_gateway_response.nat_gateway.id }}" - datacenter: "{{ datacenter_response.datacenter.id }}" - wait: true - wait_timeout: 2000 - state: absent - - name: Remove datacenter datacenter: datacenter: "{{ datacenter_response.datacenter.id }}"