@@ -45,6 +45,7 @@ import (
4545 iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types"
4646 "github.com/aws/aws-sdk-go-v2/service/sts"
4747 "github.com/aws/aws-sdk-go/aws"
48+ "github.com/aws/aws-sdk-go/aws/awserr"
4849 "github.com/aws/aws-sdk-go/aws/client"
4950 awscreds "github.com/aws/aws-sdk-go/aws/credentials"
5051 "github.com/aws/aws-sdk-go/aws/session"
@@ -774,9 +775,36 @@ func deleteCloudFormationStack(prov client.ConfigProvider, t *cfn_bootstrap.Temp
774775}
775776
776777func ensureTestImageUploaded (e2eCtx * E2EContext ) error {
778+ By ("ensureTestImageUploaded: Creating AWS session for ECR Public" )
777779 sessionForRepo := NewAWSSessionRepoWithKey (e2eCtx .Environment .BootstrapAccessKey )
778780
781+ if sess , ok := sessionForRepo .(* session.Session ); ok {
782+ creds , err := sess .Config .Credentials .Get ()
783+ if err != nil {
784+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to get credentials from session: %v" , err ))
785+ return fmt .Errorf ("failed to get credentials: %w" , err )
786+ }
787+ By (fmt .Sprintf ("ensureTestImageUploaded: Session credentials - AccessKeyId: %s, ProviderName: %s" ,
788+ creds .AccessKeyID , creds .ProviderName ))
789+ } else {
790+ By ("ensureTestImageUploaded: WARNING: Session is not *session.Session type" )
791+ }
792+
793+ By ("ensureTestImageUploaded: Creating ECR Public client" )
779794 ecrSvc := ecrpublic .New (sessionForRepo )
795+
796+ By ("ensureTestImageUploaded: Testing ECR Public connection" )
797+ _ , err := ecrSvc .DescribeRegistries (& ecrpublic.DescribeRegistriesInput {})
798+ if err != nil {
799+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to connect to ECR Public: %v" , err ))
800+ if awsErr , ok := err .(awserr.Error ); ok {
801+ By (fmt .Sprintf ("ensureTestImageUploaded: AWS Error - Code: %s, Message: %s" ,
802+ awsErr .Code (), awsErr .Message ()))
803+ }
804+ return fmt .Errorf ("failed to connect to ECR Public: %w" , err )
805+ }
806+ By ("ensureTestImageUploaded: Successfully connected to ECR Public" )
807+
780808 repoName := ""
781809 if err := wait .WaitForWithRetryable (wait .NewBackoff (), func () (bool , error ) {
782810 output , err := ecrSvc .CreateRepository (& ecrpublic.CreateRepositoryInput {
@@ -788,10 +816,12 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
788816
789817 if err != nil {
790818 if ! awserrors .IsRepositoryExists (err ) {
819+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to create repository: %v" , err ))
791820 return false , err
792821 }
793822 out , err := ecrSvc .DescribeRepositories (& ecrpublic.DescribeRepositoriesInput {RepositoryNames : []* string {aws .String ("capa/update" )}})
794823 if err != nil || len (out .Repositories ) == 0 {
824+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to describe existing repository: %v" , err ))
795825 return false , err
796826 }
797827 repoName = aws .StringValue (out .Repositories [0 ].RepositoryUri )
@@ -804,25 +834,38 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
804834 return err
805835 }
806836
837+ By (fmt .Sprintf ("ensureTestImageUploaded: Repository ready - %s" , repoName ))
838+
839+ By ("ensureTestImageUploaded: Inspecting Docker image" )
807840 cmd := exec .Command ("docker" , "inspect" , "--format='{{index .Id}}'" , "gcr.io/k8s-staging-cluster-api/capa-manager:e2e" )
808841 var stdOut bytes.Buffer
809842 cmd .Stdout = & stdOut
810- err : = cmd .Run ()
843+ err = cmd .Run ()
811844 if err != nil {
845+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to inspect Docker image: %v" , err ))
812846 return err
813847 }
814848
815849 imageSha := strings .ReplaceAll (strings .TrimSuffix (stdOut .String (), "\n " ), "'" , "" )
850+ By (fmt .Sprintf ("ensureTestImageUploaded: Docker image SHA: %s" , imageSha ))
816851
817852 ecrImageName := repoName + ":e2e"
853+ By (fmt .Sprintf ("ensureTestImageUploaded: Tagging image as %s" , ecrImageName ))
818854 cmd = exec .Command ("docker" , "tag" , imageSha , ecrImageName ) //nolint:gosec
819855 err = cmd .Run ()
820856 if err != nil {
857+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to tag Docker image: %v" , err ))
821858 return err
822859 }
823860
861+ By ("ensureTestImageUploaded: Getting ECR authorization token" )
824862 outToken , err := ecrSvc .GetAuthorizationToken (& ecrpublic.GetAuthorizationTokenInput {})
825863 if err != nil {
864+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to get authorization token: %v" , err ))
865+ if awsErr , ok := err .(awserr.Error ); ok {
866+ By (fmt .Sprintf ("ensureTestImageUploaded: AWS Error getting token - Code: %s, Message: %s" ,
867+ awsErr .Code (), awsErr .Message ()))
868+ }
826869 return err
827870 }
828871
@@ -831,22 +874,31 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
831874
832875 strList := strings .Split (string (decodedUsernamePassword ), ":" )
833876 if len (strList ) != 2 {
877+ By ("ensureTestImageUploaded: Failed to decode ECR authentication token" )
834878 return errors .New ("failed to decode ECR authentication token" )
835879 }
836880
881+ By ("ensureTestImageUploaded: Logging into ECR Public" )
837882 cmd = exec .Command ("docker" , "login" , "--username" , strList [0 ], "--password" , strList [1 ], "public.ecr.aws" ) //nolint:gosec
838883 err = cmd .Run ()
839884 if err != nil {
885+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to login to ECR Public: %v" , err ))
840886 return err
841887 }
842888
889+ By ("ensureTestImageUploaded: Pushing image to ECR Public" )
843890 cmd = exec .Command ("docker" , "push" , ecrImageName )
844891 err = cmd .Run ()
845892 if err != nil {
893+ By (fmt .Sprintf ("ensureTestImageUploaded: Failed to push image: %v" , err ))
846894 return err
847895 }
896+
897+ By ("ensureTestImageUploaded: Image pushed successfully" )
848898 e2eCtx .E2EConfig .Variables ["CAPI_IMAGES_REGISTRY" ] = repoName
849899 e2eCtx .E2EConfig .Variables ["E2E_IMAGE_TAG" ] = "e2e"
900+
901+ By ("ensureTestImageUploaded: Function completed successfully" )
850902 return nil
851903}
852904
@@ -915,8 +967,9 @@ func encodeCredentials(accessKey *iamtypes.AccessKey, region string) string {
915967// newUserAccessKey generates a new AWS Access Key pair based off of the
916968// bootstrap user. This tests that the CloudFormation policy is correct.
917969func newUserAccessKey (ctx context.Context , cfg * awsv2.Config , userName string ) * iamtypes.AccessKey {
918- iamSvc := iam . NewFromConfig ( * cfg )
970+ By ( fmt . Sprintf ( "newUserAccessKey: Starting for user: %s" , userName ) )
919971
972+ iamSvc := iam .NewFromConfig (* cfg )
920973 keyOuts , _ := iamSvc .ListAccessKeys (ctx , & iam.ListAccessKeysInput {
921974 UserName : aws .String (userName ),
922975 })
@@ -928,6 +981,7 @@ func newUserAccessKey(ctx context.Context, cfg *awsv2.Config, userName string) *
928981 })
929982 Expect (err ).NotTo (HaveOccurred ())
930983 }
984+
931985 By (fmt .Sprintf ("Creating an access key: user-name=%s" , userName ))
932986 out , err := iamSvc .CreateAccessKey (ctx , & iam.CreateAccessKeyInput {UserName : aws .String (userName )})
933987 Expect (err ).NotTo (HaveOccurred ())
0 commit comments