feat: Prevent VM start after restore from backup or snapshot (#865)

* feat: Prevent VM start after restore from backup or snapshot

Related to: https://github.com/harvester/harvester/issues/10422
Related to: https://github.com/harvester/harvester/pull/10480

Signed-off-by: Volker Theile <vtheile@suse.com>

* feat: Prevent VM start after restore from backup or snapshot

Related to: https://github.com/harvester/harvester/issues/10422
Related to: https://github.com/harvester/harvester/pull/10480

Signed-off-by: Volker Theile <vtheile@suse.com>

---------

Signed-off-by: Volker Theile <vtheile@suse.com>
This commit is contained in:
Volker Theile 2026-05-18 08:10:36 +02:00 committed by GitHub
parent 1446aac168
commit e70c684382
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 0 deletions

View File

@ -254,15 +254,24 @@ export default {
v-if="restoreNewVm" v-if="restoreNewVm"
v-model:value="restoreResource.spec.keepMacAddress" v-model:value="restoreResource.spec.keepMacAddress"
type="checkbox" type="checkbox"
class="check mb-20"
:label="t('harvester.backup.restore.keepMacAddress')" :label="t('harvester.backup.restore.keepMacAddress')"
/> />
<LabeledSelect <LabeledSelect
v-if="!restoreNewVm" v-if="!restoreNewVm"
v-model:value="deletionPolicy" v-model:value="deletionPolicy"
class="mb-20"
:label="t('harvester.backup.restore.deletePreviousVolumes')" :label="t('harvester.backup.restore.deletePreviousVolumes')"
:options="deletionPolicyOption" :options="deletionPolicyOption"
/> />
<Checkbox
v-model:value="restoreResource.spec.haltAfterRestore"
type="checkbox"
class="check mb-20"
:label="t('harvester.backup.restore.haltAfterRestore')"
/>
</div> </div>
<Footer <Footer

View File

@ -2,6 +2,7 @@
import Footer from '@shell/components/form/Footer'; import Footer from '@shell/components/form/Footer';
import { RadioGroup } from '@components/Form/Radio'; import { RadioGroup } from '@components/Form/Radio';
import { LabeledInput } from '@components/Form/LabeledInput'; import { LabeledInput } from '@components/Form/LabeledInput';
import Checkbox from '@components/Form/Checkbox/Checkbox';
import LabeledSelect from '@shell/components/form/LabeledSelect'; import LabeledSelect from '@shell/components/form/LabeledSelect';
import CreateEditView from '@shell/mixins/create-edit-view'; import CreateEditView from '@shell/mixins/create-edit-view';
import { allHash } from '@shell/utils/promise'; import { allHash } from '@shell/utils/promise';
@ -32,6 +33,7 @@ const createObject = {
export default { export default {
name: 'CreateRestore', name: 'CreateRestore',
components: { components: {
Checkbox,
Footer, Footer,
RadioGroup, RadioGroup,
LabeledInput, LabeledInput,
@ -249,9 +251,17 @@ export default {
<LabeledSelect <LabeledSelect
v-if="!restoreNewVm" v-if="!restoreNewVm"
v-model:value="deletionPolicy" v-model:value="deletionPolicy"
class="mb-20"
:label="t('harvester.backup.restore.deletePreviousVolumes')" :label="t('harvester.backup.restore.deletePreviousVolumes')"
:options="deletionPolicyOption" :options="deletionPolicyOption"
/> />
<Checkbox
v-model:value="restoreResource.spec.haltAfterRestore"
type="checkbox"
class="check mb-20"
:label="t('harvester.backup.restore.haltAfterRestore')"
/>
</div> </div>
<Footer <Footer

View File

@ -1118,6 +1118,7 @@ harvester:
replaceExisting: Replace existing replaceExisting: Replace existing
virtualMachineName: Virtual Machine Name virtualMachineName: Virtual Machine Name
keepMacAddress: Keep MAC Address keepMacAddress: Keep MAC Address
haltAfterRestore: Keep powered off after restore
matchTarget: The current backup target does not match the existing one. matchTarget: The current backup target does not match the existing one.
progress: progress:
details: Volume details details: Volume details
@ -1522,6 +1523,7 @@ harvester:
vmSnapshot: vmSnapshot:
label: Virtual Machine Snapshots label: Virtual Machine Snapshots
createText: Restore Snapshot createText: Restore Snapshot
title: Restore Virtual Machine
snapshot: Snapshot snapshot: Snapshot
storage: storage: