Skip to content

Commit bfa3948

Browse files
debug debug
1 parent a9358f4 commit bfa3948

File tree

2 files changed

+126
-3
lines changed

2 files changed

+126
-3
lines changed

test/e2e/shared/aws.go

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

776777
func 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.
917969
func 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())

test/e2e/shared/suite.go

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import (
3232
"time"
3333

3434
iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types"
35+
"github.com/aws/aws-sdk-go/aws/awserr"
36+
"github.com/aws/aws-sdk-go/aws/session"
3537
"github.com/gofrs/flock"
3638
. "github.com/onsi/ginkgo/v2"
3739
. "github.com/onsi/gomega"
@@ -158,7 +160,74 @@ func Node1BeforeSuite(e2eCtx *E2EContext) []byte {
158160
e2eCtx.Environment.BootstrapAccessKey = newUserAccessKey(context.TODO(), e2eCtx.AWSSessionV2, bootstrapTemplate.Spec.BootstrapUser.UserName)
159161
e2eCtx.BootstrapUserAWSSession = NewAWSSessionWithKey(e2eCtx.Environment.BootstrapAccessKey)
160162
e2eCtx.BootstrapUserAWSSessionV2 = NewAWSSessionWithKeyV2(e2eCtx.Environment.BootstrapAccessKey)
161-
Expect(ensureTestImageUploaded(e2eCtx)).NotTo(HaveOccurred())
163+
164+
// 添加详细的日志来诊断AWS凭证问题
165+
By(fmt.Sprintf("Bootstrap access key created - AccessKeyId: %s, Status: %s",
166+
*e2eCtx.Environment.BootstrapAccessKey.AccessKeyId,
167+
e2eCtx.Environment.BootstrapAccessKey.Status))
168+
169+
// 验证访问密钥是否有效
170+
By("Verifying bootstrap access key credentials")
171+
if e2eCtx.BootstrapUserAWSSession != nil {
172+
By("BootstrapUserAWSSession created successfully")
173+
// 尝试获取凭证信息
174+
if sess, ok := e2eCtx.BootstrapUserAWSSession.(*session.Session); ok {
175+
creds, err := sess.Config.Credentials.Get()
176+
if err != nil {
177+
By(fmt.Sprintf("Failed to get credentials from BootstrapUserAWSSession: %v", err))
178+
} else {
179+
By(fmt.Sprintf("BootstrapUserAWSSession credentials - AccessKeyId: %s, ProviderName: %s",
180+
creds.AccessKeyID, creds.ProviderName))
181+
}
182+
}
183+
} else {
184+
By("WARNING: BootstrapUserAWSSession is nil")
185+
}
186+
187+
if e2eCtx.BootstrapUserAWSSessionV2 != nil {
188+
By("BootstrapUserAWSSessionV2 created successfully")
189+
// 验证V2配置
190+
creds, err := e2eCtx.BootstrapUserAWSSessionV2.Credentials.Retrieve(context.TODO())
191+
if err != nil {
192+
By(fmt.Sprintf("Failed to get credentials from BootstrapUserAWSSessionV2: %v", err))
193+
} else {
194+
By(fmt.Sprintf("BootstrapUserAWSSessionV2 credentials - AccessKeyId: %s",
195+
creds.AccessKeyID))
196+
}
197+
} else {
198+
By("WARNING: BootstrapUserAWSSessionV2 is nil")
199+
}
200+
201+
// 等待一段时间让访问密钥传播
202+
By("Waiting for access key to propagate...")
203+
time.Sleep(10 * time.Second)
204+
205+
// 尽可能加更多的log,找到为什么会failed
206+
By("Starting ensureTestImageUploaded with detailed logging")
207+
err = ensureTestImageUploaded(e2eCtx)
208+
if err != nil {
209+
By(fmt.Sprintf("ensureTestImageUploaded failed with error: %v", err))
210+
// 尝试获取更多错误信息
211+
if awsErr, ok := err.(awserr.Error); ok {
212+
By(fmt.Sprintf("AWS Error details - Code: %s, Message: %s",
213+
awsErr.Code(), awsErr.Message()))
214+
}
215+
// 重新尝试获取凭证信息
216+
if e2eCtx.BootstrapUserAWSSession != nil {
217+
if sess, ok := e2eCtx.BootstrapUserAWSSession.(*session.Session); ok {
218+
creds, err := sess.Config.Credentials.Get()
219+
if err != nil {
220+
By(fmt.Sprintf("Credentials retrieval failed after error: %v", err))
221+
} else {
222+
By(fmt.Sprintf("Current credentials - AccessKeyId: %s, ProviderName: %s",
223+
creds.AccessKeyID, creds.ProviderName))
224+
}
225+
}
226+
}
227+
// 返回错误而不是[]byte
228+
return []byte{}
229+
}
230+
By("ensureTestImageUploaded completed successfully")
162231

163232
// Image ID is needed when using a CI Kubernetes version. This is used in conformance test and upgrade to main test.
164233
if !e2eCtx.IsManaged {

0 commit comments

Comments
 (0)