Skip to content

Commit 80279cd

Browse files
Codelaxjremy42
authored andcommitted
fix(instance_server): delete_after_termination for sbs volumes (#2854)
* fix(instance_server): delete_after_termination for sbs volumes * fix: consider block volume deleted on 404 * update cassettes * update TestAccSnapshot_Unified cassette * update linked products cassettes
1 parent 9ea2653 commit 80279cd

File tree

58 files changed

+41687
-38557
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+41687
-38557
lines changed

internal/services/block/volume.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,10 @@ func ResourceBlockVolumeDelete(ctx context.Context, d *schema.ResourceData, m in
205205

206206
_, err = waitForBlockVolume(ctx, api, zone, id, d.Timeout(schema.TimeoutDelete))
207207
if err != nil {
208+
if httperrors.Is404(err) {
209+
d.SetId("")
210+
return nil
211+
}
208212
return diag.FromErr(err)
209213
}
210214

internal/services/instance/helpers_instance_block.go

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ type ResizeUnknownVolumeRequest struct {
2828
Size *scw.Size
2929
}
3030

31+
type DeleteUnknownVolumeRequest struct {
32+
VolumeID string
33+
Zone scw.Zone
34+
}
35+
3136
type UnknownVolume struct {
3237
Zone scw.Zone
3338
ID string
@@ -168,6 +173,30 @@ func (api *BlockAndInstanceAPI) ResizeUnknownVolume(req *ResizeUnknownVolumeRequ
168173
return err
169174
}
170175

176+
func (api *BlockAndInstanceAPI) DeleteUnknownVolume(req *DeleteUnknownVolumeRequest, opts ...scw.RequestOption) error {
177+
unknownVolume, err := api.GetUnknownVolume(&GetUnknownVolumeRequest{
178+
VolumeID: req.VolumeID,
179+
Zone: req.Zone,
180+
}, opts...)
181+
if err != nil {
182+
return err
183+
}
184+
185+
if unknownVolume.IsBlockVolume() {
186+
err = api.blockAPI.DeleteVolume(&block.DeleteVolumeRequest{
187+
Zone: req.Zone,
188+
VolumeID: req.VolumeID,
189+
}, opts...)
190+
} else {
191+
err = api.API.DeleteVolume(&instance.DeleteVolumeRequest{
192+
Zone: req.Zone,
193+
VolumeID: req.VolumeID,
194+
}, opts...)
195+
}
196+
197+
return err
198+
}
199+
171200
type GetUnknownSnapshotRequest struct {
172201
Zone scw.Zone
173202
SnapshotID string
@@ -212,36 +241,34 @@ func (api *BlockAndInstanceAPI) GetUnknownSnapshot(req *GetUnknownSnapshotReques
212241
return snap, nil
213242
}
214243

244+
func NewBlockAndInstanceAPI(client *scw.Client) *BlockAndInstanceAPI {
245+
instanceAPI := instance.NewAPI(client)
246+
blockAPI := block.NewAPI(client)
247+
248+
return &BlockAndInstanceAPI{
249+
API: instanceAPI,
250+
blockAPI: blockAPI,
251+
}
252+
}
253+
215254
// newAPIWithZone returns a new instance API and the zone for a Create request
216255
func instanceAndBlockAPIWithZone(d *schema.ResourceData, m interface{}) (*BlockAndInstanceAPI, scw.Zone, error) {
217-
instanceAPI := instance.NewAPI(meta.ExtractScwClient(m))
218-
blockAPI := block.NewAPI(meta.ExtractScwClient(m))
219-
220256
zone, err := meta.ExtractZone(d, m)
221257
if err != nil {
222258
return nil, "", err
223259
}
224260

225-
return &BlockAndInstanceAPI{
226-
API: instanceAPI,
227-
blockAPI: blockAPI,
228-
}, zone, nil
261+
return NewBlockAndInstanceAPI(meta.ExtractScwClient(m)), zone, nil
229262
}
230263

231264
// NewAPIWithZoneAndID returns an instance API with zone and ID extracted from the state
232265
func instanceAndBlockAPIWithZoneAndID(m interface{}, zonedID string) (*BlockAndInstanceAPI, scw.Zone, string, error) {
233-
instanceAPI := instance.NewAPI(meta.ExtractScwClient(m))
234-
blockAPI := block.NewAPI(meta.ExtractScwClient(m))
235-
236266
zone, ID, err := zonal.ParseID(zonedID)
237267
if err != nil {
238268
return nil, "", "", err
239269
}
240270

241-
return &BlockAndInstanceAPI{
242-
API: instanceAPI,
243-
blockAPI: blockAPI,
244-
}, zone, ID, nil
271+
return NewBlockAndInstanceAPI(meta.ExtractScwClient(m)), zone, ID, nil
245272
}
246273

247274
func volumeTypeToMarketplaceFilter(volumeType instance.VolumeVolumeType) marketplace.LocalImageType {

internal/services/instance/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,7 @@ func ResourceInstanceServerDelete(ctx context.Context, d *schema.ResourceData, m
11291129
if !volumeExist {
11301130
return diag.Errorf("volume ID not found")
11311131
}
1132-
err = api.DeleteVolume(&instanceSDK.DeleteVolumeRequest{
1132+
err = api.DeleteUnknownVolume(&DeleteUnknownVolumeRequest{
11331133
Zone: zone,
11341134
VolumeID: locality.ExpandID(volumeID),
11351135
})

internal/services/instance/server_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1713,7 +1713,10 @@ func TestAccServer_BlockExternalRootVolume(t *testing.T) {
17131713
resource.ParallelTest(t, resource.TestCase{
17141714
PreCheck: func() { acctest.PreCheck(t) },
17151715
ProviderFactories: tt.ProviderFactories,
1716-
CheckDestroy: instancechecks.IsServerDestroyed(tt),
1716+
CheckDestroy: resource.ComposeTestCheckFunc(
1717+
instancechecks.IsServerDestroyed(tt),
1718+
instancechecks.IsServerRootVolumeDestroyed(tt),
1719+
),
17171720
Steps: []resource.TestStep{
17181721
{
17191722
Config: `

internal/services/instance/testdata/data-source-private-nic-basic.cassette.yaml

Lines changed: 844 additions & 795 deletions
Large diffs are not rendered by default.

internal/services/instance/testdata/data-source-server-basic.cassette.yaml

Lines changed: 640 additions & 591 deletions
Large diffs are not rendered by default.

internal/services/instance/testdata/data-source-servers-basic.cassette.yaml

Lines changed: 683 additions & 585 deletions
Large diffs are not rendered by default.

internal/services/instance/testdata/image-server-with-block-volume.cassette.yaml

Lines changed: 1304 additions & 1451 deletions
Large diffs are not rendered by default.

internal/services/instance/testdata/image-server-with-local-volume.cassette.yaml

Lines changed: 1431 additions & 1774 deletions
Large diffs are not rendered by default.

internal/services/instance/testdata/image-server.cassette.yaml

Lines changed: 779 additions & 779 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)