Skip to content

Commit a7968ca

Browse files
committed
feat: env vars warning on invalid values
1 parent 048670f commit a7968ca

File tree

5 files changed

+53
-6
lines changed

5 files changed

+53
-6
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ require (
1919
github.com/hashicorp/terraform-plugin-testing v1.13.3
2020
github.com/minio/minio-go/v7 v7.0.95
2121
github.com/miton18/helper v0.0.3
22-
go.clever-cloud.dev/client v0.1.4
22+
go.clever-cloud.dev/client v0.1.6
2323
go.clever-cloud.dev/sdk v0.0.5
2424
golang.org/x/exp v0.0.0-20251017212417-90e834f514db
2525
)
@@ -136,7 +136,7 @@ require (
136136
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
137137
github.com/shirou/gopsutil/v4 v4.25.6 // indirect
138138
github.com/shopspring/decimal v1.3.1 // indirect
139-
github.com/sirupsen/logrus v1.9.3 // indirect
139+
github.com/sirupsen/logrus v1.9.4 // indirect
140140
github.com/skeema/knownhosts v1.3.1 // indirect
141141
github.com/spf13/cast v1.5.0 // indirect
142142
github.com/tinylib/msgp v1.3.0 // indirect
@@ -164,7 +164,7 @@ require (
164164
golang.org/x/net v0.46.0 // indirect
165165
golang.org/x/oauth2 v0.30.0 // indirect
166166
golang.org/x/sync v0.17.0 // indirect
167-
golang.org/x/sys v0.39.0 // indirect
167+
golang.org/x/sys v0.40.0 // indirect
168168
golang.org/x/term v0.36.0 // indirect
169169
golang.org/x/text v0.30.0 // indirect
170170
golang.org/x/tools v0.38.0 // indirect

go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY
402402
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
403403
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
404404
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
405+
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
405406
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
406407
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
407408
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -1072,6 +1073,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
10721073
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
10731074
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
10741075
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
1076+
github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
1077+
github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
10751078
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
10761079
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
10771080
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -1170,6 +1173,8 @@ go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ
11701173
go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=
11711174
go.clever-cloud.dev/client v0.1.4 h1:WnDBRgFHwxNxj+NCzEUFakBrPBVhWJBANzm/Yd8smJY=
11721175
go.clever-cloud.dev/client v0.1.4/go.mod h1:FbR9HINkEq3ilZoKOTWOLgtv5JdNZEggW8cGuRjtODc=
1176+
go.clever-cloud.dev/client v0.1.6 h1:lsmCAkcmSNqvjgeU6PirQ/9f79IOkDCjTSytkuFHOuw=
1177+
go.clever-cloud.dev/client v0.1.6/go.mod h1:FbR9HINkEq3ilZoKOTWOLgtv5JdNZEggW8cGuRjtODc=
11731178
go.clever-cloud.dev/sdk v0.0.5 h1:xoLR3/limOTZYhHP3q242BQmi7ha0qb1zU2w5FWDqms=
11741179
go.clever-cloud.dev/sdk v0.0.5/go.mod h1:wTbSUEQLKgbBohz9OMya7bcjBrdoutdaC5JQM7LrXPE=
11751180
go.einride.tech/aip v0.67.1/go.mod h1:ZGX4/zKw8dcgzdLsrvpOOGxfxI2QSk12SlP7d6c0/XI=
@@ -1637,6 +1642,8 @@ golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
16371642
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
16381643
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
16391644
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
1645+
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
1646+
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
16401647
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
16411648
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
16421649
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=

pkg/resources/application/create.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var githubOAuthService = "github"
5656
func CreateApp(ctx context.Context, req CreateReq) (*CreateRes, diag.Diagnostics) {
5757
diags := diag.Diagnostics{}
5858
res := &CreateRes{}
59+
tflog.Info(ctx, "CREATE APPLICATION")
5960

6061
req.Application.SeparateBuild = req.Application.BuildFlavor != ""
6162

@@ -93,7 +94,7 @@ func CreateApp(ctx context.Context, req CreateReq) (*CreateRes, diag.Diagnostics
9394
res.Application = *appRes.Payload()
9495

9596
// Environment
96-
envRes := tmp.UpdateAppEnv(ctx, req.Client, req.Organization, res.Application.ID, req.Environment)
97+
envRes := UpdateAppEnv(ctx, req.Client, req.Organization, res.Application.ID, req.Environment, &diags)
9798
if envRes.HasError() {
9899
diags.AddError("failed to configure application environment", envRes.Error().Error())
99100
}
@@ -167,3 +168,38 @@ func Create[T RuntimePlan](ctx context.Context, resource RuntimeResource, plan T
167168

168169
return diags
169170
}
171+
172+
// this version of UpdateAppEnv first try with Env var validation reports warning
173+
// and perform the update without validation in order to not break anything
174+
// diag parameter only reports warnings, no error
175+
//
176+
// {
177+
// "id":557,
178+
// "message":"Application environment is invalid",
179+
// "type":"error",
180+
// "fields":{
181+
// "CC_TROUBLESHOOT":"must be one of: [troubleshoot, true, 1, yes, enable, enabled, on] (= true) or [off, disable, no, false, disabled, 0] (= false)"
182+
// }
183+
// }
184+
func UpdateAppEnv(ctx context.Context, cc *client.Client, organisationID, applicationID string, envs map[string]string, diags *diag.Diagnostics) client.Response[any] {
185+
res := tmp.UpdateAppEnv(ctx, cc, organisationID, applicationID, envs, true)
186+
if !res.HasError() {
187+
return res
188+
}
189+
190+
tflog.Info(ctx, "DEBUG")
191+
// report errors
192+
if apiErr, ok := res.Error().(*client.APIError); res.StatusCode() == 400 && ok {
193+
tflog.Info(ctx, "ERR", map[string]any{"err": apiErr})
194+
for key, value := range apiErr.Context {
195+
if key == "type" {
196+
continue
197+
}
198+
199+
diags.AddWarning(
200+
fmt.Sprintf("Invalid value for %s", key), fmt.Sprintf("%v", value))
201+
}
202+
}
203+
204+
return tmp.UpdateAppEnv(ctx, cc, organisationID, applicationID, envs, false)
205+
}

pkg/resources/application/update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func UpdateApp(ctx context.Context, req UpdateReq) (*CreateRes, diag.Diagnostics
4242
res.Application = *appRes.Payload()
4343

4444
// Environment
45-
envRes := tmp.UpdateAppEnv(ctx, req.Client, req.Organization, res.Application.ID, req.Environment)
45+
envRes := UpdateAppEnv(ctx, req.Client, req.Organization, res.Application.ID, req.Environment, &diags)
4646
if envRes.HasError() {
4747
diags.AddError("failed to configure application environment", envRes.Error().Error())
4848
return res, diags

pkg/tmp/app.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,12 @@ func GetAppEnv(ctx context.Context, cc *client.Client, organisationID string, ap
246246
return client.Get[[]Env](ctx, cc, path)
247247
}
248248

249-
func UpdateAppEnv(ctx context.Context, cc *client.Client, organisationID string, applicationID string, envs map[string]string) client.Response[any] {
249+
func UpdateAppEnv(ctx context.Context, cc *client.Client, organisationID string, applicationID string, envs map[string]string, enforceValidation bool) client.Response[any] {
250250
path := fmt.Sprintf("/v2/organisations/%s/applications/%s/env", organisationID, applicationID)
251+
if enforceValidation {
252+
path = fmt.Sprintf("%s?check=true", path)
253+
}
254+
251255
return client.Put[any](ctx, cc, path, envs)
252256
}
253257

0 commit comments

Comments
 (0)