Skip to content

Commit a8a4f2f

Browse files
deekay2310claude
andcommitted
fix(ibmcloud): pass enriched S3 URL to Pulumi via Provider.Init return
Change Provider.Init() to return (string, error) so IBM Cloud can pass the enriched s3://bucket?endpoint=...&s3ForcePathStyle=true URL back to the context. This ensures Pulumi receives the COS endpoint in the backend URL instead of defaulting to amazonaws.com. AWS and Azure return empty string (no change to backed URL). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e5f6dae commit a8a4f2f

4 files changed

Lines changed: 23 additions & 19 deletions

File tree

pkg/manager/context/context.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ type Context struct {
7474
}
7575

7676
type Provider interface {
77-
Init(ctx context.Context, backedURL string) error
77+
Init(ctx context.Context, backedURL string) (string, error)
7878
DefaultHostingPlace() (*string, error)
7979
}
8080

@@ -110,9 +110,13 @@ func Init(ca *ContextArgs, provider Provider) (*Context, error) {
110110
c.targetHostingPlace = *hp
111111
}
112112
// Manage
113-
if err := provider.Init(ctx, ca.BackedURL); err != nil {
113+
resolvedURL, err := provider.Init(ctx, ca.BackedURL)
114+
if err != nil {
114115
return nil, err
115116
}
117+
if resolvedURL != "" {
118+
c.backedURL = resolvedURL
119+
}
116120
// Manage integrations
117121
if err := manageIntegration(c, ca); err != nil {
118122
return nil, err

pkg/provider/aws/aws.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ const pulumiLocksPath = ".pulumi/locks"
2525

2626
type AWS struct{}
2727

28-
func (a *AWS) Init(ctx context.Context, backedURL string) error {
28+
func (a *AWS) Init(ctx context.Context, backedURL string) (string, error) {
2929
// Manage remote state requirements, if backedURL
3030
// is on a different region we need to change to that region
3131
// in order to interact with the state
32-
return manageRemoteState(ctx, backedURL)
32+
return "", manageRemoteState(ctx, backedURL)
3333
}
3434

3535
func (a *AWS) DefaultHostingPlace() (*string, error) {

pkg/provider/azure/azure.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ func Provider() *Azure {
2828
return &Azure{}
2929
}
3030

31-
func (a *Azure) Init(ctx context.Context, backedURL string) error {
31+
func (a *Azure) Init(ctx context.Context, backedURL string) (string, error) {
3232
setAZIdentityEnvs()
33-
return nil
33+
return "", nil
3434
}
3535

3636
func (a *Azure) DefaultHostingPlace() (*string, error) {

pkg/provider/ibmcloud/ibmcloud.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ const (
2222

2323
type IBMCloud struct{}
2424

25-
func (i *IBMCloud) Init(ctx context.Context, backedURL string) error {
25+
func (i *IBMCloud) Init(ctx context.Context, backedURL string) (string, error) {
2626
if isCOSBackend(backedURL) {
2727
return initCOSBackend(backedURL)
2828
}
29-
return nil
29+
return "", nil
3030
}
3131

3232
func (a *IBMCloud) DefaultHostingPlace() (*string, error) {
@@ -103,18 +103,18 @@ func extractBucket(backedURL string) (string, error) {
103103
return strings.SplitN(bucket, "/", 2)[0], nil
104104
}
105105

106-
func initCOSBackend(backedURL string) error {
106+
func initCOSBackend(backedURL string) (string, error) {
107107
accessKey, err := requireEnv(icConstants.EnvIBMCosAccessKeyID)
108108
if err != nil {
109-
return err
109+
return "", err
110110
}
111111
secretKey, err := requireEnv(icConstants.EnvIBMCosSecretAccessKey)
112112
if err != nil {
113-
return err
113+
return "", err
114114
}
115115
region, err := requireEnv(LOCATION_ENV)
116116
if err != nil {
117-
return err
117+
return "", err
118118
}
119119

120120
endpoint, _ := os.LookupEnv(icConstants.EnvIBMCosEndpoint)
@@ -124,11 +124,11 @@ func initCOSBackend(backedURL string) error {
124124

125125
bucket, err := extractBucket(backedURL)
126126
if err != nil {
127-
return err
127+
return "", err
128128
}
129129

130-
pulumiBackendURL := fmt.Sprintf("s3://%s?endpoint=%s&s3ForcePathStyle=true",
131-
bucket, ensureHTTPS(endpoint))
130+
resolvedURL := fmt.Sprintf("s3://%s?endpoint=%s&s3ForcePathStyle=true",
131+
bucket, endpoint)
132132

133133
for k, v := range map[string]string{
134134
"AWS_ACCESS_KEY_ID": accessKey,
@@ -137,14 +137,14 @@ func initCOSBackend(backedURL string) error {
137137
"AWS_REGION": region,
138138
"AWS_DEFAULT_REGION": region,
139139
"AWS_S3_USE_PATH_STYLE": "true",
140-
"PULUMI_BACKEND_URL": pulumiBackendURL,
140+
"PULUMI_BACKEND_URL": resolvedURL,
141141
} {
142142
if err := os.Setenv(k, v); err != nil {
143-
return err
143+
return "", err
144144
}
145145
}
146-
logging.Debugf("COS backend configured: %s", pulumiBackendURL)
147-
return nil
146+
logging.Debugf("COS backend configured: %s", resolvedURL)
147+
return resolvedURL, nil
148148
}
149149

150150
func parseCOSBackedURL(mCtx *mc.Context) (*string, *string, error) {

0 commit comments

Comments
 (0)