Skip to content

Commit 5213086

Browse files
authored
fix(container): fix secret management container (#2992)
* fix(container): fix secret management container * fix test basic
1 parent 5a61026 commit 5213086

File tree

5 files changed

+3173
-628
lines changed

5 files changed

+3173
-628
lines changed

internal/services/container/helpers_container.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package container
33
import (
44
"context"
55
"errors"
6+
"fmt"
67
"strings"
78
"time"
89

@@ -302,6 +303,30 @@ func expandContainerSecrets(secretsRawMap interface{}) []*container.Secret {
302303
return secrets
303304
}
304305

306+
func convertToMapStringInterface(raw interface{}) map[string]interface{} {
307+
out := make(map[string]interface{})
308+
if raw == nil {
309+
return out
310+
}
311+
312+
m, ok := raw.(map[interface{}]interface{})
313+
if ok {
314+
for k, v := range m {
315+
stringKey := fmt.Sprintf("%v", k)
316+
out[stringKey] = v
317+
}
318+
319+
return out
320+
}
321+
322+
m2, ok := raw.(map[string]interface{})
323+
if ok {
324+
return m2
325+
}
326+
327+
return out
328+
}
329+
305330
func isContainerDNSResolveError(err error) bool {
306331
responseError := &scw.ResponseError{}
307332

internal/services/container/namespace.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,28 @@ func ResourceContainerNamespaceUpdate(ctx context.Context, d *schema.ResourceDat
193193
}
194194

195195
if d.HasChange("secret_environment_variables") {
196-
req.SecretEnvironmentVariables = expandContainerSecrets(d.Get("secret_environment_variables"))
196+
oldSecretsRaw, newSecretsRaw := d.GetChange("secret_environment_variables")
197+
198+
oldSecretsMap := convertToMapStringInterface(oldSecretsRaw)
199+
newSecretsMap := convertToMapStringInterface(newSecretsRaw)
200+
201+
oldSecrets := expandContainerSecrets(oldSecretsMap)
202+
newSecrets := expandContainerSecrets(newSecretsMap)
203+
204+
deletedSecrets := make([]*container.Secret, 0)
205+
206+
for _, oldSecret := range oldSecrets {
207+
if _, exists := newSecretsMap[oldSecret.Key]; !exists {
208+
deletedSecrets = append(deletedSecrets, &container.Secret{
209+
Key: oldSecret.Key,
210+
Value: nil,
211+
})
212+
}
213+
}
214+
215+
deletedSecrets = append(deletedSecrets, newSecrets...)
216+
217+
req.SecretEnvironmentVariables = deletedSecrets
197218
}
198219

199220
if _, err := api.UpdateNamespace(req, scw.WithContext(ctx)); err != nil {

internal/services/container/namespace_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,91 @@ func TestAccNamespace_Basic(t *testing.T) {
172172
})
173173
}
174174

175+
func TestAccNamespace_SecretManagement(t *testing.T) {
176+
tt := acctest.NewTestTools(t)
177+
defer tt.Cleanup()
178+
179+
resource.ParallelTest(t, resource.TestCase{
180+
PreCheck: func() { acctest.PreCheck(t) },
181+
ProviderFactories: tt.ProviderFactories,
182+
CheckDestroy: isNamespaceDestroyed(tt),
183+
Steps: []resource.TestStep{
184+
{
185+
Config: `
186+
resource scaleway_container_namespace main {
187+
name = "test-secret-ns"
188+
secret_environment_variables = {
189+
"SECRET_1" = "value1"
190+
}
191+
}
192+
`,
193+
Check: resource.ComposeTestCheckFunc(
194+
isNamespacePresent(tt, "scaleway_container_namespace.main"),
195+
resource.TestCheckResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_1", "value1"),
196+
),
197+
},
198+
{
199+
Config: `
200+
resource scaleway_container_namespace main {
201+
name = "test-secret-ns"
202+
secret_environment_variables = {}
203+
}
204+
`,
205+
Check: resource.ComposeTestCheckFunc(
206+
isNamespacePresent(tt, "scaleway_container_namespace.main"),
207+
resource.TestCheckNoResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_1"),
208+
),
209+
},
210+
{
211+
Config: `
212+
resource scaleway_container_namespace main {
213+
name = "test-secret-ns"
214+
secret_environment_variables = {
215+
"SECRET_1" = "value1"
216+
"SECRET_2" = "value2"
217+
}
218+
}
219+
`,
220+
Check: resource.ComposeTestCheckFunc(
221+
isNamespacePresent(tt, "scaleway_container_namespace.main"),
222+
resource.TestCheckResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_1", "value1"),
223+
resource.TestCheckResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_2", "value2"),
224+
),
225+
},
226+
{
227+
Config: `
228+
resource scaleway_container_namespace main {
229+
name = "test-secret-ns"
230+
secret_environment_variables = {
231+
"SECRET_2" = "value2"
232+
}
233+
}
234+
`,
235+
Check: resource.ComposeTestCheckFunc(
236+
isNamespacePresent(tt, "scaleway_container_namespace.main"),
237+
resource.TestCheckNoResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_1"),
238+
resource.TestCheckResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_2", "value2"),
239+
),
240+
},
241+
{
242+
Config: `
243+
resource scaleway_container_namespace main {
244+
name = "test-secret-ns"
245+
secret_environment_variables = {
246+
"SECRET_3" = "value3"
247+
}
248+
}
249+
`,
250+
Check: resource.ComposeTestCheckFunc(
251+
isNamespacePresent(tt, "scaleway_container_namespace.main"),
252+
resource.TestCheckNoResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_2"),
253+
resource.TestCheckResourceAttr("scaleway_container_namespace.main", "secret_environment_variables.SECRET_3", "value3"),
254+
),
255+
},
256+
},
257+
})
258+
}
259+
175260
func TestAccNamespace_DestroyRegistry(t *testing.T) {
176261
tt := acctest.NewTestTools(t)
177262
defer tt.Cleanup()

0 commit comments

Comments
 (0)