Skip to content

Commit bc12449

Browse files
author
gitlab
committed
Merge branch 'zsv-ldap-3' into 'feature-zsv-5.0.0-vm-support-vtpm-and-secuceboot'
<fix>[kvm]: remove TPM from VM individually instead of batch delete See merge request zstackio/zstack!9550
2 parents 912b02f + ab338a6 commit bc12449

1 file changed

Lines changed: 30 additions & 4 deletions

File tree

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

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ public String getName() {
305305
static class RemoveTpmFromVmContext {
306306
String vmInstanceUuid;
307307
String tpmUuid;
308+
309+
// enable when TPM delete/VM delete ...
310+
boolean force;
311+
308312
List<VmHostFileVO> hostFiles;
309313

310314
static RemoveTpmFromVmContext valueOf(RemoveTpmMsg msg) {
@@ -318,6 +322,7 @@ static RemoveTpmFromVmContext valueOf(RemoveTpmMsg msg) {
318322
private void removeTpmFromVm(RemoveTpmFromVmContext context, Completion completion) {
319323
SimpleFlowChain.of("remove-tpm-from-vm-" + context.vmInstanceUuid)
320324
.then(Flow.of("check-vm-status")
325+
.skipIf(data -> context.force)
321326
.handle(trigger -> {
322327
VmInstanceVO vm = Q.New(VmInstanceVO.class)
323328
.eq(VmInstanceVO_.uuid, context.vmInstanceUuid)
@@ -457,10 +462,31 @@ public void rollback(FlowRollback trigger, Map data) {
457462
trigger.rollback();
458463
return;
459464
}
460-
SQL.New(TpmVO.class)
461-
.in(TpmVO_.uuid, transform(reply.getInventories(), TpmInventory::getUuid))
462-
.delete();
463-
trigger.rollback();
465+
466+
new While<>(reply.getInventories()).each((tpm, whileCompletion) -> {
467+
RemoveTpmFromVmContext removeContext = new RemoveTpmFromVmContext();
468+
removeContext.vmInstanceUuid = tpm.getVmInstanceUuid();
469+
removeContext.tpmUuid = tpm.getUuid();
470+
removeContext.force = true;
471+
removeTpmFromVm(removeContext, new Completion(whileCompletion) {
472+
@Override
473+
public void success() {
474+
whileCompletion.done();
475+
}
476+
477+
@Override
478+
public void fail(ErrorCode errorCode) {
479+
logger.warn(String.format("failed to delete tpm for VM[%s] but still continue: %s",
480+
tpm.getVmInstanceUuid(), errorCode.getReadableDetails()));
481+
whileCompletion.done();
482+
}
483+
});
484+
}).run(new WhileDoneCompletion(trigger) {
485+
@Override
486+
public void done(ErrorCodeList errorCodeList) {
487+
trigger.rollback();
488+
}
489+
});
464490
}
465491
}).then(new NoRollbackFlow() {
466492
String __name__ = "clone-encrypted-resource-key-if-needed";

0 commit comments

Comments
 (0)