Skip to content

Commit 6bb84f8

Browse files
committed
Add test for API version upgrades
1 parent de1acac commit 6bb84f8

File tree

7 files changed

+144
-0
lines changed

7 files changed

+144
-0
lines changed

kustomize/resource_kustomization_test.go

+77
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"regexp"
7+
"strings"
78
"testing"
89

910
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
@@ -370,6 +371,52 @@ resource "kustomization_resource" "ss" {
370371
`
371372
}
372373

374+
//
375+
//
376+
// Upgrade_API_Version Test
377+
func TestAccResourceKustomization_upgradeAPIVersion(t *testing.T) {
378+
379+
resource.Test(t, resource.TestCase{
380+
Providers: testAccProviders,
381+
Steps: []resource.TestStep{
382+
//
383+
//
384+
// Applying initial networking.k8s.io/v1beta1 ingress
385+
{
386+
Config: testAccResourceKustomizationConfig_upgradeAPIVersion("test_kustomizations/upgrade_api_version/initial"),
387+
Check: resource.ComposeAggregateTestCheckFunc(
388+
resource.TestCheckResourceAttrSet("kustomization_resource.ns", "id"),
389+
resource.TestCheckResourceAttrSet("kustomization_resource.ing", "id"),
390+
testAccCheckManifestNestedString("kustomization_resource.ing", "networking.k8s.io/v1beta1", "apiVersion"),
391+
),
392+
},
393+
//
394+
//
395+
// Update ingress to networking.k8s.io/v1
396+
{
397+
Config: testAccResourceKustomizationConfig_upgradeAPIVersion("test_kustomizations/upgrade_api_version/modified"),
398+
Check: resource.ComposeAggregateTestCheckFunc(
399+
resource.TestCheckResourceAttrSet("kustomization_resource.ns", "id"),
400+
resource.TestCheckResourceAttrSet("kustomization_resource.ing", "id"),
401+
testAccCheckManifestNestedString("kustomization_resource.ing", "networking.k8s.io/v1", "apiVersion"),
402+
),
403+
},
404+
},
405+
})
406+
}
407+
408+
func testAccResourceKustomizationConfig_upgradeAPIVersion(path string) string {
409+
return testAccDataSourceKustomizationConfig_basic(path) + `
410+
resource "kustomization_resource" "ns" {
411+
manifest = data.kustomization_build.test.manifests["~G_~V_Namespace|~X|test-upgrade-api-version"]
412+
}
413+
414+
resource "kustomization_resource" "ing" {
415+
manifest = data.kustomization_build.test.manifests["networking.k8s.io_~V_Ingress|test-upgrade-api-version|test-upgrade-api-version"]
416+
}
417+
`
418+
}
419+
373420
//
374421
//
375422
// CRD Test
@@ -795,3 +842,33 @@ func testAccCheckManifestSelectorAbsent(n string, k string) resource.TestCheckFu
795842
return nil
796843
}
797844
}
845+
846+
func testAccCheckManifestNestedString(n string, expected string, k ...string) resource.TestCheckFunc {
847+
return func(s *terraform.State) error {
848+
u, err := getResourceFromTestState(s, n)
849+
if err != nil {
850+
return err
851+
}
852+
853+
resp, err := getResourceFromK8sAPI(u)
854+
if err != nil {
855+
return err
856+
}
857+
858+
k8spath := strings.Join(k, ".")
859+
860+
actual, ok, err := k8sunstructured.NestedString(resp.Object, k...)
861+
if !ok {
862+
return fmt.Errorf("%s missing from resource %s", k8spath, n)
863+
}
864+
if err != nil {
865+
return err
866+
}
867+
868+
if actual != expected {
869+
return fmt.Errorf("value %s of %s does not match expected %s", actual, k8spath, expected)
870+
}
871+
872+
return nil
873+
}
874+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: networking.k8s.io/v1beta1
2+
kind: Ingress
3+
metadata:
4+
labels:
5+
app: test-upgrade-api-version
6+
name: test-upgrade-api-version
7+
namespace: test-upgrade-api-version
8+
spec:
9+
rules:
10+
- host: test-upgrade-api-version.example.com
11+
http:
12+
paths:
13+
- backend:
14+
serviceName: test-upgrade-api-version
15+
servicePort: 80
16+
path: /
17+
tls:
18+
- hosts:
19+
- test-upgrade-api-version.example.com
20+
secretName: test-upgrade-api-version-tls-internal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
namespace: test-upgrade-api-version
5+
6+
resources:
7+
- namespace.yaml
8+
- ingress.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: test-upgrade-api-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: Ingress
3+
metadata:
4+
labels:
5+
app: test-upgrade-api-version
6+
name: test-upgrade-api-version
7+
namespace: test-upgrade-api-version
8+
spec:
9+
rules:
10+
- host: test-upgrade-api-version.example.com
11+
http:
12+
paths:
13+
- backend:
14+
service:
15+
name: test-upgrade-api-version
16+
port:
17+
number: 80
18+
path: /
19+
pathType: ImplementationSpecific
20+
tls:
21+
- hosts:
22+
- test-upgrade-api-version.example.com
23+
secretName: test-upgrade-api-version-tls-internal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
namespace: test-upgrade-api-version
5+
6+
resources:
7+
- namespace.yaml
8+
- ingress.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: test-upgrade-api-version

0 commit comments

Comments
 (0)