Decrypt an Encrypted Virtual Machine or Disk
This is similar to encrypting an existing virtual machine, but with a different CryptoSpec. First set the crypto property in the VirtualMachineConfigSpec to CryptoSpecDecrypt. The virtual machine must be powered off, and the storage profiles must be set not to specify encryption.
If the CryptoSpec is unset, but a storage profile without encryption is set, the vCenter Server sets CryptoSpecDecrypt. The ConfigSpec.crypto parameter must be set explicitly. Only encryption is deduced from the storage profile.
Decrypt a virtual machine based on storage profile
void Decrypt() throws Exception { // Create VirtualMachineConfigSpec VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); // Create VirtualDeviceConfigSpec VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec(); // Create Empty VirtualMachineProfileSpec for decryption VirtualMachineProfileSpec emptyProfile = new VirtualMachineEmptyProfileSpec(); // Get VirtualDisk for disk to be reconfigured as in com.vmware.vm.VMReconfig, name it disk. diskSpec.setDevice(disk); diskSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); // Remove any encryption profile set for the disk diskSpec.getProfile().add(emptyProfile); // Create CryptoSpec for decryption CryptoSpecDecrypt cryptoSpec = new CryptoSpecDecrypt(); // Add CryptoSpecEncrypt to diskSpec backing VirtualDeviceConfigSpecBackingSpec backingSpec = new VirtualDeviceConfigSpecBackingSpec(); backingSpec.setCrypto(cryptoSpec); diskSpec.setBacking(backingSpec); // Decrypting virtual machine home is not necessary when decrypting a virtual disk. // If no encrypted disk is present on the virtual machine after the above disk is decrypted, // you can choose to decrypt virtual machine home. // Set cryptoSpec and profile for decrypting virtual machine home vmConfigSpec.setCrypto(cryptoSpec); vmConfigSpec.getVmProfile().add(emptyProfile); // Set the device changes vmConfigSpec.getDeviceChange().add(diskSpec); // Issue reconfigure - See reConfig() in com.vmware.vm.VMReconfig for how to reconfigure VM }