@@ -282,6 +282,14 @@ private AzureOperationResponse<VirtualMachine> UpdateVmEncryptionSettings()
282
282
null ) ) ;
283
283
}
284
284
285
+ DiskEncryptionSettings encryptionSettingsBackup = vmParameters . StorageProfile . OsDisk . EncryptionSettings ;
286
+
287
+ if ( encryptionSettingsBackup == null )
288
+ {
289
+ encryptionSettingsBackup = new DiskEncryptionSettings ( ) ;
290
+ encryptionSettingsBackup . Enabled = false ;
291
+ }
292
+
285
293
DiskEncryptionSettings encryptionSettings = new DiskEncryptionSettings ( ) ;
286
294
encryptionSettings . Enabled = true ;
287
295
encryptionSettings . DiskEncryptionKey = new KeyVaultSecretReference ( ) ;
@@ -306,10 +314,25 @@ private AzureOperationResponse<VirtualMachine> UpdateVmEncryptionSettings()
306
314
Location = vmParameters . Location ,
307
315
Tags = vmParameters . Tags
308
316
} ;
309
- return this . ComputeClient . ComputeManagementClient . VirtualMachines . CreateOrUpdateWithHttpMessagesAsync (
317
+
318
+ AzureOperationResponse < VirtualMachine > updateResult = this . ComputeClient . ComputeManagementClient . VirtualMachines . CreateOrUpdateWithHttpMessagesAsync (
310
319
this . ResourceGroupName ,
311
320
vmParameters . Name ,
312
321
parameters ) . GetAwaiter ( ) . GetResult ( ) ;
322
+
323
+ if ( ! updateResult . Response . IsSuccessStatusCode )
324
+ {
325
+ vmParameters = ( this . ComputeClient . ComputeManagementClient . VirtualMachines . Get (
326
+ this . ResourceGroupName , this . VMName ) ) ;
327
+ vmParameters . StorageProfile . OsDisk . EncryptionSettings = encryptionSettingsBackup ;
328
+
329
+ this . ComputeClient . ComputeManagementClient . VirtualMachines . CreateOrUpdateWithHttpMessagesAsync (
330
+ this . ResourceGroupName ,
331
+ vmParameters . Name ,
332
+ parameters ) . GetAwaiter ( ) . GetResult ( ) ;
333
+ }
334
+
335
+ return updateResult ;
313
336
}
314
337
315
338
private Hashtable GetExtensionPublicSettings ( )
@@ -444,12 +467,23 @@ public override void ExecuteCmdlet()
444
467
445
468
VirtualMachineExtension parameters = GetVmExtensionParameters ( virtualMachineResponse ) ;
446
469
447
- this . VirtualMachineExtensionClient . CreateOrUpdateWithHttpMessagesAsync (
470
+ AzureOperationResponse < VirtualMachineExtension > extensionPushResult = this . VirtualMachineExtensionClient . CreateOrUpdateWithHttpMessagesAsync (
448
471
this . ResourceGroupName ,
449
472
this . VMName ,
450
473
this . Name ,
451
474
parameters ) . GetAwaiter ( ) . GetResult ( ) ;
452
475
476
+ if ( ! extensionPushResult . Response . IsSuccessStatusCode )
477
+ {
478
+ ThrowTerminatingError ( new ErrorRecord ( new ApplicationException ( string . Format ( CultureInfo . CurrentUICulture ,
479
+ "Installation failed for extension {0} with error {1}" ,
480
+ parameters . VirtualMachineExtensionType ,
481
+ extensionPushResult . Response . Content . ReadAsStringAsync ( ) . GetAwaiter ( ) . GetResult ( ) ) ) ,
482
+ "InvalidResult" ,
483
+ ErrorCategory . InvalidResult ,
484
+ null ) ) ;
485
+ }
486
+
453
487
var op = UpdateVmEncryptionSettings ( ) ;
454
488
var result = Mapper . Map < PSAzureOperationResponse > ( op ) ;
455
489
WriteObject ( result ) ;
0 commit comments