Skip to content

Commit ca18c97

Browse files
committed
fix(container): fix secret management container
1 parent 5a61026 commit ca18c97

File tree

4 files changed

+2008
-2
lines changed

4 files changed

+2008
-2
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: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,29 @@ func ResourceContainerNamespaceUpdate(ctx context.Context, d *schema.ResourceDat
188188
req.Tags = types.ExpandUpdatedStringsPtr(d.Get("tags"))
189189
}
190190

191-
if d.HasChanges("environment_variables") {
192-
req.EnvironmentVariables = types.ExpandMapPtrStringString(d.Get("environment_variables"))
191+
if d.HasChange("secret_environment_variables") {
192+
oldSecretsRaw, newSecretsRaw := d.GetChange("secret_environment_variables")
193+
194+
oldSecretsMap := convertToMapStringInterface(oldSecretsRaw)
195+
newSecretsMap := convertToMapStringInterface(newSecretsRaw)
196+
197+
oldSecrets := expandContainerSecrets(oldSecretsMap)
198+
newSecrets := expandContainerSecrets(newSecretsMap)
199+
200+
deletedSecrets := make([]*container.Secret, 0)
201+
202+
for _, oldSecret := range oldSecrets {
203+
if _, exists := newSecretsMap[oldSecret.Key]; !exists {
204+
deletedSecrets = append(deletedSecrets, &container.Secret{
205+
Key: oldSecret.Key,
206+
Value: nil,
207+
})
208+
}
209+
}
210+
211+
deletedSecrets = append(deletedSecrets, newSecrets...)
212+
213+
req.SecretEnvironmentVariables = deletedSecrets
193214
}
194215

195216
if d.HasChange("secret_environment_variables") {

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)