Skip to content

Commit 28f3dbb

Browse files
authored
Revert on datasources throwing error for non-existent resources (#2464)
1 parent fc43163 commit 28f3dbb

27 files changed

+435
-0
lines changed

.changelog/2464.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
data-sources: revert a recently introduced deviation on datasources where querying a non-existent resource would cause an error (#2434).
3+
```

kubernetes/data_source_kubernetes_config_map_v1.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1213
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1314
)
1415

@@ -54,6 +55,9 @@ func dataSourceKubernetesConfigMapV1Read(ctx context.Context, d *schema.Resource
5455
log.Printf("[INFO] Reading config map %s", metadata.Name)
5556
cfgMap, err := conn.CoreV1().ConfigMaps(metadata.Namespace).Get(ctx, metadata.Name, metav1.GetOptions{})
5657
if err != nil {
58+
if apierrors.IsNotFound(err) {
59+
return nil
60+
}
5761
log.Printf("[DEBUG] Received error: %#v", err)
5862
return diag.FromErr(err)
5963
}

kubernetes/data_source_kubernetes_config_map_v1_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,25 @@ func TestAccKubernetesDataSourceConfigMapV1_basic(t *testing.T) {
4747
})
4848
}
4949

50+
func TestAccKubernetesDataSourceConfigMapV1_not_found(t *testing.T) {
51+
dataSourceName := "data.kubernetes_config_map_v1.test"
52+
name := fmt.Sprintf("ceci-n.est-pas-une-config-map-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
53+
54+
resource.ParallelTest(t, resource.TestCase{
55+
PreCheck: func() { testAccPreCheck(t) },
56+
ProviderFactories: testAccProviderFactories,
57+
Steps: []resource.TestStep{
58+
{ // Use the data source to read the existing resource.
59+
Config: testAccKubernetesDataSourceConfigMapV1_nonexistent(name),
60+
Check: resource.ComposeAggregateTestCheckFunc(
61+
resource.TestCheckResourceAttr(dataSourceName, "metadata.0.name", name),
62+
resource.TestCheckResourceAttr(dataSourceName, "data.%", "0"),
63+
),
64+
},
65+
},
66+
})
67+
}
68+
5069
// testAccKubernetesDataSourceConfigMapConfig_basic provides the terraform config
5170
// used to test basic functionality of the config_map data source.
5271
func testAccKubernetesDataSourceConfigMapV1_basic(name string) string {
@@ -82,3 +101,12 @@ func testAccKubernetesDataSourceConfigMapV1_read() string {
82101
}
83102
`
84103
}
104+
105+
func testAccKubernetesDataSourceConfigMapV1_nonexistent(name string) string {
106+
return fmt.Sprintf(`data "kubernetes_config_map_v1" "test" {
107+
metadata {
108+
name = "%s"
109+
}
110+
}
111+
`, name)
112+
}

kubernetes/data_source_kubernetes_endpoints_v1.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1213
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1314
)
1415

@@ -45,6 +46,9 @@ func dataSourceKubernetesEndpointsV1Read(ctx context.Context, d *schema.Resource
4546
log.Printf("[INFO] Reading endpoints %s", metadata.Name)
4647
ep, err := conn.CoreV1().Endpoints(metadata.Namespace).Get(ctx, metadata.Name, metav1.GetOptions{})
4748
if err != nil {
49+
if apierrors.IsNotFound(err) {
50+
return nil
51+
}
4852
log.Printf("[DEBUG] Received error: %#v", err)
4953
return diag.Errorf("Failed to read endpoint because: %s", err)
5054
}

kubernetes/data_source_kubernetes_endpoints_v1_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,26 @@ func TestAccKubernetesDataSourceEndpointsV1_basic(t *testing.T) {
6060
})
6161
}
6262

63+
func TestAccKubernetesDataSourceEndpointsV1_not_found(t *testing.T) {
64+
dataSourceName := "data.kubernetes_endpoints_v1.test"
65+
name := fmt.Sprintf("ceci-n.est-pas-une-endpoint-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
66+
67+
resource.ParallelTest(t, resource.TestCase{
68+
PreCheck: func() { testAccPreCheck(t) },
69+
ProviderFactories: testAccProviderFactories,
70+
CheckDestroy: testAccCheckKubernetesEndpointV1Destroy,
71+
Steps: []resource.TestStep{
72+
{
73+
Config: testAccKubernetesDataSourceEndpointsV1_nonexistent(name),
74+
Check: resource.ComposeAggregateTestCheckFunc(
75+
resource.TestCheckResourceAttr(dataSourceName, "metadata.0.name", name),
76+
resource.TestCheckResourceAttr(dataSourceName, "subset.#", "0"),
77+
),
78+
},
79+
},
80+
})
81+
}
82+
6383
func testAccKubernetesDataSourceEndpointsV1_read() string {
6484
return `data "kubernetes_endpoints_v1" "test" {
6585
metadata {
@@ -68,3 +88,12 @@ func testAccKubernetesDataSourceEndpointsV1_read() string {
6888
}
6989
`
7090
}
91+
92+
func testAccKubernetesDataSourceEndpointsV1_nonexistent(name string) string {
93+
return fmt.Sprintf(`data "kubernetes_endpoints_v1" "test" {
94+
metadata {
95+
name = "%s"
96+
}
97+
}
98+
`, name)
99+
}

kubernetes/data_source_kubernetes_ingress.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1212
networking "k8s.io/api/networking/v1beta1"
13+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1314
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415
)
1516

@@ -151,6 +152,9 @@ func dataSourceKubernetesIngressRead(ctx context.Context, d *schema.ResourceData
151152
log.Printf("[INFO] Reading ingress %s", metadata.Name)
152153
ing, err := conn.ExtensionsV1beta1().Ingresses(metadata.Namespace).Get(ctx, metadata.Name, metav1.GetOptions{})
153154
if err != nil {
155+
if apierrors.IsNotFound(err) {
156+
return nil
157+
}
154158
log.Printf("[DEBUG] Received error: %#v", err)
155159
return diag.FromErr(err)
156160
}

kubernetes/data_source_kubernetes_ingress_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,28 @@ func TestAccKubernetesDataSourceIngress_basic(t *testing.T) {
6868
})
6969
}
7070

71+
func TestAccKubernetesDataSourceIngress_not_found(t *testing.T) {
72+
dataSourceName := "data.kubernetes_ingress.test"
73+
name := fmt.Sprintf("ceci-n.est-pas-une-ingress-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
74+
75+
resource.ParallelTest(t, resource.TestCase{
76+
PreCheck: func() {
77+
testAccPreCheck(t)
78+
skipIfClusterVersionGreaterThanOrEqual(t, "1.22.0")
79+
},
80+
ProviderFactories: testAccProviderFactories,
81+
Steps: []resource.TestStep{
82+
{
83+
Config: testAccKubernetesDataSourceIngress_nonexistent(name),
84+
Check: resource.ComposeAggregateTestCheckFunc(
85+
resource.TestCheckResourceAttr(dataSourceName, "metadata.0.name", name),
86+
resource.TestCheckResourceAttr(dataSourceName, "spec.#", "0"),
87+
),
88+
},
89+
},
90+
})
91+
}
92+
7193
func testAccKubernetesDataSourceIngress_basic(name string) string {
7294
return fmt.Sprintf(`resource "kubernetes_ingress" "test" {
7395
metadata {
@@ -104,3 +126,12 @@ func testAccKubernetesDataSourceIngress_read() string {
104126
}
105127
`
106128
}
129+
130+
func testAccKubernetesDataSourceIngress_nonexistent(name string) string {
131+
return fmt.Sprintf(`data "kubernetes_ingress" "test" {
132+
metadata {
133+
name = "%s"
134+
}
135+
}
136+
`, name)
137+
}

kubernetes/data_source_kubernetes_ingress_v1.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1313
networking "k8s.io/api/networking/v1"
14+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1415
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516
)
1617

@@ -162,6 +163,9 @@ func dataSourceKubernetesIngressV1Read(ctx context.Context, d *schema.ResourceDa
162163
log.Printf("[INFO] Reading ingress %s", metadata.Name)
163164
ing, err := conn.NetworkingV1().Ingresses(metadata.Namespace).Get(ctx, metadata.Name, metav1.GetOptions{})
164165
if err != nil {
166+
if apierrors.IsNotFound(err) {
167+
return nil
168+
}
165169
log.Printf("[DEBUG] Received error: %#v", err)
166170
return diag.FromErr(err)
167171
}

kubernetes/data_source_kubernetes_ingress_v1_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,28 @@ func TestAccKubernetesDataSourceIngressV1_basic(t *testing.T) {
7070
})
7171
}
7272

73+
func TestAccKubernetesDataSourceIngressV1_not_found(t *testing.T) {
74+
dataSourceName := "data.kubernetes_ingress_v1.test"
75+
name := fmt.Sprintf("ceci-n.est-pas-une-ingress-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
76+
77+
resource.ParallelTest(t, resource.TestCase{
78+
PreCheck: func() {
79+
testAccPreCheck(t)
80+
skipIfClusterVersionLessThan(t, "1.22.0")
81+
},
82+
ProviderFactories: testAccProviderFactories,
83+
Steps: []resource.TestStep{
84+
{
85+
Config: testAccKubernetesDataSourceIngressV1_nonexistent(name),
86+
Check: resource.ComposeAggregateTestCheckFunc(
87+
resource.TestCheckResourceAttr(dataSourceName, "metadata.0.name", name),
88+
resource.TestCheckResourceAttr(dataSourceName, "spec.#", "0"),
89+
),
90+
},
91+
},
92+
})
93+
}
94+
7395
func testAccKubernetesDataSourceIngressV1_basic(name string) string {
7496
return fmt.Sprintf(`resource "kubernetes_ingress_v1" "test" {
7597
metadata {
@@ -115,3 +137,12 @@ func testAccKubernetesDataSourceIngressV1_read() string {
115137
}
116138
`
117139
}
140+
141+
func testAccKubernetesDataSourceIngressV1_nonexistent(name string) string {
142+
return fmt.Sprintf(`data "kubernetes_ingress_v1" "test" {
143+
metadata {
144+
name = "%s"
145+
}
146+
}
147+
`, name)
148+
}

kubernetes/data_source_kubernetes_mutating_webhook_configuration_v1.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1313
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
14+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1415
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516
)
1617

@@ -124,6 +125,9 @@ func dataSourceKubernetesMutatingWebhookConfigurationV1Read(ctx context.Context,
124125
log.Printf("[INFO] Reading mutating webhook configuration %s", metadata.Name)
125126
cfg, err := conn.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(ctx, metadata.Name, metav1.GetOptions{})
126127
if err != nil {
128+
if apierrors.IsNotFound(err) {
129+
return nil
130+
}
127131
log.Printf("[DEBUG] Received error: %#v", err)
128132
return diag.FromErr(err)
129133
}

0 commit comments

Comments
 (0)