Skip to content

Commit 949dffd

Browse files
debug debug
1 parent a9358f4 commit 949dffd

File tree

2 files changed

+138
-2
lines changed

2 files changed

+138
-2
lines changed

test/e2e/shared/aws.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,11 +774,53 @@ func deleteCloudFormationStack(prov client.ConfigProvider, t *cfn_bootstrap.Temp
774774
}
775775

776776
func ensureTestImageUploaded(e2eCtx *E2EContext) error {
777+
By("ensureTestImageUploaded: Starting function")
778+
779+
if e2eCtx.Environment.BootstrapAccessKey == nil {
780+
return fmt.Errorf("BootstrapAccessKey is nil")
781+
}
782+
783+
By(fmt.Sprintf("ensureTestImageUploaded: BootstrapAccessKey - AccessKeyId: %s, Status: %s",
784+
*e2eCtx.Environment.BootstrapAccessKey.AccessKeyId,
785+
*e2eCtx.Environment.BootstrapAccessKey.Status))
786+
787+
if e2eCtx.BootstrapUserAWSSession == nil {
788+
return fmt.Errorf("BootstrapUserAWSSession is nil")
789+
}
790+
791+
By("ensureTestImageUploaded: Creating AWS session for ECR Public")
777792
sessionForRepo := NewAWSSessionRepoWithKey(e2eCtx.Environment.BootstrapAccessKey)
778793

794+
if sess, ok := sessionForRepo.(*session.Session); ok {
795+
creds, err := sess.Config.Credentials.Get()
796+
if err != nil {
797+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to get credentials from session: %v", err))
798+
return fmt.Errorf("failed to get credentials: %w", err)
799+
}
800+
By(fmt.Sprintf("ensureTestImageUploaded: Session credentials - AccessKeyId: %s, ProviderName: %s",
801+
creds.AccessKeyID, creds.ProviderName))
802+
} else {
803+
By("ensureTestImageUploaded: WARNING: Session is not *session.Session type")
804+
}
805+
806+
By("ensureTestImageUploaded: Creating ECR Public client")
779807
ecrSvc := ecrpublic.New(sessionForRepo)
808+
809+
By("ensureTestImageUploaded: Testing ECR Public connection")
810+
_, err := ecrSvc.DescribeRegistries(&ecrpublic.DescribeRegistriesInput{})
811+
if err != nil {
812+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to connect to ECR Public: %v", err))
813+
if awsErr, ok := err.(awserr.Error); ok {
814+
By(fmt.Sprintf("ensureTestImageUploaded: AWS Error - Code: %s, Message: %s, RequestID: %s",
815+
awsErr.Code(), awsErr.Message(), awsErr.RequestID()))
816+
}
817+
return fmt.Errorf("failed to connect to ECR Public: %w", err)
818+
}
819+
By("ensureTestImageUploaded: Successfully connected to ECR Public")
820+
780821
repoName := ""
781822
if err := wait.WaitForWithRetryable(wait.NewBackoff(), func() (bool, error) {
823+
By("ensureTestImageUploaded: Attempting to create ECR Public repository")
782824
output, err := ecrSvc.CreateRepository(&ecrpublic.CreateRepositoryInput{
783825
RepositoryName: aws.String("capa/update"),
784826
CatalogData: &ecrpublic.RepositoryCatalogDataInput{
@@ -788,10 +830,13 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
788830

789831
if err != nil {
790832
if !awserrors.IsRepositoryExists(err) {
833+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to create repository: %v", err))
791834
return false, err
792835
}
836+
By("ensureTestImageUploaded: Repository already exists, describing it")
793837
out, err := ecrSvc.DescribeRepositories(&ecrpublic.DescribeRepositoriesInput{RepositoryNames: []*string{aws.String("capa/update")}})
794838
if err != nil || len(out.Repositories) == 0 {
839+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to describe existing repository: %v", err))
795840
return false, err
796841
}
797842
repoName = aws.StringValue(out.Repositories[0].RepositoryUri)
@@ -801,28 +846,42 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
801846

802847
return true, nil
803848
}, awserrors.UnrecognizedClientException); err != nil {
849+
By(fmt.Sprintf("ensureTestImageUploaded: Repository creation failed: %v", err))
804850
return err
805851
}
806852

853+
By(fmt.Sprintf("ensureTestImageUploaded: Repository ready - %s", repoName))
854+
855+
By("ensureTestImageUploaded: Inspecting Docker image")
807856
cmd := exec.Command("docker", "inspect", "--format='{{index .Id}}'", "gcr.io/k8s-staging-cluster-api/capa-manager:e2e")
808857
var stdOut bytes.Buffer
809858
cmd.Stdout = &stdOut
810-
err := cmd.Run()
859+
err = cmd.Run()
811860
if err != nil {
861+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to inspect Docker image: %v", err))
812862
return err
813863
}
814864

815865
imageSha := strings.ReplaceAll(strings.TrimSuffix(stdOut.String(), "\n"), "'", "")
866+
By(fmt.Sprintf("ensureTestImageUploaded: Docker image SHA: %s", imageSha))
816867

817868
ecrImageName := repoName + ":e2e"
869+
By(fmt.Sprintf("ensureTestImageUploaded: Tagging image as %s", ecrImageName))
818870
cmd = exec.Command("docker", "tag", imageSha, ecrImageName) //nolint:gosec
819871
err = cmd.Run()
820872
if err != nil {
873+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to tag Docker image: %v", err))
821874
return err
822875
}
823876

877+
By("ensureTestImageUploaded: Getting ECR authorization token")
824878
outToken, err := ecrSvc.GetAuthorizationToken(&ecrpublic.GetAuthorizationTokenInput{})
825879
if err != nil {
880+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to get authorization token: %v", err))
881+
if awsErr, ok := err.(awserr.Error); ok {
882+
By(fmt.Sprintf("ensureTestImageUploaded: AWS Error getting token - Code: %s, Message: %s, RequestID: %s",
883+
awsErr.Code(), awsErr.Message(), awsErr.RequestID()))
884+
}
826885
return err
827886
}
828887

@@ -831,22 +890,31 @@ func ensureTestImageUploaded(e2eCtx *E2EContext) error {
831890

832891
strList := strings.Split(string(decodedUsernamePassword), ":")
833892
if len(strList) != 2 {
893+
By("ensureTestImageUploaded: Failed to decode ECR authentication token")
834894
return errors.New("failed to decode ECR authentication token")
835895
}
836896

897+
By("ensureTestImageUploaded: Logging into ECR Public")
837898
cmd = exec.Command("docker", "login", "--username", strList[0], "--password", strList[1], "public.ecr.aws") //nolint:gosec
838899
err = cmd.Run()
839900
if err != nil {
901+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to login to ECR Public: %v", err))
840902
return err
841903
}
842904

905+
By("ensureTestImageUploaded: Pushing image to ECR Public")
843906
cmd = exec.Command("docker", "push", ecrImageName)
844907
err = cmd.Run()
845908
if err != nil {
909+
By(fmt.Sprintf("ensureTestImageUploaded: Failed to push image: %v", err))
846910
return err
847911
}
912+
913+
By("ensureTestImageUploaded: Image pushed successfully")
848914
e2eCtx.E2EConfig.Variables["CAPI_IMAGES_REGISTRY"] = repoName
849915
e2eCtx.E2EConfig.Variables["E2E_IMAGE_TAG"] = "e2e"
916+
917+
By("ensureTestImageUploaded: Function completed successfully")
850918
return nil
851919
}
852920

test/e2e/shared/suite.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import (
3737
. "github.com/onsi/gomega"
3838
"sigs.k8s.io/yaml"
3939

40+
"github.com/aws/aws-sdk-go/aws/awserr"
41+
"github.com/aws/aws-sdk-go/aws/session"
4042
"sigs.k8s.io/cluster-api-provider-aws/v2/test/helpers/kubernetesversions"
4143
"sigs.k8s.io/cluster-api/test/framework"
4244
"sigs.k8s.io/cluster-api/test/framework/clusterctl"
@@ -158,7 +160,73 @@ 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, ProviderName: %s",
195+
creds.AccessKeyID, creds.ProviderName))
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, RequestID: %s",
213+
awsErr.Code(), awsErr.Message(), awsErr.RequestID()))
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+
return err
228+
}
229+
By("ensureTestImageUploaded completed successfully")
162230

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

0 commit comments

Comments
 (0)