Skip to content

Commit c54e51a

Browse files
authored
Only Remove internal keys from objects, not templates / job_template (#1983)
* Fix logic to only cut internal keys from objects, not templates * Add changelog-entry * removed unnecessary prefix check * Add logic for annotations to be ignored in object and not in templates/jobTemplates * Add annotation check in config_basic test * fix test fortmat
1 parent cd45193 commit c54e51a

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

.changelog/1983.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
`resource/kubernetes_cron_job_v1`: Fix annotation logic to prevent internalkeys from being removed in templates
3+
```

kubernetes/resource_kubernetes_cron_job_v1.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,15 @@ func resourceKubernetesCronJobV1Create(ctx context.Context, d *schema.ResourceDa
5555
return diag.FromErr(err)
5656
}
5757

58+
configAnnotations := d.Get("metadata.0.annotations").(map[string]interface{})
59+
ignoreAnnotations := meta.(kubeClientsets).IgnoreAnnotations
60+
annotations := removeInternalKeys(metadata.Annotations, make(map[string]interface{}))
61+
metadata.Annotations = removeKeys(annotations, configAnnotations, ignoreAnnotations)
62+
5863
job := batch.CronJob{
5964
ObjectMeta: metadata,
6065
Spec: spec,
6166
}
62-
6367
log.Printf("[INFO] Creating new cron job: %#v", job)
6468

6569
out, err := conn.BatchV1().CronJobs(metadata.Namespace).Create(ctx, &job, metav1.CreateOptions{})
@@ -89,6 +93,10 @@ func resourceKubernetesCronJobV1Update(ctx context.Context, d *schema.ResourceDa
8993
if err != nil {
9094
return diag.FromErr(err)
9195
}
96+
configAnnotations := d.Get("metadata.0.annotations").(map[string]interface{})
97+
ignoreAnnotations := meta.(kubeClientsets).IgnoreAnnotations
98+
annotations := removeInternalKeys(metadata.Annotations, make(map[string]interface{}))
99+
metadata.Annotations = removeKeys(annotations, configAnnotations, ignoreAnnotations)
92100
spec.JobTemplate.ObjectMeta.Annotations = metadata.Annotations
93101

94102
cronjob := &batch.CronJob{
@@ -156,7 +164,6 @@ func resourceKubernetesCronJobV1Read(ctx context.Context, d *schema.ResourceData
156164
delete(labels, "controller-uid")
157165
}
158166
}
159-
160167
err = d.Set("metadata", flattenMetadata(job.ObjectMeta, d, meta))
161168
if err != nil {
162169
return diag.FromErr(err)

kubernetes/resource_kubernetes_cron_job_v1_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func TestAccKubernetesCronJobV1_basic(t *testing.T) {
3333
Check: resource.ComposeAggregateTestCheckFunc(
3434
testAccCheckKubernetesCronJobV1Exists("kubernetes_cron_job_v1.test", &conf1),
3535
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "metadata.0.name", name),
36+
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "metadata.0.annotations.hashicorp", "terraform"),
3637
resource.TestCheckResourceAttrSet("kubernetes_cron_job_v1.test", "metadata.0.generation"),
3738
resource.TestCheckResourceAttrSet("kubernetes_cron_job_v1.test", "metadata.0.resource_version"),
3839
resource.TestCheckResourceAttrSet("kubernetes_cron_job_v1.test", "metadata.0.uid"),
@@ -46,8 +47,10 @@ func TestAccKubernetesCronJobV1_basic(t *testing.T) {
4647
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.starting_deadline_seconds", "10"),
4748
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.successful_jobs_history_limit", "10"),
4849
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.suspend", "true"),
50+
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.metadata.0.annotations.cluster-autoscaler.kubernetes.io/safe-to-evict", "false"),
4951
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.spec.0.parallelism", "1"),
5052
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.spec.0.backoff_limit", "2"),
53+
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.spec.0.template.0.metadata.0.annotations.controller.kubernetes.io/pod-deletion-cost", "10000"),
5154
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.spec.0.template.0.spec.0.container.0.name", "hello"),
5255
resource.TestCheckResourceAttr("kubernetes_cron_job_v1.test", "spec.0.job_template.0.spec.0.template.0.spec.0.container.0.image", imageName),
5356
),
@@ -186,6 +189,9 @@ func testAccKubernetesCronJobV1Config_basic(name, imageName string) string {
186189
return fmt.Sprintf(`resource "kubernetes_cron_job_v1" "test" {
187190
metadata {
188191
name = "%s"
192+
annotations = {
193+
"hashicorp" = "terraform"
194+
}
189195
}
190196
spec {
191197
concurrency_policy = "Replace"
@@ -196,11 +202,19 @@ func testAccKubernetesCronJobV1Config_basic(name, imageName string) string {
196202
successful_jobs_history_limit = 10
197203
suspend = true
198204
job_template {
199-
metadata {}
205+
metadata {
206+
annotations = {
207+
"cluster-autoscaler.kubernetes.io/safe-to-evict" = "false"
208+
}
209+
}
200210
spec {
201211
backoff_limit = 2
202212
template {
203-
metadata {}
213+
metadata {
214+
annotations = {
215+
"controller.kubernetes.io/pod-deletion-cost" = 10000
216+
}
217+
}
204218
spec {
205219
container {
206220
name = "hello"

kubernetes/structure_cron_job_v1.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func flattenCronJobSpecV1(in batch.CronJobSpec, d *schema.ResourceData, meta int
4141
func flattenJobTemplateV1(in batch.JobTemplateSpec, d *schema.ResourceData, meta interface{}) ([]interface{}, error) {
4242
att := make(map[string]interface{})
4343

44-
att["metadata"] = flattenMetadata(in.ObjectMeta, d, meta)
44+
att["metadata"] = flattenMetadata(in.ObjectMeta, d, meta, "spec.0.job_template.0.")
4545

4646
jobSpec, err := flattenJobSpec(in.Spec, d, meta, "spec.0.job_template.0.spec.0.template.0.")
4747
if err != nil {

kubernetes/structures.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,15 @@ func flattenMetadata(meta metav1.ObjectMeta, d *schema.ResourceData, providerMet
126126
prefix = metaPrefix[0]
127127
}
128128

129-
configAnnotations := d.Get(prefix + "metadata.0.annotations").(map[string]interface{})
130-
ignoreAnnotations := providerMetadata.(kubeClientsets).IgnoreAnnotations
131-
annotations := removeInternalKeys(meta.Annotations, configAnnotations)
132-
m["annotations"] = removeKeys(annotations, configAnnotations, ignoreAnnotations)
129+
if prefix == "" {
130+
configAnnotations := d.Get(prefix + "metadata.0.annotations").(map[string]interface{})
131+
ignoreAnnotations := providerMetadata.(kubeClientsets).IgnoreAnnotations
132+
annotations := removeInternalKeys(meta.Annotations, configAnnotations)
133+
m["annotations"] = removeKeys(annotations, configAnnotations, ignoreAnnotations)
134+
} else {
135+
m["annotations"] = d.Get(prefix + "metadata.0.annotations").(map[string]interface{})
136+
}
137+
133138
if meta.GenerateName != "" {
134139
m["generate_name"] = meta.GenerateName
135140
}

0 commit comments

Comments
 (0)