Skip to content

Commit 93f5c03

Browse files
Codelaxremyleone
andauthored
feat(container): add destroy_registry field to container namespace (#1321)
Co-authored-by: Rémy Léone <[email protected]>
1 parent df74644 commit 93f5c03

5 files changed

+868
-281
lines changed

docs/resources/container_namespace.md

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ The following arguments are supported:
3636

3737
- `environment_variables` - The environment variables of the namespace.
3838

39+
- `destroy_registry` - (Defaults to false). Destroy linked container registry on deletion.
40+
3941
## Attributes Reference
4042

4143
In addition to all arguments above, the following attributes are exported:

scaleway/resource_container_namespace.go

+31-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
99
container "github.com/scaleway/scaleway-sdk-go/api/container/v1beta1"
10+
"github.com/scaleway/scaleway-sdk-go/api/registry/v1"
1011
"github.com/scaleway/scaleway-sdk-go/scw"
1112
)
1213

@@ -60,6 +61,12 @@ func resourceScalewayContainerNamespace() *schema.Resource {
6061
Computed: true,
6162
Description: "The ID of the registry namespace",
6263
},
64+
"destroy_registry": {
65+
Type: schema.TypeBool,
66+
Optional: true,
67+
Default: false,
68+
Description: "Destroy registry on deletion",
69+
},
6370
"region": regionSchema(),
6471
"organization_id": organizationIDSchema(),
6572
"project_id": projectIDSchema(),
@@ -177,13 +184,32 @@ func resourceScalewayContainerNamespaceDelete(ctx context.Context, d *schema.Res
177184
}
178185

179186
_, err = waitForContainerNamespace(ctx, api, region, id, d.Timeout(schema.TimeoutDelete))
180-
if err != nil {
181-
if is404Error(err) {
182-
d.SetId("")
183-
return nil
184-
}
187+
if err != nil && !is404Error(err) {
185188
return diag.FromErr(err)
186189
}
187190

191+
d.SetId("")
192+
193+
if destroy := d.Get("destroy_registry"); destroy != nil && destroy == true {
194+
registryAPI, region, err := registryAPIWithRegion(d, meta)
195+
if err != nil {
196+
return diag.FromErr(err)
197+
}
198+
199+
registryID := d.Get("registry_namespace_id").(string)
200+
201+
_, err = registryAPI.DeleteNamespace(&registry.DeleteNamespaceRequest{
202+
Region: region,
203+
NamespaceID: registryID,
204+
})
205+
if err != nil {
206+
return diag.FromErr(err)
207+
}
208+
_, err = waitForRegistryNamespace(ctx, registryAPI, region, registryID, d.Timeout(schema.TimeoutDelete))
209+
if err != nil && !is404Error(err) {
210+
return diag.FromErr(err)
211+
}
212+
}
213+
188214
return nil
189215
}

scaleway/resource_container_namespace_test.go

+60-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
99
container "github.com/scaleway/scaleway-sdk-go/api/container/v1beta1"
10+
"github.com/scaleway/scaleway-sdk-go/api/registry/v1"
1011
"github.com/scaleway/scaleway-sdk-go/scw"
1112
)
1213

@@ -147,6 +148,34 @@ func TestAccScalewayContainerNamespace_Basic(t *testing.T) {
147148
})
148149
}
149150

151+
func TestAccScalewayContainerNamespace_DestroyRegistry(t *testing.T) {
152+
tt := NewTestTools(t)
153+
defer tt.Cleanup()
154+
155+
resource.ParallelTest(t, resource.TestCase{
156+
PreCheck: func() { testAccPreCheck(t) },
157+
ProviderFactories: tt.ProviderFactories,
158+
CheckDestroy: resource.ComposeTestCheckFunc(
159+
testAccCheckScalewayContainerNamespaceDestroy(tt),
160+
testAccCheckScalewayContainerRegistryDestroy(tt),
161+
),
162+
Steps: []resource.TestStep{
163+
{
164+
Config: `
165+
resource scaleway_container_namespace main {
166+
name = "test-cr-ns-01"
167+
destroy_registry = true
168+
}
169+
`,
170+
Check: resource.ComposeTestCheckFunc(
171+
testAccCheckScalewayContainerNamespaceExists(tt, "scaleway_container_namespace.main"),
172+
testCheckResourceAttrUUID("scaleway_container_namespace.main", "id"),
173+
),
174+
},
175+
},
176+
})
177+
}
178+
150179
func testAccCheckScalewayContainerNamespaceExists(tt *TestTools, n string) resource.TestCheckFunc {
151180
return func(state *terraform.State) error {
152181
rs, ok := state.RootModule().Resources[n]
@@ -175,7 +204,7 @@ func testAccCheckScalewayContainerNamespaceExists(tt *TestTools, n string) resou
175204
func testAccCheckScalewayContainerNamespaceDestroy(tt *TestTools) resource.TestCheckFunc {
176205
return func(state *terraform.State) error {
177206
for _, rs := range state.RootModule().Resources {
178-
if rs.Type != "scaleway_container_namespace" {
207+
if rs.Type != "scaleway_container_namespace" { //nolint:goconst
179208
continue
180209
}
181210

@@ -201,3 +230,33 @@ func testAccCheckScalewayContainerNamespaceDestroy(tt *TestTools) resource.TestC
201230
return nil
202231
}
203232
}
233+
234+
func testAccCheckScalewayContainerRegistryDestroy(tt *TestTools) resource.TestCheckFunc {
235+
return func(state *terraform.State) error {
236+
for _, rs := range state.RootModule().Resources {
237+
if rs.Type != "scaleway_container_namespace" {
238+
continue
239+
}
240+
241+
api, region, _, err := registryAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
242+
if err != nil {
243+
return err
244+
}
245+
246+
_, err = api.DeleteNamespace(&registry.DeleteNamespaceRequest{
247+
NamespaceID: rs.Primary.Attributes["registry_namespace_id"],
248+
Region: region,
249+
})
250+
251+
if err == nil {
252+
return fmt.Errorf("registry namespace (%s) still exists", rs.Primary.Attributes["registry_namespace_id"])
253+
}
254+
255+
if !is404Error(err) {
256+
return err
257+
}
258+
}
259+
260+
return nil
261+
}
262+
}

0 commit comments

Comments
 (0)