Skip to content

Commit 5cab19a

Browse files
committed
Review fixes: handle errors in defers
1 parent 36e2ff3 commit 5cab19a

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

pkg/client/client.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ func NewValidatedClient(ctrlRuntimeClient client.Client, secretName, namespace,
360360
}, nil
361361
}
362362

363-
func newAWSSession(ctrlRuntimeClient client.Client, secretName, namespace, region string, configManagedClient client.Client) (*session.Session, error) {
363+
func newAWSSession(ctrlRuntimeClient client.Client, secretName, namespace, region string, configManagedClient client.Client) (s *session.Session, err error) {
364364
sessionOptions := session.Options{
365365
Config: aws.Config{
366366
Region: aws.String(region),
@@ -384,7 +384,9 @@ func newAWSSession(ctrlRuntimeClient client.Client, secretName, namespace, regio
384384

385385
// Ensure the file gets deleted in any case.
386386
defer func() {
387-
os.Remove(sharedCredsFile)
387+
if removeErr := os.Remove(sharedCredsFile); removeErr != nil && err == nil {
388+
err = fmt.Errorf("failed to remove shared credentials file %s: %v", sharedCredsFile, removeErr)
389+
}
388390
}()
389391

390392
sessionOptions.SharedConfigState = session.SharedConfigEnable
@@ -401,7 +403,7 @@ func newAWSSession(ctrlRuntimeClient client.Client, secretName, namespace, regio
401403
}
402404

403405
// Otherwise default to relying on the IAM role of the masters where the actuator is running:
404-
s, err := session.NewSessionWithOptions(sessionOptions)
406+
s, err = session.NewSessionWithOptions(sessionOptions)
405407
if err != nil {
406408
return nil, err
407409
}
@@ -466,7 +468,7 @@ func buildCustomEndpointsMap(customEndpoints []configv1.AWSServiceEndpoint) map[
466468

467469
// sharedCredentialsFileFromSecret returns a location (path) to the shared credentials
468470
// file that was created using the provided secret
469-
func sharedCredentialsFileFromSecret(secret *corev1.Secret) (string, error) {
471+
func sharedCredentialsFileFromSecret(secret *corev1.Secret) (filename string, err error) {
470472
var data []byte
471473
switch {
472474
case len(secret.Data["credentials"]) > 0:
@@ -486,10 +488,18 @@ func sharedCredentialsFileFromSecret(secret *corev1.Secret) (string, error) {
486488
if err != nil {
487489
return "", fmt.Errorf("failed to create file for shared credentials: %v", err)
488490
}
489-
defer f.Close()
490-
if _, err := f.Write(data); err != nil {
491+
492+
defer func() {
493+
if closeErr := f.Close(); closeErr != nil && err == nil {
494+
err = fmt.Errorf("failed to close file %s: %v", f.Name(), closeErr)
495+
}
496+
}()
497+
498+
if _, err = f.Write(data); err != nil {
491499
// Delete the file in case of having an error. Otherwise the calling function needs to handle deletion.
492-
defer func() { os.Remove(f.Name()) }()
500+
if deleteErr := os.Remove(f.Name()); deleteErr != nil {
501+
return "", fmt.Errorf("failed to write credentials to %s and delete it afterwards: %v, %v", f.Name(), err, deleteErr)
502+
}
493503
return "", fmt.Errorf("failed to write credentials to %s: %v", f.Name(), err)
494504
}
495505
return f.Name(), nil

0 commit comments

Comments
 (0)