Skip to content

Commit 09131e7

Browse files
author
gitlab
committed
Merge branch 'zsv-ldap' into 'feature-zsv-5.0.0-vm-support-vtpm-and-secuceboot'
<feature>[kvm]: add os spec machine type support See merge request zstackio/zstack!9514
2 parents 736f312 + 39fa047 commit 09131e7

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)