Skip to content

Commit

Permalink
Merge pull request kubernetes-sigs#3040 from jon-fearer/fix-encryptio…
Browse files Browse the repository at this point in the history
…n-config

Fix EKS encryption config value comparisons
  • Loading branch information
k8s-ci-robot committed Dec 21, 2021
2 parents 7ef1746 + fcdc2ba commit 27b09a7
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,11 @@ func (r *AWSManagedControlPlane) ValidateUpdate(old runtime.Object) error {
}

// If encryptionConfig is already set, do not allow change in provider
if r.Spec.EncryptionConfig != nil && oldAWSManagedControlplane.Spec.EncryptionConfig != nil && *r.Spec.EncryptionConfig.Provider != *oldAWSManagedControlplane.Spec.EncryptionConfig.Provider {
if r.Spec.EncryptionConfig != nil &&
r.Spec.EncryptionConfig.Provider != nil &&
oldAWSManagedControlplane.Spec.EncryptionConfig != nil &&
oldAWSManagedControlplane.Spec.EncryptionConfig.Provider != nil &&
*r.Spec.EncryptionConfig.Provider != *oldAWSManagedControlplane.Spec.EncryptionConfig.Provider {
allErrs = append(allErrs,
field.Invalid(field.NewPath("spec", "encryptionConfig", "provider"), r.Spec.EncryptionConfig.Provider, "changing EKS encryption is not allowed after it has been enabled"),
)
Expand Down
11 changes: 9 additions & 2 deletions pkg/cloud/services/eks/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -707,12 +707,19 @@ func compareEncryptionConfig(updatedEncryptionConfig, existingEncryptionConfig [
return false
}
for index, encryptionConfig := range updatedEncryptionConfig {
if encryptionConfig.Provider != existingEncryptionConfig[index].Provider {
if getKeyArn(encryptionConfig) != getKeyArn(existingEncryptionConfig[index]) {
return false
}
if cmp.Equals(encryptionConfig.Resources, existingEncryptionConfig[index].Resources) {
if !cmp.Equals(encryptionConfig.Resources, existingEncryptionConfig[index].Resources) {
return false
}
}
return true
}

func getKeyArn(encryptionConfig *eks.EncryptionConfig) string {
if encryptionConfig.Provider != nil {
return aws.StringValue(encryptionConfig.Provider.KeyArn)
}
return ""
}
15 changes: 14 additions & 1 deletion pkg/cloud/services/eks/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -441,12 +441,25 @@ func TestReconcileEKSEncryptionConfig(t *testing.T) {
expectError bool
}{
{
name: "no upgrade necessary",
name: "no upgrade necessary - encryption disabled",
oldEncryptionConfig: &ekscontrolplanev1.EncryptionConfig{},
newEncryptionConfig: &ekscontrolplanev1.EncryptionConfig{},
expect: func(m *mock_eksiface.MockEKSAPIMockRecorder) {},
expectError: false,
},
{
name: "no upgrade necessary - encryption config unchanged",
oldEncryptionConfig: &ekscontrolplanev1.EncryptionConfig{
Provider: pointer.String("provider"),
Resources: []*string{pointer.String("foo"), pointer.String("bar")},
},
newEncryptionConfig: &ekscontrolplanev1.EncryptionConfig{
Provider: pointer.String("provider"),
Resources: []*string{pointer.String("foo"), pointer.String("bar")},
},
expect: func(m *mock_eksiface.MockEKSAPIMockRecorder) {},
expectError: false,
},
{
name: "needs upgrade",
oldEncryptionConfig: nil,
Expand Down
2 changes: 1 addition & 1 deletion pkg/internal/cmp/slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func Equals(slice1, slice2 []*string) bool {

if len(slice1) == len(slice2) {
for i, v := range slice1 {
if pointer.StringEqual(v, slice2[i]) {
if !pointer.StringEqual(v, slice2[i]) {
return false
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/internal/cmp/slice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ func TestCompareSlices(t *testing.T) {
slice2 := []*string{pointer.String("bar"), pointer.String("foo")}

expected := Equals(slice1, slice2)
g.Expect(expected, true)
g.Expect(expected).To(BeTrue())

slice2 = append(slice2, pointer.String("test"))
expected = Equals(slice1, slice2)
g.Expect(expected, false)
g.Expect(expected).To(BeFalse())
}

0 comments on commit 27b09a7

Please sign in to comment.