Skip to content

Commit

Permalink
fix: check for remote state on backed url and fix config if needed. Fix
Browse files Browse the repository at this point in the history
redhat-developer#392

Signed-off-by: Adrian Riobo <[email protected]>
  • Loading branch information
adrianriobo committed Jan 30, 2025
1 parent a77ef40 commit 8ef3a41
Show file tree
Hide file tree
Showing 211 changed files with 94,816 additions and 8 deletions.
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ require (
github.com/aws/aws-sdk-go-v2 v1.32.7
github.com/aws/aws-sdk-go-v2/config v1.27.18
github.com/aws/aws-sdk-go-v2/service/ec2 v1.142.0
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
github.com/pulumi/pulumi-aws-native/sdk v1.17.0
github.com/pulumi/pulumi-aws/sdk/v6 v6.64.0
github.com/pulumi/pulumi-awsx/sdk/v2 v2.19.0
Expand All @@ -38,6 +39,10 @@ require (
require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/aws/aws-sdk-go v1.50.36 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/evertras/bubble-table v0.15.2 // indirect
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ github.com/aws/aws-sdk-go v1.50.36/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3Tj
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw=
github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
github.com/aws/aws-sdk-go-v2/config v1.27.18 h1:wFvAnwOKKe7QAyIxziwSKjmer9JBMH1vzIL6W+fYuKk=
github.com/aws/aws-sdk-go-v2/config v1.27.18/go.mod h1:0xz6cgdX55+kmppvPm2IaKzIXOheGJhAufacPJaXZ7c=
github.com/aws/aws-sdk-go-v2/credentials v1.17.18 h1:D/ALDWqK4JdY3OFgA2thcPO1c9aYTT5STS/CvnkqY1c=
Expand All @@ -60,6 +62,8 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFU
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0=
github.com/aws/aws-sdk-go-v2/service/ec2 v1.142.0 h1:VrFC1uEZjX4ghkm/et8ATVGb1mT75Iv8aPKPjUE+F8A=
github.com/aws/aws-sdk-go-v2/service/ec2 v1.142.0/go.mod h1:qjhtI9zjpUHRc6khtrIM9fb48+ii6+UikL3/b+MKYn0=
github.com/aws/aws-sdk-go-v2/service/ecs v1.53.0 h1:TCQZX4ztlcWXAcZouKh9qJMcVaH/qTidFTfsvJwUI30=
Expand All @@ -68,10 +72,16 @@ github.com/aws/aws-sdk-go-v2/service/iam v1.38.3 h1:2sFIoFzU1IEL9epJWubJm9Dhrn45
github.com/aws/aws-sdk-go-v2/service/iam v1.38.3/go.mod h1:KzlNINwfr/47tKkEhgk0r10/OZq3rjtyWy0txL3lM+I=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11 h1:o4T+fKxA3gTMcluBNZZXE9DNaMkJuUL1O3mffCUjoJo=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11/go.mod h1:84oZdJ+VjuJKs9v1UTC9NaodRZRseOXCTgku+vQJWR8=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ=
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6 h1:k/f3T13s7wx/By6aKovlVsjdNkRVT0QRR2RlZEvaTGg=
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6/go.mod h1:9n3tkRCngy3+Iw/8vK3C69iXh22SCGsy3yn16nTxH+s=
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc=
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o=
github.com/aws/aws-sdk-go-v2/service/sso v1.20.11 h1:gEYM2GSpr4YNWc6hCd5nod4+d4kd9vWIAWrmGuLdlMw=
github.com/aws/aws-sdk-go-v2/service/sso v1.20.11/go.mod h1:gVvwPdPNYehHSP9Rs7q27U1EU+3Or2ZpXvzAYJNh63w=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5 h1:iXjh3uaH3vsVcnyZX7MqCoCfcyxIrVE9iOQruRaWPrQ=
Expand Down
51 changes: 43 additions & 8 deletions pkg/manager/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package context

import (
"fmt"
"os"

"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/redhat-developer/mapt/pkg/integrations/cirrus"
"github.com/redhat-developer/mapt/pkg/integrations/github"
"github.com/redhat-developer/mapt/pkg/provider/aws/data"
"github.com/redhat-developer/mapt/pkg/util"
"github.com/redhat-developer/mapt/pkg/util/logging"
utilMaps "github.com/redhat-developer/mapt/pkg/util/maps"
Expand Down Expand Up @@ -71,15 +73,13 @@ func Init(ca *ContextArgs) error {
serverless: ca.Serverless,
}
addCommonTags()
// Manage integrations
if ca.GHRunnerArgs != nil {
if err := github.InitGHRunnerArgs(ca.GHRunnerArgs); err != nil {
return err
}
// Manage remote state requirements
if err := manageRemoteState(ca.BackedURL); err != nil {
return err
}
if ca.CirrusPWArgs != nil {
ca.CirrusPWArgs.Name = RunID()
cirrus.Init(ca.CirrusPWArgs)
// Manage integrations
if err := manageIntegration(ca); err != nil {
return err
}
logging.Debugf("context initialized for %s", mc.runID)
return nil
Expand Down Expand Up @@ -141,3 +141,38 @@ func addCommonTags() {
mc.tags[tagKeyOrigin] = origin
mc.tags[TagKeyProjectName] = mc.projectName
}

// Under some circumstances it is poosible we need to update Location initial configuration
// due to usage of remote backed url. i.e. https://github.com/redhat-developer/mapt/issues/392

// This function will check if backed url is remote and if so change initial values to be able to
// use it.
func manageRemoteState(backedURL string) error {
if data.ValidateS3Path(backedURL) {
awsRegion, err := data.GetBucketLocationFromS3Path(backedURL)
if err != nil {
return err
}
if err := os.Setenv("AWS_DEFAULT_REGION", *awsRegion); err != nil {
return err
}
if err := os.Setenv("AWS_REGION", *awsRegion); err != nil {
return err
}
return nil
}
return nil
}

func manageIntegration(ca *ContextArgs) error {
if ca.GHRunnerArgs != nil {
if err := github.InitGHRunnerArgs(ca.GHRunnerArgs); err != nil {
return err
}
}
if ca.CirrusPWArgs != nil {
ca.CirrusPWArgs.Name = RunID()
cirrus.Init(ca.CirrusPWArgs)
}
return nil
}
51 changes: 51 additions & 0 deletions pkg/provider/aws/data/s3.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package data

import (
"context"
"fmt"
"strings"

"github.com/aws/aws-sdk-go-v2/service/s3"
)

const (
s3Prefix = "s3://"
s3PathSeparator = "/"
)

func ValidateS3Path(p string) bool { return strings.HasPrefix(p, s3Prefix) }

func GetBucketLocationFromS3Path(p string) (*string, error) {
bucket, err := getBucketFromS3Path(p)
if err != nil {
return nil, err
}
return GetBucketLocation(*bucket)
}

func GetBucketLocation(bucketName string) (*string, error) {
cfg, err := getGlobalConfig()
if err != nil {
return nil, err
}
client := s3.NewFromConfig(cfg)
output, err := client.GetBucketLocation(
context.Background(),
&s3.GetBucketLocationInput{
Bucket: &bucketName,
})
if err != nil {
return nil, fmt.Errorf("failed to get bucket location: %w", err)
}
region := string(output.LocationConstraint)
return &region, nil
}

func getBucketFromS3Path(p string) (*string, error) {
if !ValidateS3Path(p) {
return nil, fmt.Errorf("this is not a valid s3 path")
}
pWithoutProtocol := strings.TrimPrefix(p, s3Prefix)
pParts := strings.Split(pWithoutProtocol, s3PathSeparator)
return &pParts[0], nil
}
92 changes: 92 additions & 0 deletions vendor/github.com/aws/aws-sdk-go-v2/aws/arn/arn.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 8ef3a41

Please sign in to comment.