Skip to content

Commit 39abf8a

Browse files
committed
Do not try to merge deprecated replication controller spec fields with new ones, mixed use-cases are now prevented
1 parent a7e4d62 commit 39abf8a

File tree

2 files changed

+40
-30
lines changed

2 files changed

+40
-30
lines changed

kubernetes/resource_kubernetes_replication_controller.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ func resourceKubernetesReplicationControllerCreate(d *schema.ResourceData, meta
107107
conn := meta.(*kubernetes.Clientset)
108108

109109
metadata := expandMetadata(d.Get("metadata").([]interface{}))
110-
spec, err := expandReplicationControllerSpec(d.Get("spec").([]interface{}))
110+
111+
// Check which replication controller template spec fields are used
112+
_, deprecatedSpecFieldsExist := d.GetOkExists("spec.0.template.0.container.0.name")
113+
114+
spec, err := expandReplicationControllerSpec(d.Get("spec").([]interface{}), deprecatedSpecFieldsExist)
111115
if err != nil {
112116
return err
113117
}
@@ -165,7 +169,10 @@ func resourceKubernetesReplicationControllerRead(d *schema.ResourceData, meta in
165169
return err
166170
}
167171

168-
spec, err := flattenReplicationControllerSpec(rc.Spec)
172+
// Check which replication controller template spec fields are used
173+
_, deprecatedSpecFieldsExist := d.GetOkExists("spec.0.template.0.container.0.name")
174+
175+
spec, err := flattenReplicationControllerSpec(rc.Spec, deprecatedSpecFieldsExist)
169176
if err != nil {
170177
return err
171178
}
@@ -189,7 +196,10 @@ func resourceKubernetesReplicationControllerUpdate(d *schema.ResourceData, meta
189196
ops := patchMetadata("metadata.0.", "/metadata/", d)
190197

191198
if d.HasChange("spec") {
192-
spec, err := expandReplicationControllerSpec(d.Get("spec").([]interface{}))
199+
// Check which replication controller template spec fields are used
200+
_, deprecatedSpecFieldsExist := d.GetOkExists("spec.0.template.0.container.0.name")
201+
202+
spec, err := expandReplicationControllerSpec(d.Get("spec").([]interface{}), deprecatedSpecFieldsExist)
193203
if err != nil {
194204
return err
195205
}
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package kubernetes
22

33
import (
4-
"github.com/imdario/mergo"
54
"k8s.io/api/core/v1"
65
)
76

8-
func flattenReplicationControllerSpec(in v1.ReplicationControllerSpec) ([]interface{}, error) {
7+
func flattenReplicationControllerSpec(in v1.ReplicationControllerSpec, useDeprecatedSpecFields bool) ([]interface{}, error) {
98
att := make(map[string]interface{})
109
att["min_ready_seconds"] = in.MinReadySeconds
1110

@@ -23,12 +22,16 @@ func flattenReplicationControllerSpec(in v1.ReplicationControllerSpec) ([]interf
2322
return nil, err
2423
}
2524
template := make(map[string]interface{})
26-
template["spec"] = podSpec
27-
template["metadata"] = flattenMetadata(in.Template.ObjectMeta)
2825

29-
// Merge deprecated fields
30-
for k, v := range podSpec[0].(map[string]interface{}) {
31-
template[k] = v
26+
if useDeprecatedSpecFields {
27+
// Use deprecated fields
28+
for k, v := range podSpec[0].(map[string]interface{}) {
29+
template[k] = v
30+
}
31+
} else {
32+
// Use new fields
33+
template["spec"] = podSpec
34+
template["metadata"] = flattenMetadata(in.Template.ObjectMeta)
3235
}
3336

3437
att["template"] = []interface{}{template}
@@ -37,7 +40,7 @@ func flattenReplicationControllerSpec(in v1.ReplicationControllerSpec) ([]interf
3740
return []interface{}{att}, nil
3841
}
3942

40-
func expandReplicationControllerSpec(rc []interface{}) (v1.ReplicationControllerSpec, error) {
43+
func expandReplicationControllerSpec(rc []interface{}, useDeprecatedSpecFields bool) (v1.ReplicationControllerSpec, error) {
4144
obj := v1.ReplicationControllerSpec{}
4245
if len(rc) == 0 || rc[0] == nil {
4346
return obj, nil
@@ -47,7 +50,7 @@ func expandReplicationControllerSpec(rc []interface{}) (v1.ReplicationController
4750
obj.Replicas = ptrToInt32(int32(in["replicas"].(int)))
4851
obj.Selector = expandStringMap(in["selector"].(map[string]interface{}))
4952

50-
template, err := expandReplicationControllerTemplate(in["template"].([]interface{}), obj.Selector)
53+
template, err := expandReplicationControllerTemplate(in["template"].([]interface{}), obj.Selector, useDeprecatedSpecFields)
5154
if err != nil {
5255
return obj, err
5356
}
@@ -57,7 +60,7 @@ func expandReplicationControllerSpec(rc []interface{}) (v1.ReplicationController
5760
return obj, nil
5861
}
5962

60-
func expandReplicationControllerTemplate(rct []interface{}, selector map[string]string) (v1.PodTemplateSpec, error) {
63+
func expandReplicationControllerTemplate(rct []interface{}, selector map[string]string, useDeprecatedSpecFields bool) (v1.PodTemplateSpec, error) {
6164
obj := v1.PodTemplateSpec{}
6265
in := rct[0].(map[string]interface{})
6366

@@ -70,24 +73,21 @@ func expandReplicationControllerTemplate(rct []interface{}, selector map[string]
7073
}
7174
obj.ObjectMeta = metadata
7275

73-
// Get pod spec from new fields
74-
podSpec, err := expandPodSpec(in["spec"].([]interface{}))
75-
if err != nil {
76-
return obj, err
77-
}
78-
79-
// Get pod spec from deprecated fields
80-
podSpecDeprecated, err := expandPodSpec(rct)
81-
if err != nil {
82-
return obj, err
83-
}
84-
85-
// Merge them overriding the new ones by the deprecated ones
86-
if err := mergo.MergeWithOverwrite(&podSpec, podSpecDeprecated); err != nil {
87-
return obj, err
76+
if useDeprecatedSpecFields {
77+
// Get pod spec from deprecated fields
78+
podSpecDeprecated, err := expandPodSpec(rct)
79+
if err != nil {
80+
return obj, err
81+
}
82+
obj.Spec = podSpecDeprecated
83+
} else {
84+
// Get pod spec from new fields
85+
podSpec, err := expandPodSpec(in["spec"].([]interface{}))
86+
if err != nil {
87+
return obj, err
88+
}
89+
obj.Spec = podSpec
8890
}
8991

90-
obj.Spec = podSpec
91-
9292
return obj, nil
9393
}

0 commit comments

Comments
 (0)