Skip to content

Commit

Permalink
feat: improve key construction for dependenciesmutator
Browse files Browse the repository at this point in the history
  • Loading branch information
JGiola committed Jul 22, 2024
1 parent 2365cf2 commit b3951e8
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 36 deletions.
38 changes: 22 additions & 16 deletions pkg/cmd/deploy/dependenciesmutator.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ var _ mutator.Interface = &dependenciesMutator{}
// The keys are the configmap kind, name, namespace and key name if necessary.
func checksumsFromConfigMap(obj *unstructured.Unstructured) map[string]string {
checksums := make(map[string]string)
cmKey := configMapGK.Kind + obj.GetName() + obj.GetNamespace()

cm := new(corev1.ConfigMap)
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, cm); err != nil {
Expand All @@ -114,15 +113,15 @@ func checksumsFromConfigMap(obj *unstructured.Unstructured) map[string]string {
totalData := make(map[string][]byte)
maps.Copy(totalData, cm.BinaryData)
for key, value := range cm.Data {
checksums[cmKey+key] = checksumFromData(value)
checksums[checksumObjectKey(configMapGK.Kind, obj.GetName(), obj.GetNamespace(), key)] = checksumFromData(value)
totalData[key] = []byte(value)
}

for key, value := range cm.BinaryData {
checksums[cmKey+key] = checksumFromData(value)
checksums[checksumObjectKey(configMapGK.Kind, obj.GetName(), obj.GetNamespace(), key)] = checksumFromData(value)
}

checksums[cmKey] = checksumFromData(totalData)
checksums[checksumObjectKey(configMapGK.Kind, obj.GetName(), obj.GetNamespace(), "")] = checksumFromData(totalData)
return checksums
}

Expand All @@ -131,7 +130,6 @@ func checksumsFromConfigMap(obj *unstructured.Unstructured) map[string]string {
// The keys are the secret kind, name, namespace and key name if necessary.
func checksumsFromSecret(obj *unstructured.Unstructured) map[string]string {
checksums := make(map[string]string)
secKey := secretGK.Kind + obj.GetName() + obj.GetNamespace()

sec := new(corev1.Secret)
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, sec); err != nil {
Expand All @@ -141,15 +139,15 @@ func checksumsFromSecret(obj *unstructured.Unstructured) map[string]string {
totalData := make(map[string][]byte)
maps.Copy(totalData, sec.Data)
for key, value := range sec.Data {
checksums[secKey+key] = checksumFromData(value)
checksums[checksumObjectKey(secretGK.Kind, obj.GetName(), obj.GetNamespace(), key)] = checksumFromData(value)
}

for key, value := range sec.StringData {
checksums[secKey+key] = checksumFromData(value)
checksums[checksumObjectKey(secretGK.Kind, obj.GetName(), obj.GetNamespace(), key)] = checksumFromData(value)
totalData[key] = []byte(value)
}

checksums[secKey] = checksumFromData(totalData)
checksums[checksumObjectKey(secretGK.Kind, obj.GetName(), obj.GetNamespace(), "")] = checksumFromData(totalData)

return checksums
}
Expand All @@ -163,13 +161,13 @@ func (m *dependenciesMutator) checksumsForPodSpec(pod corev1.PodSpec, namespace
for _, volume := range pod.Volumes {
fromSecret := volume.Secret
if fromSecret != nil {
dependencies = append(dependencies, secKind+fromSecret.SecretName+namespace)
dependencies = append(dependencies, checksumObjectKey(secKind, fromSecret.SecretName, namespace, ""))
continue
}

fromConfigMap := volume.ConfigMap
if fromConfigMap != nil {
dependencies = append(dependencies, cmKind+fromConfigMap.Name+namespace)
dependencies = append(dependencies, checksumObjectKey(cmKind, fromConfigMap.Name, namespace, ""))
continue
}
}
Expand All @@ -182,16 +180,16 @@ func (m *dependenciesMutator) checksumsForPodSpec(pod corev1.PodSpec, namespace
}

if env.ValueFrom.ConfigMapKeyRef != nil {
cmName := env.ValueFrom.ConfigMapKeyRef.LocalObjectReference.Name
key := env.ValueFrom.ConfigMapKeyRef.Key
dependencies = append(dependencies, cmKind+cmName+namespace+key)
name := env.ValueFrom.ConfigMapKeyRef.LocalObjectReference.Name
key := checksumObjectKey(cmKind, name, namespace, env.ValueFrom.ConfigMapKeyRef.Key)
dependencies = append(dependencies, key)
continue
}

if env.ValueFrom.SecretKeyRef != nil {
secName := env.ValueFrom.SecretKeyRef.LocalObjectReference.Name
key := env.ValueFrom.SecretKeyRef.Key
dependencies = append(dependencies, secKind+secName+namespace+key)
name := env.ValueFrom.SecretKeyRef.LocalObjectReference.Name
key := checksumObjectKey(secKind, name, namespace, env.ValueFrom.SecretKeyRef.Key)
dependencies = append(dependencies, key)
}
}
}
Expand All @@ -209,3 +207,11 @@ func (m *dependenciesMutator) checksumsForPodSpec(pod corev1.PodSpec, namespace

return checksums
}

func checksumObjectKey(kind, name, namespace, key string) string {
if len(key) == 0 {
return kind + ":" + name + ":" + namespace
}

return kind + ":" + name + ":" + namespace + ":" + key
}
32 changes: 16 additions & 16 deletions pkg/cmd/deploy/dependenciesmutator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ func TestNewDependenciesMutator(t *testing.T) {
jpltesting.UnstructuredFromFile(t, filepath.Join(testdata, "cm-other-namespace.yaml")),
},
expectedMap: map[string]string{
"ConfigMapexampleother-ns": "89557268706287308eefe82fbdbd327914ac22a23499a45be72ea79483d73a73",
"ConfigMapexampleother-nsconfig": "efe6c20174d12ac077f3de985cae67175a6108ac084e813a7d0eb9c5ff9fe85d",
"ConfigMapexampletest": "474402695ca63dd67a8ee93690d46011d2e19181aeb10c616af3cb48ac36adad",
"ConfigMapexampletestbconfig": "f2ad8ef38c3f6fac4d0dcfa67696710c04bc88f92a54f6758cb43c0d392b3eea",
"ConfigMapexampletestconfig": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"Secretexampletest": "f8ac3c753041ab4d641d61751aaf9a9422faf88b14b727789a0319fe872ee418",
"Secretexampletestdata": "355c838b5878c899babc73dbde367b0f450f37c41e5fec9c4af0a86900086b72",
"SecretexampletestotherData": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"ConfigMap:example:other-ns": "89557268706287308eefe82fbdbd327914ac22a23499a45be72ea79483d73a73",
"ConfigMap:example:other-ns:config": "efe6c20174d12ac077f3de985cae67175a6108ac084e813a7d0eb9c5ff9fe85d",
"ConfigMap:example:test": "474402695ca63dd67a8ee93690d46011d2e19181aeb10c616af3cb48ac36adad",
"ConfigMap:example:test:bconfig": "f2ad8ef38c3f6fac4d0dcfa67696710c04bc88f92a54f6758cb43c0d392b3eea",
"ConfigMap:example:test:config": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"Secret:example:test": "f8ac3c753041ab4d641d61751aaf9a9422faf88b14b727789a0319fe872ee418",
"Secret:example:test:data": "355c838b5878c899babc73dbde367b0f450f37c41e5fec9c4af0a86900086b72",
"Secret:example:test:otherData": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
},
},
}
Expand Down Expand Up @@ -155,14 +155,14 @@ func TestDependenciesMutatorMutate(t *testing.T) {
testdata := filepath.Join("testdata", "dependency-mutator")

checksumsMap := map[string]string{
"ConfigMapexampleother-ns": "89557268706287308eefe82fbdbd327914ac22a23499a45be72ea79483d73a73",
"ConfigMapexampleother-nsconfig": "efe6c20174d12ac077f3de985cae67175a6108ac084e813a7d0eb9c5ff9fe85d",
"ConfigMapexampletest": "474402695ca63dd67a8ee93690d46011d2e19181aeb10c616af3cb48ac36adad",
"ConfigMapexampletestbconfig": "f2ad8ef38c3f6fac4d0dcfa67696710c04bc88f92a54f6758cb43c0d392b3eea",
"ConfigMapexampletestconfig": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"Secretexampletest": "f8ac3c753041ab4d641d61751aaf9a9422faf88b14b727789a0319fe872ee418",
"Secretexampletestdata": "355c838b5878c899babc73dbde367b0f450f37c41e5fec9c4af0a86900086b72",
"SecretexampletestotherData": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"ConfigMap:example:other-ns": "89557268706287308eefe82fbdbd327914ac22a23499a45be72ea79483d73a73",
"ConfigMap:example:other-ns:config": "efe6c20174d12ac077f3de985cae67175a6108ac084e813a7d0eb9c5ff9fe85d",
"ConfigMap:example:test": "474402695ca63dd67a8ee93690d46011d2e19181aeb10c616af3cb48ac36adad",
"ConfigMap:example:test:bconfig": "f2ad8ef38c3f6fac4d0dcfa67696710c04bc88f92a54f6758cb43c0d392b3eea",
"ConfigMap:example:test:config": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
"Secret:example:test": "f8ac3c753041ab4d641d61751aaf9a9422faf88b14b727789a0319fe872ee418",
"Secret:example:test:data": "355c838b5878c899babc73dbde367b0f450f37c41e5fec9c4af0a86900086b72",
"Secret:example:test:otherData": "3f564266de9477b004c53c67de5eb4ec7cedb6dcee5b3d6d77ca2ed6cdd323ca",
}
tests := map[string]struct {
resource *unstructured.Unstructured
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ spec:
metadata:
annotations:
existing: annotation
mia-platform.eu/dependencies-checksum: 8c957b7db2280ebf67554d2b65ec30199e6e3a6a15648533f9aee370623e9e14
mia-platform.eu/dependencies-checksum: 0a7f9b4a49ce906ecfaba03aa45ef6512ecb33639d434107b43473b16d0c1afb
labels:
name: example
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ spec:
template:
metadata:
annotations:
mia-platform.eu/dependencies-checksum: 1e41cd0078be2ed7ec826419c5368e8f9cb924e9d4cc089e201746d514b64bd5
mia-platform.eu/dependencies-checksum: e6639472ab29288cafccc49c310dcf7b21109602c2db25e34b10de1041389043
labels:
app: example
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ metadata:
labels:
name: example
annotations:
mia-platform.eu/dependencies-checksum: 33b16f57da9917f60f04c1016f69c5dd1cc722842cc3df711acc7ee1f7b3579f
mia-platform.eu/dependencies-checksum: ec4cee1e7cd6503727710ff3f36d85576177196688ea2871efae51f9de3c65ea
spec:
initContainers:
- name: init
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/deploy/testdata/expectations/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ spec:
template:
metadata:
annotations:
mia-platform.eu/dependencies-checksum: "b31ede0a25315b68fab579aaf8db1fce45be576420135a5a06494bd6241e477b"
mia-platform.eu/dependencies-checksum: "e668e6cbb6e786b4b46b853136cfc9fac4effe474dbef3a8420339cc353b13d1"
mia-platform.eu/deploy-checksum: "a2d1ace0489d09c0ca26a1ab8a8bc9b11e4365cb4f904c434565a59119f3eb15"
labels:
app: example
Expand Down

0 comments on commit b3951e8

Please sign in to comment.