@@ -1014,6 +1014,7 @@ func ResourceInstanceServerUpdate(ctx context.Context, d *schema.ResourceData, m
10141014 }
10151015
10161016 if d .HasChange ("admin_password_encryption_ssh_key_id" ) {
1017+ serverShouldUpdate = true
10171018 updateRequest .AdminPasswordEncryptionSSHKeyID = types .ExpandUpdatedStringPtr (d .Get ("admin_password_encryption_ssh_key_id" ).(string ))
10181019 }
10191020
@@ -1243,24 +1244,6 @@ func ResourceInstanceServerDelete(ctx context.Context, d *schema.ResourceData, m
12431244 }
12441245 }
12451246
1246- // reach running state (mandatory for termination)
1247- err = reachState (ctx , api , zone , id , instanceSDK .ServerStateRunning )
1248- if err != nil && ! httperrors .Is404 (err ) {
1249- return diag .FromErr (err )
1250- }
1251-
1252- timeout := d .Timeout (schema .TimeoutDelete )
1253-
1254- err = api .ServerActionAndWait (& instanceSDK.ServerActionAndWaitRequest {
1255- Zone : zone ,
1256- ServerID : id ,
1257- Action : instanceSDK .ServerActionTerminate ,
1258- Timeout : & timeout ,
1259- }, scw .WithContext (ctx ))
1260- if err != nil && ! httperrors .Is404 (err ) {
1261- return diag .FromErr (err )
1262- }
1263-
12641247 // Delete private-nic if managed by instance_server resource
12651248 if raw , ok := d .GetOk ("private_network" ); ok {
12661249 ph , err := newPrivateNICHandler (api .API , id , zone )
@@ -1279,6 +1262,19 @@ func ResourceInstanceServerDelete(ctx context.Context, d *schema.ResourceData, m
12791262 }
12801263 }
12811264
1265+ _ , err = waitForServer (ctx , api .API , zone , id , d .Timeout (schema .TimeoutDelete ))
1266+ if err != nil && ! httperrors .Is404 (err ) {
1267+ return diag .FromErr (err )
1268+ }
1269+
1270+ err = terminateServer (ctx , api , zone , id , d .Timeout (schema .TimeoutDelete ))
1271+ if err != nil {
1272+ err = deleteServer (ctx , api , zone , id , d .Timeout (schema .TimeoutDelete ))
1273+ if err != nil {
1274+ return diag .FromErr (err )
1275+ }
1276+ }
1277+
12821278 // Related to https://github.com/hashicorp/terraform-plugin-sdk/issues/142
12831279 _ , rootVolumeAttributeSet := d .GetOk ("root_volume" )
12841280 if d .Get ("root_volume.0.delete_on_termination" ).(bool ) || ! rootVolumeAttributeSet {
@@ -1299,6 +1295,54 @@ func ResourceInstanceServerDelete(ctx context.Context, d *schema.ResourceData, m
12991295 return nil
13001296}
13011297
1298+ func terminateServer (ctx context.Context , api * instancehelpers.BlockAndInstanceAPI , zone scw.Zone , id string , timeout time.Duration ) error {
1299+ // reach running state (mandatory for termination)
1300+ err := reachState (ctx , api , zone , id , instanceSDK .ServerStateRunning )
1301+ if err != nil && ! httperrors .Is404 (err ) {
1302+ return err
1303+ }
1304+
1305+ err = api .ServerActionAndWait (& instanceSDK.ServerActionAndWaitRequest {
1306+ Zone : zone ,
1307+ ServerID : id ,
1308+ Action : instanceSDK .ServerActionTerminate ,
1309+ Timeout : & timeout ,
1310+ }, scw .WithContext (ctx ))
1311+ if err != nil && ! httperrors .Is404 (err ) {
1312+ return err
1313+ }
1314+
1315+ return nil
1316+ }
1317+
1318+ func deleteServer (ctx context.Context , api * instancehelpers.BlockAndInstanceAPI , zone scw.Zone , id string , timeout time.Duration ) error {
1319+ _ , err := waitForServer (ctx , api .API , zone , id , timeout )
1320+ if err != nil && ! httperrors .Is404 (err ) {
1321+ return err
1322+ }
1323+
1324+ // reach stopped state
1325+ err = reachState (ctx , api , zone , id , instanceSDK .ServerStateStopped )
1326+ if err != nil && ! httperrors .Is404 (err ) {
1327+ return err
1328+ }
1329+
1330+ err = api .DeleteServer (& instanceSDK.DeleteServerRequest {
1331+ Zone : zone ,
1332+ ServerID : id ,
1333+ }, scw .WithContext (ctx ))
1334+ if err != nil && ! httperrors .Is404 (err ) {
1335+ return err
1336+ }
1337+
1338+ _ , err = waitForServer (ctx , api .API , zone , id , timeout )
1339+ if err != nil && ! httperrors .Is404 (err ) {
1340+ return err
1341+ }
1342+
1343+ return nil
1344+ }
1345+
13021346func instanceServerCanMigrate (api * instanceSDK.API , server * instanceSDK.Server , requestedType string ) error {
13031347 var localVolumeSize scw.Size
13041348
0 commit comments