Skip to content

Commit 730d061

Browse files
author
gitlab
committed
Merge branch 'zsv-ldap' into 'feature-zsv-5.0.0-vm-support-vtpm-and-secuceboot'
<feature>[kvm]: reset TPM state after VM clone See merge request zstackio/zstack!9458
2 parents 19e8f75 + 1eab431 commit 730d061

4 files changed

Lines changed: 79 additions & 0 deletions

File tree

compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.zstack.header.message.*;
4646
import org.zstack.header.network.l3.*;
4747
import org.zstack.header.storage.primary.*;
48+
import org.zstack.header.tpm.TpmConstants;
4849
import org.zstack.header.vm.*;
4950
import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicHostUuid;
5051
import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicVmState;
@@ -56,6 +57,7 @@
5657
import org.zstack.header.vm.VmInstanceSpec.CdRomSpec;
5758
import org.zstack.header.vm.VmInstanceSpec.HostName;
5859
import org.zstack.header.vm.VmInstanceSpec.IsoSpec;
60+
import org.zstack.header.vm.additions.ResetVmTpmMsg;
5961
import org.zstack.header.vm.cdrom.*;
6062
import org.zstack.header.vm.devices.VmInstanceResourceMetadataManager;
6163
import org.zstack.header.vo.ResourceVO;
@@ -3561,6 +3563,40 @@ public void run(MessageReply reply) {
35613563
}
35623564
});
35633565

3566+
flow(new NoRollbackFlow() {
3567+
String __name__ = "reset-vm-tpm";
3568+
3569+
@Override
3570+
public boolean skip(Map data) {
3571+
boolean resetTpm;
3572+
if (msg.getResetTpm() == null) {
3573+
resetTpm = rcf.getResourceConfigValue(
3574+
VmGlobalConfig.RESET_TPM_AFTER_VM_CLONE,
3575+
msg.getVmInstanceUuid(), Boolean.class);
3576+
} else {
3577+
resetTpm = msg.getResetTpm();
3578+
}
3579+
return !resetTpm;
3580+
}
3581+
3582+
@Override
3583+
public void run(FlowTrigger trigger, Map map) {
3584+
ResetVmTpmMsg rmsg = new ResetVmTpmMsg();
3585+
rmsg.setVmInstanceUuid(msg.getVmInstanceUuid());
3586+
bus.makeLocalServiceId(rmsg, TpmConstants.SERVICE_ID);
3587+
bus.send(rmsg, new CloudBusCallBack(trigger) {
3588+
@Override
3589+
public void run(MessageReply reply) {
3590+
if (!reply.isSuccess()) {
3591+
trigger.fail(reply.getError());
3592+
return;
3593+
}
3594+
trigger.next();
3595+
}
3596+
});
3597+
}
3598+
});
3599+
35643600
flow(new NoRollbackFlow() {
35653601
String __name__ = "update-vm-name";
35663602

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.zstack.header.vm.additions;
2+
3+
import org.zstack.header.message.NeedReplyMessage;
4+
5+
public class ResetVmTpmMsg extends NeedReplyMessage {
6+
private String vmInstanceUuid;
7+
8+
public String getVmInstanceUuid() {
9+
return vmInstanceUuid;
10+
}
11+
12+
public void setVmInstanceUuid(String vmInstanceUuid) {
13+
this.vmInstanceUuid = vmInstanceUuid;
14+
}
15+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.zstack.header.vm.additions;
2+
3+
import org.zstack.header.message.MessageReply;
4+
5+
public class ResetVmTpmReply extends MessageReply {
6+
}

plugin/kvm/src/main/java/org/zstack/kvm/tpm/KvmTpmManager.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
import org.zstack.header.tpm.message.RemoveTpmReply;
4545
import org.zstack.header.vm.VmInstanceVO;
4646
import org.zstack.header.vm.VmInstanceVO_;
47+
import org.zstack.header.vm.additions.ResetVmTpmMsg;
48+
import org.zstack.header.vm.additions.ResetVmTpmReply;
49+
import org.zstack.header.vm.additions.VmHostBackupFileVO;
50+
import org.zstack.header.vm.additions.VmHostBackupFileVO_;
4751
import org.zstack.header.vm.additions.VmHostFileInventory;
4852
import org.zstack.header.vm.additions.VmHostFileType;
4953
import org.zstack.header.vm.additions.VmHostFileVO;
@@ -120,6 +124,8 @@ private void handleLocalMessage(Message msg) {
120124
handle((RemoveTpmMsg) msg);
121125
} else if (msg instanceof CloneVmTpmMsg) {
122126
handle((CloneVmTpmMsg) msg);
127+
} else if (msg instanceof ResetVmTpmMsg) {
128+
handle((ResetVmTpmMsg) msg);
123129
} else {
124130
bus.dealWithUnknownMessage(msg);
125131
}
@@ -420,6 +426,22 @@ public void handle(ErrorCode errCode, Map data) {
420426
}).start();
421427
}
422428

429+
private void handle(ResetVmTpmMsg msg) {
430+
ResetVmTpmReply reply = new ResetVmTpmReply();
431+
432+
String vmUuid = msg.getVmInstanceUuid();
433+
SQL.New(VmHostFileVO.class)
434+
.eq(VmHostFileVO_.vmInstanceUuid, vmUuid)
435+
.eq(VmHostFileVO_.type, VmHostFileType.TpmState)
436+
.delete();
437+
SQL.New(VmHostBackupFileVO.class)
438+
.eq(VmHostBackupFileVO_.resourceUuid, vmUuid)
439+
.eq(VmHostBackupFileVO_.type, VmHostFileType.TpmState)
440+
.delete();
441+
442+
bus.reply(msg, reply);
443+
}
444+
423445
private void handle(APIGetTpmCapabilityMsg msg) {
424446
TpmCapabilityView view = new TpmCapabilityView();
425447

0 commit comments

Comments
 (0)