From 06b3f743d1763f3898daecb2ef78aaba4bc1571b Mon Sep 17 00:00:00 2001 From: Alexander Chernov Date: Sat, 16 Mar 2024 18:12:46 +0100 Subject: [PATCH] changed yaml_incluster structure and added additional debug message (#112) --- go.mod | 1 + go.sum | 4 + kubernetes/resource_kubectl_manifest.go | 17 ++-- kubernetes/resource_kubectl_manifest_test.go | 100 +++++++++---------- 4 files changed, 63 insertions(+), 59 deletions(-) diff --git a/go.mod b/go.mod index c9078444..61f8255c 100644 --- a/go.mod +++ b/go.mod @@ -97,6 +97,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect diff --git a/go.sum b/go.sum index aeed6f1f..c1b43fc8 100644 --- a/go.sum +++ b/go.sum @@ -455,6 +455,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= @@ -475,6 +477,7 @@ github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -721,6 +724,7 @@ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= diff --git a/kubernetes/resource_kubectl_manifest.go b/kubernetes/resource_kubectl_manifest.go index 53e11c8a..14b5df82 100644 --- a/kubernetes/resource_kubectl_manifest.go +++ b/kubernetes/resource_kubectl_manifest.go @@ -5,6 +5,7 @@ import ( "crypto/sha256" "encoding/base64" "fmt" + "github.com/sergi/go-diff/diffmatchpatch" "k8s.io/cli-runtime/pkg/genericiooptions" k8sdelete "k8s.io/kubectl/pkg/cmd/delete" "log" @@ -303,7 +304,11 @@ metadata: stateYaml := d.Get("yaml_incluster").(string) liveStateYaml := d.Get("live_manifest_incluster").(string) if stateYaml != liveStateYaml { - log.Printf("[TRACE] DETECTED YAML STATE %s vs %s", stateYaml, liveStateYaml) + log.Printf("[TRACE] DETECTED YAML STATE DIFFERENCE %s vs %s", stateYaml, liveStateYaml) + dmp := diffmatchpatch.New() + patches := dmp.PatchMake(stateYaml, liveStateYaml) + patchText := dmp.PatchToText(patches) + log.Printf("[DEBUG] DETECTED YAML INCLUSTER STATE DIFFERENCE. Patch diff: %s", patchText) _ = d.SetNewComputed("yaml_incluster") } @@ -1010,9 +1015,7 @@ func getLiveManifestFingerprint(d *schema.ResourceData, userProvided *yaml.Manif if hasIgnoreFields { ignoreFields = expandStringList(ignoreFieldsRaw.([]interface{})) } - - fields := getLiveManifestFields_WithIgnoredFields(ignoreFields, userProvided, liveManifest) - return getFingerprint(fields) + return getLiveManifestFields_WithIgnoredFields(ignoreFields, userProvided, liveManifest) } func getFingerprint(s string) string { @@ -1065,10 +1068,10 @@ func getLiveManifestFields_WithIgnoredFields(ignoredFields []string, userProvide if _, exists := flattenedLive[userKey]; exists { userKeys = append(userKeys, userKey) normalizedLiveValue := strings.TrimSpace(flattenedLive[userKey]) - flattenedUser[userKey] = normalizedLiveValue if normalizedUserValue != normalizedLiveValue { log.Printf("[TRACE] yaml drift detected in %s for %s, was: %s now: %s", userProvided.GetSelfLink(), userKey, normalizedUserValue, normalizedLiveValue) } + flattenedUser[userKey] = getFingerprint(normalizedLiveValue) } else { if normalizedUserValue != "" { log.Printf("[TRACE] yaml drift detected in %s for %s, was %s now blank", userProvided.GetSelfLink(), userKey, normalizedUserValue) @@ -1077,12 +1080,12 @@ func getLiveManifestFields_WithIgnoredFields(ignoredFields []string, userProvide } sort.Strings(userKeys) - returnedValues := []string{} + var returnedValues []string for _, k := range userKeys { returnedValues = append(returnedValues, fmt.Sprintf("%s=%s", k, flattenedUser[k])) } - return strings.Join(returnedValues, ",") + return strings.Join(returnedValues, "\n") } var kubernetesControlFields = []string{ diff --git a/kubernetes/resource_kubectl_manifest_test.go b/kubernetes/resource_kubectl_manifest_test.go index b8fe4970..faa2e602 100644 --- a/kubernetes/resource_kubectl_manifest_test.go +++ b/kubernetes/resource_kubectl_manifest_test.go @@ -241,8 +241,6 @@ metadata: namespace: %s type: Opaque `, namespace)), - - resource.TestCheckResourceAttr("kubectl_manifest.test", "yaml_incluster", getFingerprint(fmt.Sprintf(`apiVersion=v1,kind=Secret,metadata.name=mysecret,metadata.namespace=%s,type=Opaque`, namespace))), ), }, }, @@ -300,7 +298,6 @@ metadata: namespace: %s type: Opaque `, namespace)), - resource.TestCheckResourceAttr("kubectl_manifest.test", "yaml_incluster", getFingerprint(fmt.Sprintf(`apiVersion=v1,kind=Secret,metadata.name=mysecret,metadata.namespace=%s,type=Opaque`, namespace))), ), }, }, @@ -356,7 +353,6 @@ rules: - watch - list `, namespace, namespace)), - resource.TestCheckResourceAttr("kubectl_manifest.test", "yaml_incluster", getFingerprint(fmt.Sprintf(`apiVersion=rbac.authorization.k8s.io/v1,kind=ClusterRole,metadata.name=mysuperrole-%s,rules.#=1,rules.0.apiGroups.#=1,rules.0.apiGroups.0=,rules.0.resources.#=1,rules.0.resources.0=secrets,rules.0.verbs.#=3,rules.0.verbs.0=get,rules.0.verbs.1=watch,rules.0.verbs.2=list`, namespace))), ), }, }, @@ -597,8 +593,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { liveManifest: map[string]interface{}{ "test1": "test2", }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", expectedDrift: false, }, { @@ -616,8 +612,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "resourceVersion": "1245", }, }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", expectedDrift: false, }, { @@ -631,8 +627,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "test1": "test2", "ignoreThis": "1245", }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", ignored: []string{"ignoreThis"}, expectedDrift: false, }, @@ -651,8 +647,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "this": "1245", }, }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", ignored: []string{"ignore.this"}, expectedDrift: false, }, @@ -671,8 +667,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "this": "1245", }, }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", ignored: []string{"ignore"}, expectedDrift: false, }, @@ -694,8 +690,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { }, }, }, - expectedFields: "test1=test2", - expectedFingerprint: "9369bac4ce5d012a79110117b871e20bb3484dab079d1471ee5981da42fb4a30", + expectedFields: "test1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "f9ed95ba61889f8e13cd1189f86c5901fb717ac60be6f4d7a65d17bf07326700", ignored: []string{"ignore"}, expectedDrift: false, }, @@ -714,8 +710,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "bob": "bill", }, }, - expectedFields: "nest.bob=bill,test1=test2", - expectedFingerprint: "3101bf7d8f32b48993efa15e0fdd439237e63ef093d23e92deb9b8485e3faa03", + expectedFields: "nest.bob=623210167553939c87ed8c5f2bfe0b3e0684e12c3a3dd2513613c4e67263b5a1\ntest1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "40bf1763c91a63191148522b44cf86d80fe76bb110f772eab7d9c3ecaef5259f", expectedDrift: false, }, { @@ -737,8 +733,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "bob3": "bill", }, }, - expectedFields: "nest.bob1=bill,nest.bob2=bill,nest.bob3=bill,test1=test2", - expectedFingerprint: "0ad7f5a7682d24a2105a457f9093ab406d9a3c92a14d1e67e25ac0a1fea79ca9", + expectedFields: "nest.bob1=623210167553939c87ed8c5f2bfe0b3e0684e12c3a3dd2513613c4e67263b5a1\nnest.bob2=623210167553939c87ed8c5f2bfe0b3e0684e12c3a3dd2513613c4e67263b5a1\nnest.bob3=623210167553939c87ed8c5f2bfe0b3e0684e12c3a3dd2513613c4e67263b5a1\ntest1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "74762989e04b2a4c76111ef52e28571447ea2da66b5ec170d3a2aa8c87d36953", expectedDrift: false, }, { @@ -763,8 +759,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { }, }, }, - expectedFields: "nest.bob1.#=3,nest.bob1.0=c,nest.bob1.1=b,nest.bob1.2=a,test1=test2", - expectedFingerprint: "7c234055ab3af4bfc4541b4f11ebe41f089f65ff2276454783fd066c4e890bb9", + expectedFields: "nest.bob1.#=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nnest.bob1.0=2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6\nnest.bob1.1=3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d\nnest.bob1.2=ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb\ntest1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "ac14f80b8067dfacbdfb9f6ad728ea09eadcf879bd9171500cc6adf02e84eb9d", expectedDrift: true, }, { @@ -803,8 +799,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { }, }, }, - expectedFields: "nest.bob1.#=2,nest.bob1.0.1=1,nest.bob1.0.2=2,nest.bob1.0.3=3,nest.bob1.1.1=1,nest.bob1.1.2=2,nest.bob1.1.3=3,test1=test2", - expectedFingerprint: "f3efd8721cbfa6421a4230c6fffdac94d63a51e57097a45979972e6654a992da", + expectedFields: "nest.bob1.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nnest.bob1.0.1=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nnest.bob1.0.2=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nnest.bob1.0.3=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nnest.bob1.1.1=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nnest.bob1.1.2=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nnest.bob1.1.3=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\ntest1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "854345b04fc20f9bd5bfacb6179fd7ec38832f3927d0ff2de86cb96383cdb5f1", expectedDrift: false, }, { @@ -818,8 +814,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "afield": "test2", "ztest1": "test2", }, - expectedFields: "afield=test2,ztest1=test2", - expectedFingerprint: "6ddd159d93a55b78442c74cacfff5a2afb04ead770f87ac0af1b7471e71ddead", + expectedFields: "afield=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752\nztest1=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "72a914d79cbd09f028a179229f8a8695f1e733f89819c3f951e2045bbf1ab49f", expectedDrift: false, }, { @@ -837,8 +833,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "1", "2", }, }, - expectedFields: "afield=test2,ztest1.#=2,ztest1.0=1,ztest1.1=2", - expectedFingerprint: "d09ba05ec3c744be7174243acfd2370a6d0dabfbe7980bc5ee02c0790d383960", + expectedFields: "afield=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752\nztest1.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nztest1.0=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nztest1.1=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35", + expectedFingerprint: "60fec4d049ffe32998a8b98bafb4759d4c64d1e7d948f9ffd9af2ec3a8382892", expectedDrift: false, }, { @@ -853,8 +849,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "1", "2", }, }, - expectedFields: "afield=test2", - expectedFingerprint: "18cf5c716095e42b64da5d4929c605022b6799fb3866bf9f1d12f4e30d40c185", + expectedFields: "afield=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "abd6da5468cf9cc65252371afe556be35b40903ec9e151a03945d20a41891423", expectedDrift: false, }, { @@ -867,8 +863,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { liveManifest: map[string]interface{}{ "afield": "test2", }, - expectedFields: "afield=test2", - expectedFingerprint: "18cf5c716095e42b64da5d4929c605022b6799fb3866bf9f1d12f4e30d40c185", + expectedFields: "afield=60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752", + expectedFingerprint: "abd6da5468cf9cc65252371afe556be35b40903ec9e151a03945d20a41891423", expectedDrift: true, }, { @@ -879,8 +875,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { liveManifest: map[string]interface{}{ "afield": 1, }, - expectedFields: "afield=1", - expectedFingerprint: "b4636ba2492c0110641065ccef19d47ac718f317d4541608587954c924e9d521", + expectedFields: "afield=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + expectedFingerprint: "2d86f5deef362ae6a74fadb8cdb95df4386ee605a0c75c6226f0a810f49c9184", expectedDrift: false, }, { @@ -892,8 +888,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { liveManifest: map[string]interface{}{ "afield": 2, }, - expectedFields: "afield=2", - expectedFingerprint: "e99abf0780d7d15a43b75f39a1e82a7ec6342d8efb5b077c46a6b85ec2b2efcb", + expectedFields: "afield=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35", + expectedFingerprint: "cce738ca1a3ca9fa9069b6ed402b61f6021b9aa2826efb58bffb4c86948ae043", expectedDrift: true, }, { @@ -910,8 +906,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "willchange": "updatedbill", }, }, - expectedFields: "nest.willchange=updatedbill", - expectedFingerprint: "ebbab7294a88055e1b6af53fdb0da8366054e1c7b88d79294d8424b85d4eb769", + expectedFields: "nest.willchange=aaab42be650931c48b99f6409a7c6990c62bcd55f827b0c4e76941d76490d8ca", + expectedFingerprint: "42d86c0cee389ab367b2b8df0f2454d9677c15da425a6694b8208cc629e13c56", expectedDrift: true, }, { @@ -929,8 +925,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { "atest": "bill", }, }, - expectedFields: "atest=test,nest.atest=bill", - expectedFingerprint: "0a926a0980a93f7360e2badadbb8c362dd345fd53c641d1096e5680fd66c11e3", + expectedFields: "atest=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\nnest.atest=623210167553939c87ed8c5f2bfe0b3e0684e12c3a3dd2513613c4e67263b5a1", + expectedFingerprint: "1b8bf74179b9e91bf8c2ab43a3c5100f4261dba6f9409ef13359df55bb738c86", expectedDrift: false, }, { @@ -951,8 +947,8 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { }, }, }, - expectedFields: "atest=test,meta.annotations.helm.sh/hook=crd-install", - expectedFingerprint: "5d9a5cd23ce01763e52f171e6bf2d98ca3cfed982974579af4c011ff6010694f", + expectedFields: "atest=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\nmeta.annotations.helm.sh/hook=7e53588c2c8cd5a8f0d7e59f4d22977f1fb7a1a5166dde9456795d80f683edb5", + expectedFingerprint: "6f62fad1a4f0029840e291bee701c3f003951c10a5f9304028d44667f0db7ff1", expectedDrift: false, }, { @@ -971,40 +967,40 @@ func TestGetLiveManifestFilteredForUserProvidedOnly(t *testing.T) { }, }, }, - expectedFields: "atest=test", - expectedFingerprint: "df296364dd3346f0aa05c63f0b0df19b7aa850e44e9f4a80cf6ac06a889d9868", + expectedFields: "atest=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + expectedFingerprint: "522627f1e0ced24f72e61b1e93b2c9c82b7ea0516f444b57ab8b7697ef846b2a", expectedDrift: false, }, { description: "Deployment manifest without changes", userProvided: loadRealDeploymentManifest().Raw.Object, liveManifest: loadRealDeploymentManifest().Raw.Object, - expectedFields: "apiVersion=apps/v1,kind=Deployment,metadata.annotations.artifact.spinnaker.io/location=service-prod,metadata.annotations.artifact.spinnaker.io/name=testapp,metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,metadata.annotations.artifact.spinnaker.io/version=,metadata.annotations.deployment.kubernetes.io/revision=3,metadata.annotations.moniker.spinnaker.io/application=testapp,metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,metadata.labels.app.kubernetes.io/managed-by=spinnaker,metadata.labels.app.kubernetes.io/name=testapp,metadata.name=testapp,metadata.namespace=service-prod,spec.progressDeadlineSeconds=600,spec.replicas=1,spec.revisionHistoryLimit=3,spec.selector.matchLabels.app.kubernetes.io/name=testapp,spec.strategy.rollingUpdate.maxSurge=25%,spec.strategy.rollingUpdate.maxUnavailable=25%,spec.strategy.type=RollingUpdate,spec.template.metadata.annotations.artifact.spinnaker.io/location=service-prod,spec.template.metadata.annotations.artifact.spinnaker.io/name=testapp,spec.template.metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,spec.template.metadata.annotations.artifact.spinnaker.io/version=,spec.template.metadata.annotations.kubectl.terraform.test/envoy=true,spec.template.metadata.annotations.kubectl.terraform.test/telegraf=statsd,spec.template.metadata.annotations.moniker.spinnaker.io/application=testapp,spec.template.metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,spec.template.metadata.creationTimestamp=,spec.template.metadata.labels.app.kubernetes.io/managed-by=spinnaker,spec.template.metadata.labels.app.kubernetes.io/name=testapp,spec.template.metadata.labels.app.kubernetes.io/version=1.0.918,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=kubectl.terraform.test/instance-class,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=In,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=cpu,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=2,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=topology.kubernetes.io/zone,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=25,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=kubernetes.io/hostname,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=100,spec.template.spec.containers.#=1,spec.template.spec.containers.0.envFrom.#=1,spec.template.spec.containers.0.envFrom.0.configMapRef.name=testapp-config-v001,spec.template.spec.containers.0.image=my-registry/application/testapp:1.0.918,spec.template.spec.containers.0.imagePullPolicy=Always,spec.template.spec.containers.0.name=application,spec.template.spec.containers.0.resources.limits.cpu=1,spec.template.spec.containers.0.resources.limits.memory=1Gi,spec.template.spec.containers.0.resources.requests.cpu=50m,spec.template.spec.containers.0.resources.requests.memory=256Mi,spec.template.spec.containers.0.terminationMessagePath=/dev/termination-log,spec.template.spec.containers.0.terminationMessagePolicy=File,spec.template.spec.containers.0.volumeMounts.#=1,spec.template.spec.containers.0.volumeMounts.0.mountPath=/share,spec.template.spec.containers.0.volumeMounts.0.name=shared-data,spec.template.spec.dnsPolicy=ClusterFirst,spec.template.spec.priorityClassName=spinnaker-managed-deployment,spec.template.spec.restartPolicy=Always,spec.template.spec.schedulerName=default-scheduler,spec.template.spec.securityContext.fsGroup=1100,spec.template.spec.securityContext.runAsUser=1100,spec.template.spec.serviceAccount=testapp,spec.template.spec.serviceAccountName=testapp,spec.template.spec.terminationGracePeriodSeconds=30,spec.template.spec.volumes.#=2,spec.template.spec.volumes.0.name=cert,spec.template.spec.volumes.0.secret.defaultMode=420,spec.template.spec.volumes.0.secret.secretName=testapp-cert,spec.template.spec.volumes.1.name=shared-data", - expectedFingerprint: "1f1c6ba90e13b44ec07790933eef29604f8ad74be76bd38eff1bf7411f479eb5", + expectedFields: "apiVersion=024614bbf9753e35bd0e7e47cf2f1d05243368e9b54ae6f53f8c80e152530aed\nkind=870a8ffd98f4f2bd5041ee4cebde82de4bdeb253fac88c5469a2f15f15614186\nmetadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nmetadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nmetadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nmetadata.annotations.deployment.kubernetes.io/revision=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nmetadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nmetadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nmetadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.namespace=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.progressDeadlineSeconds=284b7e6d788f363f910f7beb1910473e23ce9d6c871f1ce0f31f22a982d48ad4\nspec.replicas=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.revisionHistoryLimit=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nspec.selector.matchLabels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.strategy.rollingUpdate.maxSurge=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.rollingUpdate.maxUnavailable=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.type=8f434f8bcd785d91c7e6c0394b1a3ddd503ece214c8aea23b8446ee389456f96\nspec.template.metadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.template.metadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nspec.template.metadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nspec.template.metadata.annotations.kubectl.terraform.test/envoy=b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b\nspec.template.metadata.annotations.kubectl.terraform.test/telegraf=22dcc997cd3a5311709bb7fd75ea4e92d6d76daa87ff6a0e4b2eef9b85129736\nspec.template.metadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nspec.template.metadata.creationTimestamp=426b5dfece37e413f559015825ebc7c5ba251a13028e2fcd5ed36df57be00b6c\nspec.template.metadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nspec.template.metadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.labels.app.kubernetes.io/version=da7965ad0f9dddb433712a4ee3b014e42c70a4c1d560187dcf446cba4cdd4860\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=b2c21b8c6d5bc3c78a90d2e5974ba05916e2f777d1a85cf3d2832cdc9c487093\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=68ab84f7c6d0f5781585eb1b5289499fb29081b918f71ebddb5f72021c9ef9c5\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=d26ba3a6c4fcf2b72755b5a23fee0a5994a39b71bdc9db6ef6d083a22a001353\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=93966ab96ee1d305f0346ca2acf3b7e16c004a07bf322671293db9f19c18b079\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306\nspec.template.spec.containers.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.0.configMapRef.name=5fca260b630569e695d3345f5ed80bf350446b6e85014b8365c45fe9e139d20c\nspec.template.spec.containers.0.image=5f67805ae6c365cf598b82eb292e333e6f64f85869ccf89b0c0f6cae61c1ec5b\nspec.template.spec.containers.0.imagePullPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.containers.0.name=1fe289205936c3fdb61158223892c7a8bee6ff4dfa085ea1c094ce0294e32114\nspec.template.spec.containers.0.resources.limits.cpu=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.resources.limits.memory=861c482be953844b2a4cc7f3b6e237b2dd6d59a22bc473acdb67af5886c39da2\nspec.template.spec.containers.0.resources.requests.cpu=faffa5ac848811d8696883abb6cc8a3fb969f5e8fd0d01ba05f5548239021783\nspec.template.spec.containers.0.resources.requests.memory=1306e550ae337d714509c29593c3206953a97c28c691de5fd076aa0f0fb8e180\nspec.template.spec.containers.0.terminationMessagePath=b4233eab819d8ac0fcf88d898f421811a69431b589b99b0566fc5d2e93f8d51b\nspec.template.spec.containers.0.terminationMessagePolicy=50009ce1da4d15e1c4a04024df691eed5f0d598e2c4c67092f205366d0adf99e\nspec.template.spec.containers.0.volumeMounts.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.volumeMounts.0.mountPath=f2faf809c8aa079f24a51a3652d62801b3316c01777f034cb64de66b8ab297b3\nspec.template.spec.containers.0.volumeMounts.0.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336\nspec.template.spec.dnsPolicy=a6fa189cbc86bdda65887ed55da47e8c1e09bb263e1a2c978d7f9aaede2d7ec9\nspec.template.spec.priorityClassName=531bc7e09f78453c899c5193bdf009f12236bf0eb9b317c222aa0b2569722f02\nspec.template.spec.restartPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.schedulerName=6a1fba091ce95fd821cfa7b9d45e24391aa1902cccef6c5807c56cafbb324851\nspec.template.spec.securityContext.fsGroup=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.securityContext.runAsUser=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.serviceAccount=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.serviceAccountName=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.terminationGracePeriodSeconds=624b60c58c9d8bfb6ff1886c2fd605d2adeb6ea4da576068201b6c6958ce93f4\nspec.template.spec.volumes.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.volumes.0.name=06298432e8066b29e2223bcc23aa9504b56ae508fabf3435508869b9c3190e22\nspec.template.spec.volumes.0.secret.defaultMode=db55da3fc3098e9c42311c6013304ff36b19ef73d12ea932054b5ad51df4f49d\nspec.template.spec.volumes.0.secret.secretName=21e72c0fdfbf18403978b00e2ccc30c8c29480ebb29087fe09866c90333f4d78\nspec.template.spec.volumes.1.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336", + expectedFingerprint: "5c0b0545c1b6fffe489d1cb3f9fe96a577e0cff37334cafc00af8ae4d7dbdf9e", expectedDrift: false, }, { description: "Deployment manifest with changes should show drift", userProvided: loadRealDeploymentManifest().Raw.Object, liveManifest: withAlteredField(loadRealDeploymentManifest(), "name-changed", "metadata", "name").Raw.Object, - expectedFields: "apiVersion=apps/v1,kind=Deployment,metadata.annotations.artifact.spinnaker.io/location=service-prod,metadata.annotations.artifact.spinnaker.io/name=testapp,metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,metadata.annotations.artifact.spinnaker.io/version=,metadata.annotations.deployment.kubernetes.io/revision=3,metadata.annotations.moniker.spinnaker.io/application=testapp,metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,metadata.labels.app.kubernetes.io/managed-by=spinnaker,metadata.labels.app.kubernetes.io/name=testapp,metadata.name=name-changed,metadata.namespace=service-prod,spec.progressDeadlineSeconds=600,spec.replicas=1,spec.revisionHistoryLimit=3,spec.selector.matchLabels.app.kubernetes.io/name=testapp,spec.strategy.rollingUpdate.maxSurge=25%,spec.strategy.rollingUpdate.maxUnavailable=25%,spec.strategy.type=RollingUpdate,spec.template.metadata.annotations.artifact.spinnaker.io/location=service-prod,spec.template.metadata.annotations.artifact.spinnaker.io/name=testapp,spec.template.metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,spec.template.metadata.annotations.artifact.spinnaker.io/version=,spec.template.metadata.annotations.kubectl.terraform.test/envoy=true,spec.template.metadata.annotations.kubectl.terraform.test/telegraf=statsd,spec.template.metadata.annotations.moniker.spinnaker.io/application=testapp,spec.template.metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,spec.template.metadata.creationTimestamp=,spec.template.metadata.labels.app.kubernetes.io/managed-by=spinnaker,spec.template.metadata.labels.app.kubernetes.io/name=testapp,spec.template.metadata.labels.app.kubernetes.io/version=1.0.918,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=kubectl.terraform.test/instance-class,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=In,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=cpu,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=2,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=topology.kubernetes.io/zone,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=25,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=kubernetes.io/hostname,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=100,spec.template.spec.containers.#=1,spec.template.spec.containers.0.envFrom.#=1,spec.template.spec.containers.0.envFrom.0.configMapRef.name=testapp-config-v001,spec.template.spec.containers.0.image=my-registry/application/testapp:1.0.918,spec.template.spec.containers.0.imagePullPolicy=Always,spec.template.spec.containers.0.name=application,spec.template.spec.containers.0.resources.limits.cpu=1,spec.template.spec.containers.0.resources.limits.memory=1Gi,spec.template.spec.containers.0.resources.requests.cpu=50m,spec.template.spec.containers.0.resources.requests.memory=256Mi,spec.template.spec.containers.0.terminationMessagePath=/dev/termination-log,spec.template.spec.containers.0.terminationMessagePolicy=File,spec.template.spec.containers.0.volumeMounts.#=1,spec.template.spec.containers.0.volumeMounts.0.mountPath=/share,spec.template.spec.containers.0.volumeMounts.0.name=shared-data,spec.template.spec.dnsPolicy=ClusterFirst,spec.template.spec.priorityClassName=spinnaker-managed-deployment,spec.template.spec.restartPolicy=Always,spec.template.spec.schedulerName=default-scheduler,spec.template.spec.securityContext.fsGroup=1100,spec.template.spec.securityContext.runAsUser=1100,spec.template.spec.serviceAccount=testapp,spec.template.spec.serviceAccountName=testapp,spec.template.spec.terminationGracePeriodSeconds=30,spec.template.spec.volumes.#=2,spec.template.spec.volumes.0.name=cert,spec.template.spec.volumes.0.secret.defaultMode=420,spec.template.spec.volumes.0.secret.secretName=testapp-cert,spec.template.spec.volumes.1.name=shared-data", - expectedFingerprint: "e468a45e883f696efa3afe82a76268be4b79dcf40efc26b033d9c8b3b454a829", + expectedFields: "apiVersion=024614bbf9753e35bd0e7e47cf2f1d05243368e9b54ae6f53f8c80e152530aed\nkind=870a8ffd98f4f2bd5041ee4cebde82de4bdeb253fac88c5469a2f15f15614186\nmetadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nmetadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nmetadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nmetadata.annotations.deployment.kubernetes.io/revision=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nmetadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nmetadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nmetadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.name=194e285f328d7f2a1ea257da138d1e670b142dc01df00bacb7f915f4e90533b0\nmetadata.namespace=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.progressDeadlineSeconds=284b7e6d788f363f910f7beb1910473e23ce9d6c871f1ce0f31f22a982d48ad4\nspec.replicas=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.revisionHistoryLimit=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nspec.selector.matchLabels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.strategy.rollingUpdate.maxSurge=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.rollingUpdate.maxUnavailable=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.type=8f434f8bcd785d91c7e6c0394b1a3ddd503ece214c8aea23b8446ee389456f96\nspec.template.metadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.template.metadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nspec.template.metadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nspec.template.metadata.annotations.kubectl.terraform.test/envoy=b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b\nspec.template.metadata.annotations.kubectl.terraform.test/telegraf=22dcc997cd3a5311709bb7fd75ea4e92d6d76daa87ff6a0e4b2eef9b85129736\nspec.template.metadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nspec.template.metadata.creationTimestamp=426b5dfece37e413f559015825ebc7c5ba251a13028e2fcd5ed36df57be00b6c\nspec.template.metadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nspec.template.metadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.labels.app.kubernetes.io/version=da7965ad0f9dddb433712a4ee3b014e42c70a4c1d560187dcf446cba4cdd4860\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=b2c21b8c6d5bc3c78a90d2e5974ba05916e2f777d1a85cf3d2832cdc9c487093\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=68ab84f7c6d0f5781585eb1b5289499fb29081b918f71ebddb5f72021c9ef9c5\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=d26ba3a6c4fcf2b72755b5a23fee0a5994a39b71bdc9db6ef6d083a22a001353\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=93966ab96ee1d305f0346ca2acf3b7e16c004a07bf322671293db9f19c18b079\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306\nspec.template.spec.containers.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.0.configMapRef.name=5fca260b630569e695d3345f5ed80bf350446b6e85014b8365c45fe9e139d20c\nspec.template.spec.containers.0.image=5f67805ae6c365cf598b82eb292e333e6f64f85869ccf89b0c0f6cae61c1ec5b\nspec.template.spec.containers.0.imagePullPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.containers.0.name=1fe289205936c3fdb61158223892c7a8bee6ff4dfa085ea1c094ce0294e32114\nspec.template.spec.containers.0.resources.limits.cpu=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.resources.limits.memory=861c482be953844b2a4cc7f3b6e237b2dd6d59a22bc473acdb67af5886c39da2\nspec.template.spec.containers.0.resources.requests.cpu=faffa5ac848811d8696883abb6cc8a3fb969f5e8fd0d01ba05f5548239021783\nspec.template.spec.containers.0.resources.requests.memory=1306e550ae337d714509c29593c3206953a97c28c691de5fd076aa0f0fb8e180\nspec.template.spec.containers.0.terminationMessagePath=b4233eab819d8ac0fcf88d898f421811a69431b589b99b0566fc5d2e93f8d51b\nspec.template.spec.containers.0.terminationMessagePolicy=50009ce1da4d15e1c4a04024df691eed5f0d598e2c4c67092f205366d0adf99e\nspec.template.spec.containers.0.volumeMounts.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.volumeMounts.0.mountPath=f2faf809c8aa079f24a51a3652d62801b3316c01777f034cb64de66b8ab297b3\nspec.template.spec.containers.0.volumeMounts.0.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336\nspec.template.spec.dnsPolicy=a6fa189cbc86bdda65887ed55da47e8c1e09bb263e1a2c978d7f9aaede2d7ec9\nspec.template.spec.priorityClassName=531bc7e09f78453c899c5193bdf009f12236bf0eb9b317c222aa0b2569722f02\nspec.template.spec.restartPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.schedulerName=6a1fba091ce95fd821cfa7b9d45e24391aa1902cccef6c5807c56cafbb324851\nspec.template.spec.securityContext.fsGroup=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.securityContext.runAsUser=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.serviceAccount=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.serviceAccountName=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.terminationGracePeriodSeconds=624b60c58c9d8bfb6ff1886c2fd605d2adeb6ea4da576068201b6c6958ce93f4\nspec.template.spec.volumes.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.volumes.0.name=06298432e8066b29e2223bcc23aa9504b56ae508fabf3435508869b9c3190e22\nspec.template.spec.volumes.0.secret.defaultMode=db55da3fc3098e9c42311c6013304ff36b19ef73d12ea932054b5ad51df4f49d\nspec.template.spec.volumes.0.secret.secretName=21e72c0fdfbf18403978b00e2ccc30c8c29480ebb29087fe09866c90333f4d78\nspec.template.spec.volumes.1.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336", + expectedFingerprint: "438901c57e3fe7c1cdc5280556b006f76d9d5da28d0ac32306401aa6bc481699", expectedDrift: true, }, { description: "Deployment manifest with generation changes should not show drift", userProvided: loadRealDeploymentManifest().Raw.Object, liveManifest: withAlteredField(loadRealDeploymentManifest(), "123", "metadata", "generation").Raw.Object, - expectedFields: "apiVersion=apps/v1,kind=Deployment,metadata.annotations.artifact.spinnaker.io/location=service-prod,metadata.annotations.artifact.spinnaker.io/name=testapp,metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,metadata.annotations.artifact.spinnaker.io/version=,metadata.annotations.deployment.kubernetes.io/revision=3,metadata.annotations.moniker.spinnaker.io/application=testapp,metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,metadata.labels.app.kubernetes.io/managed-by=spinnaker,metadata.labels.app.kubernetes.io/name=testapp,metadata.name=testapp,metadata.namespace=service-prod,spec.progressDeadlineSeconds=600,spec.replicas=1,spec.revisionHistoryLimit=3,spec.selector.matchLabels.app.kubernetes.io/name=testapp,spec.strategy.rollingUpdate.maxSurge=25%,spec.strategy.rollingUpdate.maxUnavailable=25%,spec.strategy.type=RollingUpdate,spec.template.metadata.annotations.artifact.spinnaker.io/location=service-prod,spec.template.metadata.annotations.artifact.spinnaker.io/name=testapp,spec.template.metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,spec.template.metadata.annotations.artifact.spinnaker.io/version=,spec.template.metadata.annotations.kubectl.terraform.test/envoy=true,spec.template.metadata.annotations.kubectl.terraform.test/telegraf=statsd,spec.template.metadata.annotations.moniker.spinnaker.io/application=testapp,spec.template.metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,spec.template.metadata.creationTimestamp=,spec.template.metadata.labels.app.kubernetes.io/managed-by=spinnaker,spec.template.metadata.labels.app.kubernetes.io/name=testapp,spec.template.metadata.labels.app.kubernetes.io/version=1.0.918,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=kubectl.terraform.test/instance-class,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=In,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=cpu,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=2,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=topology.kubernetes.io/zone,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=25,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=kubernetes.io/hostname,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=100,spec.template.spec.containers.#=1,spec.template.spec.containers.0.envFrom.#=1,spec.template.spec.containers.0.envFrom.0.configMapRef.name=testapp-config-v001,spec.template.spec.containers.0.image=my-registry/application/testapp:1.0.918,spec.template.spec.containers.0.imagePullPolicy=Always,spec.template.spec.containers.0.name=application,spec.template.spec.containers.0.resources.limits.cpu=1,spec.template.spec.containers.0.resources.limits.memory=1Gi,spec.template.spec.containers.0.resources.requests.cpu=50m,spec.template.spec.containers.0.resources.requests.memory=256Mi,spec.template.spec.containers.0.terminationMessagePath=/dev/termination-log,spec.template.spec.containers.0.terminationMessagePolicy=File,spec.template.spec.containers.0.volumeMounts.#=1,spec.template.spec.containers.0.volumeMounts.0.mountPath=/share,spec.template.spec.containers.0.volumeMounts.0.name=shared-data,spec.template.spec.dnsPolicy=ClusterFirst,spec.template.spec.priorityClassName=spinnaker-managed-deployment,spec.template.spec.restartPolicy=Always,spec.template.spec.schedulerName=default-scheduler,spec.template.spec.securityContext.fsGroup=1100,spec.template.spec.securityContext.runAsUser=1100,spec.template.spec.serviceAccount=testapp,spec.template.spec.serviceAccountName=testapp,spec.template.spec.terminationGracePeriodSeconds=30,spec.template.spec.volumes.#=2,spec.template.spec.volumes.0.name=cert,spec.template.spec.volumes.0.secret.defaultMode=420,spec.template.spec.volumes.0.secret.secretName=testapp-cert,spec.template.spec.volumes.1.name=shared-data", - expectedFingerprint: "1f1c6ba90e13b44ec07790933eef29604f8ad74be76bd38eff1bf7411f479eb5", + expectedFields: "apiVersion=024614bbf9753e35bd0e7e47cf2f1d05243368e9b54ae6f53f8c80e152530aed\nkind=870a8ffd98f4f2bd5041ee4cebde82de4bdeb253fac88c5469a2f15f15614186\nmetadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nmetadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nmetadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nmetadata.annotations.deployment.kubernetes.io/revision=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nmetadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nmetadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nmetadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.namespace=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.progressDeadlineSeconds=284b7e6d788f363f910f7beb1910473e23ce9d6c871f1ce0f31f22a982d48ad4\nspec.replicas=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.revisionHistoryLimit=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nspec.selector.matchLabels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.strategy.rollingUpdate.maxSurge=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.rollingUpdate.maxUnavailable=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.type=8f434f8bcd785d91c7e6c0394b1a3ddd503ece214c8aea23b8446ee389456f96\nspec.template.metadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.template.metadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nspec.template.metadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nspec.template.metadata.annotations.kubectl.terraform.test/envoy=b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b\nspec.template.metadata.annotations.kubectl.terraform.test/telegraf=22dcc997cd3a5311709bb7fd75ea4e92d6d76daa87ff6a0e4b2eef9b85129736\nspec.template.metadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nspec.template.metadata.creationTimestamp=426b5dfece37e413f559015825ebc7c5ba251a13028e2fcd5ed36df57be00b6c\nspec.template.metadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nspec.template.metadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.labels.app.kubernetes.io/version=da7965ad0f9dddb433712a4ee3b014e42c70a4c1d560187dcf446cba4cdd4860\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=b2c21b8c6d5bc3c78a90d2e5974ba05916e2f777d1a85cf3d2832cdc9c487093\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=68ab84f7c6d0f5781585eb1b5289499fb29081b918f71ebddb5f72021c9ef9c5\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=d26ba3a6c4fcf2b72755b5a23fee0a5994a39b71bdc9db6ef6d083a22a001353\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=93966ab96ee1d305f0346ca2acf3b7e16c004a07bf322671293db9f19c18b079\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306\nspec.template.spec.containers.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.0.configMapRef.name=5fca260b630569e695d3345f5ed80bf350446b6e85014b8365c45fe9e139d20c\nspec.template.spec.containers.0.image=5f67805ae6c365cf598b82eb292e333e6f64f85869ccf89b0c0f6cae61c1ec5b\nspec.template.spec.containers.0.imagePullPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.containers.0.name=1fe289205936c3fdb61158223892c7a8bee6ff4dfa085ea1c094ce0294e32114\nspec.template.spec.containers.0.resources.limits.cpu=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.resources.limits.memory=861c482be953844b2a4cc7f3b6e237b2dd6d59a22bc473acdb67af5886c39da2\nspec.template.spec.containers.0.resources.requests.cpu=faffa5ac848811d8696883abb6cc8a3fb969f5e8fd0d01ba05f5548239021783\nspec.template.spec.containers.0.resources.requests.memory=1306e550ae337d714509c29593c3206953a97c28c691de5fd076aa0f0fb8e180\nspec.template.spec.containers.0.terminationMessagePath=b4233eab819d8ac0fcf88d898f421811a69431b589b99b0566fc5d2e93f8d51b\nspec.template.spec.containers.0.terminationMessagePolicy=50009ce1da4d15e1c4a04024df691eed5f0d598e2c4c67092f205366d0adf99e\nspec.template.spec.containers.0.volumeMounts.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.volumeMounts.0.mountPath=f2faf809c8aa079f24a51a3652d62801b3316c01777f034cb64de66b8ab297b3\nspec.template.spec.containers.0.volumeMounts.0.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336\nspec.template.spec.dnsPolicy=a6fa189cbc86bdda65887ed55da47e8c1e09bb263e1a2c978d7f9aaede2d7ec9\nspec.template.spec.priorityClassName=531bc7e09f78453c899c5193bdf009f12236bf0eb9b317c222aa0b2569722f02\nspec.template.spec.restartPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.schedulerName=6a1fba091ce95fd821cfa7b9d45e24391aa1902cccef6c5807c56cafbb324851\nspec.template.spec.securityContext.fsGroup=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.securityContext.runAsUser=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.serviceAccount=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.serviceAccountName=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.terminationGracePeriodSeconds=624b60c58c9d8bfb6ff1886c2fd605d2adeb6ea4da576068201b6c6958ce93f4\nspec.template.spec.volumes.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.volumes.0.name=06298432e8066b29e2223bcc23aa9504b56ae508fabf3435508869b9c3190e22\nspec.template.spec.volumes.0.secret.defaultMode=db55da3fc3098e9c42311c6013304ff36b19ef73d12ea932054b5ad51df4f49d\nspec.template.spec.volumes.0.secret.secretName=21e72c0fdfbf18403978b00e2ccc30c8c29480ebb29087fe09866c90333f4d78\nspec.template.spec.volumes.1.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336", + expectedFingerprint: "5c0b0545c1b6fffe489d1cb3f9fe96a577e0cff37334cafc00af8ae4d7dbdf9e", expectedDrift: false, }, { description: "Deployment manifest with kubectl annotation changes should not show drift", userProvided: loadRealDeploymentManifest().Raw.Object, liveManifest: withAlteredField(loadRealDeploymentManifest(), "changed", "metadata", "annotations", "kubectl.kubernetes.io/last-applied-configuration").Raw.Object, - expectedFields: "apiVersion=apps/v1,kind=Deployment,metadata.annotations.artifact.spinnaker.io/location=service-prod,metadata.annotations.artifact.spinnaker.io/name=testapp,metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,metadata.annotations.artifact.spinnaker.io/version=,metadata.annotations.deployment.kubernetes.io/revision=3,metadata.annotations.moniker.spinnaker.io/application=testapp,metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,metadata.labels.app.kubernetes.io/managed-by=spinnaker,metadata.labels.app.kubernetes.io/name=testapp,metadata.name=testapp,metadata.namespace=service-prod,spec.progressDeadlineSeconds=600,spec.replicas=1,spec.revisionHistoryLimit=3,spec.selector.matchLabels.app.kubernetes.io/name=testapp,spec.strategy.rollingUpdate.maxSurge=25%,spec.strategy.rollingUpdate.maxUnavailable=25%,spec.strategy.type=RollingUpdate,spec.template.metadata.annotations.artifact.spinnaker.io/location=service-prod,spec.template.metadata.annotations.artifact.spinnaker.io/name=testapp,spec.template.metadata.annotations.artifact.spinnaker.io/type=kubernetes/deployment,spec.template.metadata.annotations.artifact.spinnaker.io/version=,spec.template.metadata.annotations.kubectl.terraform.test/envoy=true,spec.template.metadata.annotations.kubectl.terraform.test/telegraf=statsd,spec.template.metadata.annotations.moniker.spinnaker.io/application=testapp,spec.template.metadata.annotations.moniker.spinnaker.io/cluster=deployment testapp,spec.template.metadata.creationTimestamp=,spec.template.metadata.labels.app.kubernetes.io/managed-by=spinnaker,spec.template.metadata.labels.app.kubernetes.io/name=testapp,spec.template.metadata.labels.app.kubernetes.io/version=1.0.918,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=kubectl.terraform.test/instance-class,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=In,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=1,spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=cpu,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=2,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=topology.kubernetes.io/zone,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=25,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=app.kubernetes.io/name,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=In,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=1,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=testapp,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=kubernetes.io/hostname,spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=100,spec.template.spec.containers.#=1,spec.template.spec.containers.0.envFrom.#=1,spec.template.spec.containers.0.envFrom.0.configMapRef.name=testapp-config-v001,spec.template.spec.containers.0.image=my-registry/application/testapp:1.0.918,spec.template.spec.containers.0.imagePullPolicy=Always,spec.template.spec.containers.0.name=application,spec.template.spec.containers.0.resources.limits.cpu=1,spec.template.spec.containers.0.resources.limits.memory=1Gi,spec.template.spec.containers.0.resources.requests.cpu=50m,spec.template.spec.containers.0.resources.requests.memory=256Mi,spec.template.spec.containers.0.terminationMessagePath=/dev/termination-log,spec.template.spec.containers.0.terminationMessagePolicy=File,spec.template.spec.containers.0.volumeMounts.#=1,spec.template.spec.containers.0.volumeMounts.0.mountPath=/share,spec.template.spec.containers.0.volumeMounts.0.name=shared-data,spec.template.spec.dnsPolicy=ClusterFirst,spec.template.spec.priorityClassName=spinnaker-managed-deployment,spec.template.spec.restartPolicy=Always,spec.template.spec.schedulerName=default-scheduler,spec.template.spec.securityContext.fsGroup=1100,spec.template.spec.securityContext.runAsUser=1100,spec.template.spec.serviceAccount=testapp,spec.template.spec.serviceAccountName=testapp,spec.template.spec.terminationGracePeriodSeconds=30,spec.template.spec.volumes.#=2,spec.template.spec.volumes.0.name=cert,spec.template.spec.volumes.0.secret.defaultMode=420,spec.template.spec.volumes.0.secret.secretName=testapp-cert,spec.template.spec.volumes.1.name=shared-data", - expectedFingerprint: "1f1c6ba90e13b44ec07790933eef29604f8ad74be76bd38eff1bf7411f479eb5", + expectedFields: "apiVersion=024614bbf9753e35bd0e7e47cf2f1d05243368e9b54ae6f53f8c80e152530aed\nkind=870a8ffd98f4f2bd5041ee4cebde82de4bdeb253fac88c5469a2f15f15614186\nmetadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nmetadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nmetadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nmetadata.annotations.deployment.kubernetes.io/revision=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nmetadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nmetadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nmetadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nmetadata.namespace=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.progressDeadlineSeconds=284b7e6d788f363f910f7beb1910473e23ce9d6c871f1ce0f31f22a982d48ad4\nspec.replicas=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.revisionHistoryLimit=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce\nspec.selector.matchLabels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.strategy.rollingUpdate.maxSurge=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.rollingUpdate.maxUnavailable=72da55d317fd997b93138b8646a2238e806a4c4566d1e854277b5a583d8aef23\nspec.strategy.type=8f434f8bcd785d91c7e6c0394b1a3ddd503ece214c8aea23b8446ee389456f96\nspec.template.metadata.annotations.artifact.spinnaker.io/location=bb7a7a27e307fbcae3a498b5fa18cf6d9f9ec756497cd98c12255a1639eb8f87\nspec.template.metadata.annotations.artifact.spinnaker.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.artifact.spinnaker.io/type=216ded8192cde024f33a1fc8fe9594cd48bca91a637f37793fabc402d07ce4fd\nspec.template.metadata.annotations.artifact.spinnaker.io/version=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nspec.template.metadata.annotations.kubectl.terraform.test/envoy=b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b\nspec.template.metadata.annotations.kubectl.terraform.test/telegraf=22dcc997cd3a5311709bb7fd75ea4e92d6d76daa87ff6a0e4b2eef9b85129736\nspec.template.metadata.annotations.moniker.spinnaker.io/application=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.annotations.moniker.spinnaker.io/cluster=6eb28159e0032bc1dcceb48d2024fd0851486cec17830f332d9d6d3ea116d872\nspec.template.metadata.creationTimestamp=426b5dfece37e413f559015825ebc7c5ba251a13028e2fcd5ed36df57be00b6c\nspec.template.metadata.labels.app.kubernetes.io/managed-by=16bddce66b69a75e784de97b0d09bfb6f7b6288e721146ac771d90ea64923a96\nspec.template.metadata.labels.app.kubernetes.io/name=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.metadata.labels.app.kubernetes.io/version=da7965ad0f9dddb433712a4ee3b014e42c70a4c1d560187dcf446cba4cdd4860\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.key=b2c21b8c6d5bc3c78a90d2e5974ba05916e2f777d1a85cf3d2832cdc9c487093\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.0.matchExpressions.0.values.0=68ab84f7c6d0f5781585eb1b5289499fb29081b918f71ebddb5f72021c9ef9c5\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.podAffinityTerm.topologyKey=d26ba3a6c4fcf2b72755b5a23fee0a5994a39b71bdc9db6ef6d083a22a001353\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.0.weight=b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.key=71dafa318ec2911c798e83bed9911c4a3579d9f70c24e2a9b0f7af9445fca167\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.operator=8bc1d53cc57c24b79bf7c260b1f3b29973caab7b8f501c33016b321ebfc274f1\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.labelSelector.matchExpressions.0.values.0=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.podAffinityTerm.topologyKey=93966ab96ee1d305f0346ca2acf3b7e16c004a07bf322671293db9f19c18b079\nspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.1.weight=ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306\nspec.template.spec.containers.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.envFrom.0.configMapRef.name=5fca260b630569e695d3345f5ed80bf350446b6e85014b8365c45fe9e139d20c\nspec.template.spec.containers.0.image=5f67805ae6c365cf598b82eb292e333e6f64f85869ccf89b0c0f6cae61c1ec5b\nspec.template.spec.containers.0.imagePullPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.containers.0.name=1fe289205936c3fdb61158223892c7a8bee6ff4dfa085ea1c094ce0294e32114\nspec.template.spec.containers.0.resources.limits.cpu=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.resources.limits.memory=861c482be953844b2a4cc7f3b6e237b2dd6d59a22bc473acdb67af5886c39da2\nspec.template.spec.containers.0.resources.requests.cpu=faffa5ac848811d8696883abb6cc8a3fb969f5e8fd0d01ba05f5548239021783\nspec.template.spec.containers.0.resources.requests.memory=1306e550ae337d714509c29593c3206953a97c28c691de5fd076aa0f0fb8e180\nspec.template.spec.containers.0.terminationMessagePath=b4233eab819d8ac0fcf88d898f421811a69431b589b99b0566fc5d2e93f8d51b\nspec.template.spec.containers.0.terminationMessagePolicy=50009ce1da4d15e1c4a04024df691eed5f0d598e2c4c67092f205366d0adf99e\nspec.template.spec.containers.0.volumeMounts.#=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\nspec.template.spec.containers.0.volumeMounts.0.mountPath=f2faf809c8aa079f24a51a3652d62801b3316c01777f034cb64de66b8ab297b3\nspec.template.spec.containers.0.volumeMounts.0.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336\nspec.template.spec.dnsPolicy=a6fa189cbc86bdda65887ed55da47e8c1e09bb263e1a2c978d7f9aaede2d7ec9\nspec.template.spec.priorityClassName=531bc7e09f78453c899c5193bdf009f12236bf0eb9b317c222aa0b2569722f02\nspec.template.spec.restartPolicy=de9f057a471cdb8d3b082719bdc7ad2031788d042947349723fa83c9d13a517a\nspec.template.spec.schedulerName=6a1fba091ce95fd821cfa7b9d45e24391aa1902cccef6c5807c56cafbb324851\nspec.template.spec.securityContext.fsGroup=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.securityContext.runAsUser=ab9828ca390581b72629069049793ba3c99bb8e5e9e7b97a55c71957e04df9a3\nspec.template.spec.serviceAccount=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.serviceAccountName=4ff6303b0c4a88c0beb95a1ac1f3ab1bfefa326f74992cf42f7b9a04a5d8703d\nspec.template.spec.terminationGracePeriodSeconds=624b60c58c9d8bfb6ff1886c2fd605d2adeb6ea4da576068201b6c6958ce93f4\nspec.template.spec.volumes.#=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\nspec.template.spec.volumes.0.name=06298432e8066b29e2223bcc23aa9504b56ae508fabf3435508869b9c3190e22\nspec.template.spec.volumes.0.secret.defaultMode=db55da3fc3098e9c42311c6013304ff36b19ef73d12ea932054b5ad51df4f49d\nspec.template.spec.volumes.0.secret.secretName=21e72c0fdfbf18403978b00e2ccc30c8c29480ebb29087fe09866c90333f4d78\nspec.template.spec.volumes.1.name=577375a8b9495741fb95e9d46a88c5f5b1ae99a863c59d0ae508596be0834336", + expectedFingerprint: "5c0b0545c1b6fffe489d1cb3f9fe96a577e0cff37334cafc00af8ae4d7dbdf9e", expectedDrift: false, }, }