Skip to content

Commit 39fa047

Browse files
author
Zhang Wenhao
committed
<feature>[kvm]: add os spec machine type support
Add OperatingSystemBootingSpec to VmInstanceSpec for machine type Support setting machine type through os spec instead of system tag Auto set q35 machine type for TPM/NvRam scenarios when needed Update KVMHost to prioritize spec machine type over system tag Remove unused imports from KVMHost Resolves: ZSV-11371 Related: ZSV-11310 Change-Id: I6f6d6a677374656d6c7467686e6369786f6f646f
1 parent 736f312 commit 39fa047

3 files changed

Lines changed: 43 additions & 6 deletions

File tree

compute/src/main/java/org/zstack/compute/vm/devices/VmTpmExtensions.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,20 @@
1313
import org.zstack.header.vm.VmInstanceCreateExtensionPoint;
1414
import org.zstack.header.vm.VmInstanceSpec;
1515
import org.zstack.header.vm.VmInstanceVO;
16+
import org.zstack.header.vm.VmMachineType;
1617
import org.zstack.header.vm.devices.VmDevicesSpec;
1718
import org.zstack.resourceconfig.ResourceConfig;
1819
import org.zstack.resourceconfig.ResourceConfigFacade;
20+
import org.zstack.utils.Utils;
21+
import org.zstack.utils.logging.CLogger;
1922

2023
import static org.zstack.compute.vm.VmGlobalConfig.ENABLE_UEFI_SECURE_BOOT;
2124
import static org.zstack.header.vm.VmInstanceConstant.NV_RAM_DEFAULT_SIZE;
2225

2326
public class VmTpmExtensions implements VmInstanceCreateExtensionPoint,
2427
BuildVmSpecExtensionPoint {
28+
private static final CLogger logger = Utils.getLogger(VmTpmExtensions.class);
29+
2530
@Autowired
2631
private VmTpmManager vmTpmManager;
2732
@Autowired
@@ -115,5 +120,11 @@ public void afterBuildVmSpec(VmInstanceSpec spec) {
115120
tpmSpec.setEnable(true);
116121
tpmSpec.setTpmUuid(tpmUuid);
117122
}
123+
124+
if (needRegisterNvRam && spec.getOsSpec().getMachineType() == null) {
125+
spec.getOsSpec().setMachineType(VmMachineType.q35.toString());
126+
logger.debug(String.format(
127+
"auto-set machineType to q35 for VM[uuid:%s] because NvRam/TPM registration is needed", vmUuid));
128+
}
118129
}
119130
}

header/src/main/java/org/zstack/header/vm/VmInstanceSpec.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ public void setCandidatePrimaryStorageUuidsForDataVolume(List<String> candidateP
406406
private VmCustomSpecificationStruct vmCustomSpecification;
407407
private VmDevicesSpec devicesSpec;
408408
private DiskAO nvRamSpec;
409+
private OperatingSystemBootingSpec osSpec = new OperatingSystemBootingSpec();
409410

410411
public DiskAO getRootDisk() {
411412
return rootDisk;
@@ -455,6 +456,14 @@ public void setNvRamSpec(DiskAO nvRamSpec) {
455456
this.nvRamSpec = nvRamSpec;
456457
}
457458

459+
public OperatingSystemBootingSpec getOsSpec() {
460+
return osSpec;
461+
}
462+
463+
public void setOsSpec(OperatingSystemBootingSpec osSpec) {
464+
this.osSpec = osSpec;
465+
}
466+
458467
public boolean isSkipIpAllocation() {
459468
return skipIpAllocation;
460469
}
@@ -924,4 +933,19 @@ public String getVolumeFormatFromImage() {
924933
return ImageConstant.QCOW2_FORMAT_STRING;
925934
}
926935
}
936+
937+
public static class OperatingSystemBootingSpec implements Serializable {
938+
/**
939+
* @see VmMachineType
940+
*/
941+
private String machineType;
942+
943+
public String getMachineType() {
944+
return machineType;
945+
}
946+
947+
public void setMachineType(String machineType) {
948+
this.machineType = machineType;
949+
}
950+
}
927951
}

plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,6 @@
101101
import javax.persistence.TypedQuery;
102102
import java.io.IOException;
103103
import java.net.URI;
104-
import java.security.MessageDigest;
105-
import java.security.NoSuchAlgorithmException;
106-
import java.util.Base64;
107104
import java.net.URISyntaxException;
108105
import java.time.LocalDateTime;
109106
import java.time.format.DateTimeFormatter;
@@ -4439,9 +4436,14 @@ protected void startVm(final VmInstanceSpec spec, final NeedReplyMessage msg, fi
44394436
cmd.setChassisAssetTag(NetworkGlobalProperty.CHASSIS_ASSET_TAG);
44404437
}
44414438

4442-
String machineType = VmSystemTags.MACHINE_TYPE.getTokenByResourceUuid(cmd.getVmInstanceUuid(),
4443-
VmInstanceVO.class, VmSystemTags.MACHINE_TYPE_TOKEN);
4444-
cmd.setMachineType(StringUtils.isNotEmpty(machineType) ? machineType : "pc");
4439+
if (spec.getOsSpec().getMachineType() == null) {
4440+
String machineType = VmSystemTags.MACHINE_TYPE.getTokenByResourceUuid(cmd.getVmInstanceUuid(),
4441+
VmInstanceVO.class, VmSystemTags.MACHINE_TYPE_TOKEN);
4442+
cmd.setMachineType(StringUtils.isNotEmpty(machineType) ? machineType : "pc");
4443+
} else {
4444+
cmd.setMachineType(spec.getOsSpec().getMachineType());
4445+
}
4446+
String machineType = cmd.getMachineType();
44454447

44464448
if (KVMSystemTags.VM_PREDEFINED_PCI_BRIDGE_NUM.hasTag(spec.getVmInventory().getUuid())) {
44474449
cmd.setPredefinedPciBridgeNum(Integer.valueOf(KVMSystemTags.VM_PREDEFINED_PCI_BRIDGE_NUM.getTokenByResourceUuid(spec.getVmInventory().getUuid(), KVMSystemTags.VM_PREDEFINED_PCI_BRIDGE_NUM_TOKEN)));

0 commit comments

Comments
 (0)