Skip to content

Commit 686b714

Browse files
committed
VMware: add vTPM
1 parent 5378192 commit 686b714

File tree

1 file changed

+51
-0
lines changed
  • plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource

1 file changed

+51
-0
lines changed

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@
5151

5252
import com.cloud.capacity.CapacityManager;
5353
import com.cloud.hypervisor.vmware.mo.HostDatastoreBrowserMO;
54+
import com.vmware.vim25.Description;
5455
import com.vmware.vim25.FileInfo;
5556
import com.vmware.vim25.FileQueryFlags;
5657
import com.vmware.vim25.FolderFileInfo;
5758
import com.vmware.vim25.HostDatastoreBrowserSearchResults;
5859
import com.vmware.vim25.HostDatastoreBrowserSearchSpec;
5960
import com.vmware.vim25.VirtualCdromIsoBackingInfo;
6061
import com.vmware.vim25.VirtualMachineConfigSummary;
62+
import com.vmware.vim25.VirtualTPM;
6163
import org.apache.cloudstack.api.ApiConstants;
6264
import org.apache.cloudstack.backup.PrepareForBackupRestorationCommand;
6365
import org.apache.cloudstack.storage.command.CopyCommand;
@@ -2597,12 +2599,16 @@ protected StartAnswer execute(StartCommand cmd) {
25972599

25982600
setBootOptions(vmSpec, bootMode, vmConfigSpec);
25992601

2602+
// Config vTPM
2603+
configureVirtualTPM(vmMo, vmSpec, vmConfigSpec, bootMode);
2604+
26002605
if (StringUtils.isNotEmpty(vmStoragePolicyId)) {
26012606
vmConfigSpec.getVmProfile().add(vmProfileSpec);
26022607
if (logger.isTraceEnabled()) {
26032608
logger.trace(String.format("Configuring the VM %s with storage policy: %s", vmInternalCSName, vmStoragePolicyId));
26042609
}
26052610
}
2611+
26062612
//
26072613
// Configure VM
26082614
//
@@ -3203,6 +3209,51 @@ protected void configureSpecVideoCardNewVRamSize(VirtualMachineVideoCard videoCa
32033209
vmConfigSpec.getDeviceChange().add(arrayVideoCardConfigSpecs);
32043210
}
32053211

3212+
/**
3213+
* Add or Remove virtual TPM module
3214+
*
3215+
* @param vmMo virtual machine mo
3216+
* @param vmSpec virtual machine specs
3217+
* @param vmConfigSpec virtual machine config spec
3218+
* @throws Exception exception
3219+
*/
3220+
protected void configureVirtualTPM(VirtualMachineMO vmMo, VirtualMachineTO vmSpec, VirtualMachineConfigSpec vmConfigSpec, String bootMode) throws Exception {
3221+
String bootType = vmSpec.getDetails().getOrDefault(ApiConstants.BootType.UEFI.toString(), null);
3222+
String virtualTPMEnabled = vmSpec.getDetails().getOrDefault(VmDetailConstants.VIRTUAL_TPM_ENABLED, null);
3223+
if (StringUtils.isNotBlank(bootMode) && !bootMode.equalsIgnoreCase("bios")
3224+
&& "secure".equalsIgnoreCase(bootType)
3225+
&& Boolean.parseBoolean(virtualTPMEnabled)) {
3226+
logger.debug("Adding Virtual TPM device");
3227+
for (VirtualDevice device : vmMo.getAllDeviceList()) {
3228+
if (device instanceof VirtualTPM) {
3229+
return;
3230+
}
3231+
}
3232+
Description description = new Description();
3233+
description.setSummary("Trusted Platform Module");
3234+
description.setLabel("Trusted Platform Module");
3235+
VirtualTPM virtualTPM = new VirtualTPM();
3236+
virtualTPM.setDeviceInfo(description);
3237+
virtualTPM.setKey(-1);
3238+
VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec();
3239+
deviceConfigSpec.setDevice(virtualTPM);
3240+
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
3241+
vmConfigSpec.getDeviceChange().add(deviceConfigSpec);
3242+
} else {
3243+
logger.debug(String.format("Virtual TPM device is not enabled. It is only enabled when boot type is SECURE (actually %s) and vTPM is enabled (actually %s)", bootType, virtualTPMEnabled));
3244+
for (VirtualDevice device : vmMo.getAllDeviceList()) {
3245+
if (device instanceof VirtualTPM) {
3246+
VirtualTPM virtualTPM = (VirtualTPM) device;
3247+
VirtualDeviceConfigSpec virtualDeviceConfigSpec = new VirtualDeviceConfigSpec();
3248+
virtualDeviceConfigSpec.setDevice(virtualTPM);
3249+
virtualDeviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.REMOVE);
3250+
vmConfigSpec.getDeviceChange().add(virtualDeviceConfigSpec);
3251+
}
3252+
}
3253+
3254+
}
3255+
}
3256+
32063257
private void tearDownVm(VirtualMachineMO vmMo) throws Exception {
32073258

32083259
if (vmMo == null)

0 commit comments

Comments
 (0)