From 2816de19bc10df825c16b66618d22e3d191241d4 Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Wed, 20 Nov 2024 07:23:57 -0600 Subject: [PATCH 1/6] Adding ip_mode field, and acceptance test --- kubernetes/resource_kubernetes_service_v1.go | 4 ++ .../resource_kubernetes_service_v1_test.go | 68 +++++++++++++++++++ kubernetes/structure_service_spec.go | 1 + 3 files changed, 73 insertions(+) diff --git a/kubernetes/resource_kubernetes_service_v1.go b/kubernetes/resource_kubernetes_service_v1.go index 934f038082..b902adcfa6 100644 --- a/kubernetes/resource_kubernetes_service_v1.go +++ b/kubernetes/resource_kubernetes_service_v1.go @@ -316,6 +316,10 @@ func resourceKubernetesServiceSchemaV1() map[string]*schema.Schema { Type: schema.TypeString, Computed: true, }, + "ip_mode": { + Type: schema.TypeString, + Computed: true, + }, "hostname": { Type: schema.TypeString, Computed: true, diff --git a/kubernetes/resource_kubernetes_service_v1_test.go b/kubernetes/resource_kubernetes_service_v1_test.go index 0cbf4b4b56..02de61bc39 100644 --- a/kubernetes/resource_kubernetes_service_v1_test.go +++ b/kubernetes/resource_kubernetes_service_v1_test.go @@ -337,6 +337,49 @@ func TestAccKubernetesServiceV1_loadBalancer_healthcheck(t *testing.T) { }) } +func TestAccKubernetesServiceV1_loadBalancer_ipMode(t *testing.T) { + var conf corev1.Service + name := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "kubernetes_service_v1.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t); skipIfNoLoadBalancersAvailable(t) }, + IDRefreshIgnore: []string{"metadata.0.resource_version"}, + ProviderFactories: testAccProviderFactories, + CheckDestroy: testAccCheckKubernetesServiceV1Destroy, + Steps: []resource.TestStep{ + { + Config: testAccKubernetesConfig_ignoreAnnotations() + + testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, "VIP"), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckKubernetesServiceV1Exists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), + resource.TestCheckResourceAttr(resourceName, "spec.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.type", "LoadBalancer"), + resource.TestCheckResourceAttr(resourceName, "status.0.load_balancer.0.ingress.0.ip_mode", "VIP"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version", "wait_for_load_balancer"}, + }, + { + Config: testAccKubernetesConfig_ignoreAnnotations() + + testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, "Proxy"), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckKubernetesServiceV1Exists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), + resource.TestCheckResourceAttr(resourceName, "spec.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.type", "LoadBalancer"), + resource.TestCheckResourceAttr(resourceName, "status.0.load_balancer.0.ingress.0.ip_mode", "Proxy"), + ), + }, + }, + }) +} + func TestAccKubernetesServiceV1_headless(t *testing.T) { var conf corev1.Service name := acctest.RandomWithPrefix("tf-acc-test") @@ -1104,7 +1147,32 @@ func testAccKubernetesServiceV1Config_loadBalancer_annotations_aws_modified(name } `, name) } +func testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, ipMode string) string { + return fmt.Sprintf(` +resource "kubernetes_service_v1" "test" { + metadata { + name = "%s" + } + spec { + type = "LoadBalancer" + port { + port = 80 + target_port = 8080 + } + } + + status { + load_balancer { + ingress { + ip = "192.168.1.100" + ip_mode = "%s" + } + } + } +} +`, name, ipMode) +} func testAccKubernetesServiceV1Config_headless(name string) string { return fmt.Sprintf(`resource "kubernetes_service_v1" "test" { metadata { diff --git a/kubernetes/structure_service_spec.go b/kubernetes/structure_service_spec.go index ab0b869616..cc81468b41 100644 --- a/kubernetes/structure_service_spec.go +++ b/kubernetes/structure_service_spec.go @@ -129,6 +129,7 @@ func flattenLoadBalancerStatus(in v1.LoadBalancerStatus) []interface{} { att["ip"] = ingress.IP att["hostname"] = ingress.Hostname + att["ip_mode"] = ingress.IPMode out[i] = att } From 59049150ca4a8fc167881b8076b48376886f0791 Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Wed, 20 Nov 2024 09:31:38 -0600 Subject: [PATCH 2/6] Updating test config --- kubernetes/resource_kubernetes_service_v1_test.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/kubernetes/resource_kubernetes_service_v1_test.go b/kubernetes/resource_kubernetes_service_v1_test.go index 02de61bc39..ff311f4937 100644 --- a/kubernetes/resource_kubernetes_service_v1_test.go +++ b/kubernetes/resource_kubernetes_service_v1_test.go @@ -1161,18 +1161,10 @@ resource "kubernetes_service_v1" "test" { target_port = 8080 } } - - status { - load_balancer { - ingress { - ip = "192.168.1.100" - ip_mode = "%s" - } - } - } } -`, name, ipMode) +`, name) } + func testAccKubernetesServiceV1Config_headless(name string) string { return fmt.Sprintf(`resource "kubernetes_service_v1" "test" { metadata { From 2df5186e5619bb3df38b2955db04ebf188db230a Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Tue, 3 Dec 2024 08:13:33 -0600 Subject: [PATCH 3/6] Updating documentation --- docs/resources/ingress.md | 1 + docs/resources/ingress_v1.md | 1 + docs/resources/service.md | 1 + docs/resources/service_v1.md | 1 + 4 files changed, 4 insertions(+) diff --git a/docs/resources/ingress.md b/docs/resources/ingress.md index ac17eaedc8..66702bd920 100644 --- a/docs/resources/ingress.md +++ b/docs/resources/ingress.md @@ -138,6 +138,7 @@ Read-Only: Read-Only: - `hostname` (String) +- `ip_mode` (String) - `ip` (String) diff --git a/docs/resources/ingress_v1.md b/docs/resources/ingress_v1.md index 537761cf9b..380ae75bd2 100644 --- a/docs/resources/ingress_v1.md +++ b/docs/resources/ingress_v1.md @@ -212,6 +212,7 @@ Read-Only: Read-Only: - `hostname` (String) +- `ip_mode` (String) - `ip` (String) diff --git a/docs/resources/service.md b/docs/resources/service.md index b35b2ba51a..c551ea56da 100644 --- a/docs/resources/service.md +++ b/docs/resources/service.md @@ -132,6 +132,7 @@ Read-Only: - `hostname` (String) - `ip` (String) +- `ip_mode` (String) diff --git a/docs/resources/service_v1.md b/docs/resources/service_v1.md index 006428ce48..cdf26e9068 100644 --- a/docs/resources/service_v1.md +++ b/docs/resources/service_v1.md @@ -132,6 +132,7 @@ Read-Only: - `hostname` (String) - `ip` (String) +- `ip_mode` (String) From dd05728487bc45a161fdd7f2c3020d86b39258b2 Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Tue, 14 Jan 2025 10:31:21 -0600 Subject: [PATCH 4/6] Fixing schema, and adding changelog --- .changelog/2557.txt | 3 +++ kubernetes/resource_kubernetes_service_v1.go | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changelog/2557.txt diff --git a/.changelog/2557.txt b/.changelog/2557.txt new file mode 100644 index 0000000000..18715867b4 --- /dev/null +++ b/.changelog/2557.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +`resource/Kubernetes_Persistent_VolumeClaim_V1`: Add argument `spec.ip_mode` +``` \ No newline at end of file diff --git a/kubernetes/resource_kubernetes_service_v1.go b/kubernetes/resource_kubernetes_service_v1.go index b902adcfa6..4a6df3bcce 100644 --- a/kubernetes/resource_kubernetes_service_v1.go +++ b/kubernetes/resource_kubernetes_service_v1.go @@ -317,8 +317,10 @@ func resourceKubernetesServiceSchemaV1() map[string]*schema.Schema { Computed: true, }, "ip_mode": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Optional: true, + Default: "VIP", + ValidateFunc: validation.StringInSlice([]string{"VIP", "Proxy"}, false), }, "hostname": { Type: schema.TypeString, From 77eae4908ecf54375cc761eb4b8738a351e70059 Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Tue, 14 Jan 2025 11:42:56 -0600 Subject: [PATCH 5/6] Fixing test config --- .../resource_kubernetes_service_v1_test.go | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/kubernetes/resource_kubernetes_service_v1_test.go b/kubernetes/resource_kubernetes_service_v1_test.go index ff311f4937..f4f032c0df 100644 --- a/kubernetes/resource_kubernetes_service_v1_test.go +++ b/kubernetes/resource_kubernetes_service_v1_test.go @@ -350,7 +350,7 @@ func TestAccKubernetesServiceV1_loadBalancer_ipMode(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccKubernetesConfig_ignoreAnnotations() + - testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, "VIP"), + testAccKubernetesServiceV1Config_loadBalancer_defaultIPMode(name), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckKubernetesServiceV1Exists(resourceName, &conf), resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), @@ -359,12 +359,6 @@ func TestAccKubernetesServiceV1_loadBalancer_ipMode(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "status.0.load_balancer.0.ingress.0.ip_mode", "VIP"), ), }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"metadata.0.resource_version", "wait_for_load_balancer"}, - }, { Config: testAccKubernetesConfig_ignoreAnnotations() + testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, "Proxy"), @@ -1147,13 +1141,12 @@ func testAccKubernetesServiceV1Config_loadBalancer_annotations_aws_modified(name } `, name) } -func testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, ipMode string) string { +func testAccKubernetesServiceV1Config_loadBalancer_defaultIPMode(name string) string { return fmt.Sprintf(` resource "kubernetes_service_v1" "test" { metadata { name = "%s" } - spec { type = "LoadBalancer" port { @@ -1164,6 +1157,23 @@ resource "kubernetes_service_v1" "test" { } `, name) } +func testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, ipMode string) string { + return fmt.Sprintf(` +resource "kubernetes_service_v1" "test" { + metadata { + name = "%s" + } + spec { + type = "LoadBalancer" + port { + port = 80 + target_port = 8080 + } + ip_mode = "%s" + } +} +`, name, ipMode) +} func testAccKubernetesServiceV1Config_headless(name string) string { return fmt.Sprintf(`resource "kubernetes_service_v1" "test" { From 69e7e7522eb99eda1be82ef5c3608d8fd51dd9a1 Mon Sep 17 00:00:00 2001 From: Jaylon McShan Date: Mon, 31 Mar 2025 15:11:42 -0500 Subject: [PATCH 6/6] Updating field to computed --- kubernetes/resource_kubernetes_service_v1.go | 6 +- .../resource_kubernetes_service_v1_test.go | 68 +++++++------------ 2 files changed, 25 insertions(+), 49 deletions(-) diff --git a/kubernetes/resource_kubernetes_service_v1.go b/kubernetes/resource_kubernetes_service_v1.go index 4a6df3bcce..b902adcfa6 100644 --- a/kubernetes/resource_kubernetes_service_v1.go +++ b/kubernetes/resource_kubernetes_service_v1.go @@ -317,10 +317,8 @@ func resourceKubernetesServiceSchemaV1() map[string]*schema.Schema { Computed: true, }, "ip_mode": { - Type: schema.TypeString, - Optional: true, - Default: "VIP", - ValidateFunc: validation.StringInSlice([]string{"VIP", "Proxy"}, false), + Type: schema.TypeString, + Computed: true, }, "hostname": { Type: schema.TypeString, diff --git a/kubernetes/resource_kubernetes_service_v1_test.go b/kubernetes/resource_kubernetes_service_v1_test.go index f4f032c0df..1bd17d046c 100644 --- a/kubernetes/resource_kubernetes_service_v1_test.go +++ b/kubernetes/resource_kubernetes_service_v1_test.go @@ -350,7 +350,7 @@ func TestAccKubernetesServiceV1_loadBalancer_ipMode(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccKubernetesConfig_ignoreAnnotations() + - testAccKubernetesServiceV1Config_loadBalancer_defaultIPMode(name), + testAccKubernetesServiceV1Config_loadBalancer_ip(name), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckKubernetesServiceV1Exists(resourceName, &conf), resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), @@ -359,17 +359,6 @@ func TestAccKubernetesServiceV1_loadBalancer_ipMode(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "status.0.load_balancer.0.ingress.0.ip_mode", "VIP"), ), }, - { - Config: testAccKubernetesConfig_ignoreAnnotations() + - testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, "Proxy"), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesServiceV1Exists(resourceName, &conf), - resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), - resource.TestCheckResourceAttr(resourceName, "spec.#", "1"), - resource.TestCheckResourceAttr(resourceName, "spec.0.type", "LoadBalancer"), - resource.TestCheckResourceAttr(resourceName, "status.0.load_balancer.0.ingress.0.ip_mode", "Proxy"), - ), - }, }, }) } @@ -1050,6 +1039,28 @@ func testAccKubernetesServiceV1Config_loadBalancer(name string) string { `, name) } +func testAccKubernetesServiceV1Config_loadBalancer_ip(name string) string { + return fmt.Sprintf(` +resource "kubernetes_service_v1" "test" { + metadata { + name = "%s" + } + + spec { + type = "LoadBalancer" + selector = { + app = "test-app" + } + + port { + port = 80 + target_port = 80 + } + } +} +`, name) +} + func testAccKubernetesServiceV1Config_loadBalancer_modified(name string) string { return fmt.Sprintf(`resource "kubernetes_service_v1" "test" { metadata { @@ -1141,39 +1152,6 @@ func testAccKubernetesServiceV1Config_loadBalancer_annotations_aws_modified(name } `, name) } -func testAccKubernetesServiceV1Config_loadBalancer_defaultIPMode(name string) string { - return fmt.Sprintf(` -resource "kubernetes_service_v1" "test" { - metadata { - name = "%s" - } - spec { - type = "LoadBalancer" - port { - port = 80 - target_port = 8080 - } - } -} -`, name) -} -func testAccKubernetesServiceV1Config_loadBalancer_ipMode(name, ipMode string) string { - return fmt.Sprintf(` -resource "kubernetes_service_v1" "test" { - metadata { - name = "%s" - } - spec { - type = "LoadBalancer" - port { - port = 80 - target_port = 8080 - } - ip_mode = "%s" - } -} -`, name, ipMode) -} func testAccKubernetesServiceV1Config_headless(name string) string { return fmt.Sprintf(`resource "kubernetes_service_v1" "test" {