From ef4c3af808a77cc67d5aaff5a78590065cd9ef11 Mon Sep 17 00:00:00 2001 From: Trystan Leftwich Date: Wed, 14 Feb 2024 11:41:32 +1100 Subject: [PATCH] fix(rdsinstance): Updates will now set ResourceCredentialsSecretUserKey in ConnectionDetails if masterUsername is set Signed-off-by: Trystan Leftwich --- .../database/rdsinstance/rdsinstance.go | 10 +++-- .../database/rdsinstance/rdsinstance_test.go | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/pkg/controller/database/rdsinstance/rdsinstance.go b/pkg/controller/database/rdsinstance/rdsinstance.go index 3028e0ef19..4dc7c7c2ff 100644 --- a/pkg/controller/database/rdsinstance/rdsinstance.go +++ b/pkg/controller/database/rdsinstance/rdsinstance.go @@ -275,19 +275,21 @@ func (e *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext return managed.ExternalUpdate{}, errors.Wrap(err, errPatchCreationFailed) } modify := rds.GenerateModifyDBInstanceInput(meta.GetExternalName(cr), patch, &rsp.DBInstances[0]) - var conn managed.ConnectionDetails + conn := managed.ConnectionDetails{} pwd, changed, err := rds.GetPassword(ctx, e.kube, cr.Spec.ForProvider.MasterPasswordSecretRef, cr.Spec.WriteConnectionSecretToReference) if err != nil { return managed.ExternalUpdate{}, err } if changed { - conn = managed.ConnectionDetails{ - xpv1.ResourceCredentialsSecretPasswordKey: []byte(pwd), - } + conn[xpv1.ResourceCredentialsSecretPasswordKey] = []byte(pwd) modify.MasterUserPassword = aws.String(pwd) } + if cr.Spec.ForProvider.MasterUsername != nil { + conn[xpv1.ResourceCredentialsSecretUserKey] = []byte(aws.ToString(cr.Spec.ForProvider.MasterUsername)) + } + if _, err = e.client.ModifyDBInstance(ctx, modify); err != nil { return managed.ExternalUpdate{}, errorutils.Wrap(err, errModifyFailed) } diff --git a/pkg/controller/database/rdsinstance/rdsinstance_test.go b/pkg/controller/database/rdsinstance/rdsinstance_test.go index fce4b36a91..6e211f403d 100644 --- a/pkg/controller/database/rdsinstance/rdsinstance_test.go +++ b/pkg/controller/database/rdsinstance/rdsinstance_test.go @@ -738,6 +738,9 @@ func TestUpdate(t *testing.T) { }, want: want{ cr: instance(withTags(map[string]string{"foo": "bar"})), + result: managed.ExternalUpdate{ + ConnectionDetails: managed.ConnectionDetails{}, + }, }, }, "AutoscaleExcludeStorage": { @@ -765,6 +768,9 @@ func TestUpdate(t *testing.T) { }, want: want{ cr: instance(withMaxAllocatedStorage(100), withAllocatedStorage(20)), + result: managed.ExternalUpdate{ + ConnectionDetails: managed.ConnectionDetails{}, + }, }, }, "AWSManagedBackupRetentionTargetIgnore": { @@ -796,6 +802,9 @@ func TestUpdate(t *testing.T) { }, want: want{ cr: instance(withBackupRetentionPeriod(0), withStatusBackupRetentionPeriod(7), withPreferredBackupWindow("x")), + result: managed.ExternalUpdate{ + ConnectionDetails: managed.ConnectionDetails{}, + }, }, }, "AlreadyModifying": { @@ -804,6 +813,35 @@ func TestUpdate(t *testing.T) { }, want: want{ cr: instance(withDBInstanceStatus(v1beta1.RDSInstanceStateModifying)), + result: managed.ExternalUpdate{ + ConnectionDetails: nil, + }, + }, + }, + "AddMasterUsernameToConnectionDetails": { + args: args{ + rds: &fake.MockRDSClient{ + MockModify: func(ctx context.Context, input *awsrds.ModifyDBInstanceInput, opts []func(*awsrds.Options)) (*awsrds.ModifyDBInstanceOutput, error) { + return &awsrds.ModifyDBInstanceOutput{}, nil + }, + MockDescribe: func(ctx context.Context, input *awsrds.DescribeDBInstancesInput, opts []func(*awsrds.Options)) (*awsrds.DescribeDBInstancesOutput, error) { + return &awsrds.DescribeDBInstancesOutput{ + DBInstances: []awsrdstypes.DBInstance{{}}, + }, nil + }, + MockAddTags: func(ctx context.Context, input *awsrds.AddTagsToResourceInput, opts []func(*awsrds.Options)) (*awsrds.AddTagsToResourceOutput, error) { + return &awsrds.AddTagsToResourceOutput{}, nil + }, + }, + cr: instance(withMasterUsername(&masterUsername)), + }, + want: want{ + cr: instance(withMasterUsername(&masterUsername)), + result: managed.ExternalUpdate{ + ConnectionDetails: managed.ConnectionDetails{ + xpv1.ResourceCredentialsSecretUserKey: []byte(masterUsername), + }, + }, }, }, "FailedDescribe": {