diff --git a/@xen-orchestra/backups/writers/DeltaBackupWriter.js b/@xen-orchestra/backups/writers/DeltaBackupWriter.js index 217bbbb4a..658a12e49 100644 --- a/@xen-orchestra/backups/writers/DeltaBackupWriter.js +++ b/@xen-orchestra/backups/writers/DeltaBackupWriter.js @@ -19,8 +19,6 @@ const { AbstractDeltaWriter } = require('./_AbstractDeltaWriter.js') const { checkVhd } = require('./_checkVhd.js') const { packUuid } = require('./_packUuid.js') const { Disposable } = require('promise-toolbox') -const { HealthCheckVmBackup } = require('../HealthCheckVmBackup.js') -const { ImportVmBackup } = require('../ImportVmBackup.js') const { warn } = createLogger('xo:backups:DeltaBackupWriter') @@ -71,35 +69,6 @@ exports.DeltaBackupWriter = class DeltaBackupWriter extends MixinBackupWriter(Ab return this._cleanVm({ merge: true }) } - healthCheck(sr) { - return Task.run( - { - name: 'health check', - }, - async () => { - const xapi = sr.$xapi - const srUuid = sr.uuid - const adapter = this._adapter - const metadata = await adapter.readVmBackupMetadata(this._metadataFileName) - const { id: restoredId } = await new ImportVmBackup({ - adapter, - metadata, - srUuid, - xapi, - }).run() - const restoredVm = xapi.getObject(restoredId) - try { - await new HealthCheckVmBackup({ - restoredVm, - xapi, - }).run() - } finally { - await xapi.VM_destroy(restoredVm.$ref) - } - } - ) - } - prepare({ isFull }) { // create the task related to this export and ensure all methods are called in this context const task = new Task({ diff --git a/@xen-orchestra/backups/writers/FullBackupWriter.js b/@xen-orchestra/backups/writers/FullBackupWriter.js index e965aed04..f17e38b53 100644 --- a/@xen-orchestra/backups/writers/FullBackupWriter.js +++ b/@xen-orchestra/backups/writers/FullBackupWriter.js @@ -50,7 +50,7 @@ exports.FullBackupWriter = class FullBackupWriter extends MixinBackupWriter(Abst const dataBasename = basename + '.xva' const dataFilename = backupDir + '/' + dataBasename - const metadataFilename = `${backupDir}/${basename}.json` + const metadataFilename = (this._metadataFileName = `${backupDir}/${basename}.json`) const metadata = { jobId: job.id, mode: job.mode, diff --git a/@xen-orchestra/backups/writers/_MixinBackupWriter.js b/@xen-orchestra/backups/writers/_MixinBackupWriter.js index d5ddf6af5..413c0ec42 100644 --- a/@xen-orchestra/backups/writers/_MixinBackupWriter.js +++ b/@xen-orchestra/backups/writers/_MixinBackupWriter.js @@ -3,10 +3,13 @@ const { createLogger } = require('@xen-orchestra/log') const { join } = require('path') -const { getVmBackupDir } = require('../_getVmBackupDir.js') -const MergeWorker = require('../merge-worker/index.js') +const assert = require('assert') const { formatFilenameDate } = require('../_filenameDate.js') +const { getVmBackupDir } = require('../_getVmBackupDir.js') +const { HealthCheckVmBackup } = require('../HealthCheckVmBackup.js') +const { ImportVmBackup } = require('../ImportVmBackup.js') const { Task } = require('../Task.js') +const MergeWorker = require('../merge-worker/index.js') const { info, warn } = createLogger('xo:backups:MixinBackupWriter') @@ -73,4 +76,38 @@ exports.MixinBackupWriter = (BaseClass = Object) => } await this._adapter.invalidateVmBackupListCache(this._backup.vm.uuid) } + + healthCheck(sr) { + assert.notStrictEqual( + this._metadataFileName, + undefined, + 'Metadata file name should be defined before making a healthcheck' + ) + return Task.run( + { + name: 'health check', + }, + async () => { + const xapi = sr.$xapi + const srUuid = sr.uuid + const adapter = this._adapter + const metadata = await adapter.readVmBackupMetadata(this._metadataFileName) + const { id: restoredId } = await new ImportVmBackup({ + adapter, + metadata, + srUuid, + xapi, + }).run() + const restoredVm = xapi.getObject(restoredId) + try { + await new HealthCheckVmBackup({ + restoredVm, + xapi, + }).run() + } finally { + await xapi.VM_destroy(restoredVm.$ref) + } + } + ) + } } diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index e9bde248a..c4b3b98c4 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -12,6 +12,7 @@ > Users must be able to say: “I had this issue, happy to know it's fixed” - [Plugin/auth-saml] Certificate input support multiline (PR [#6403](https://github.com/vatesfr/xen-orchestra/pull/6403)) +- [Backup] Launch Health Check after a full backup (PR [#6401](https://github.com/vatesfr/xen-orchestra/pull/6401)) ### Packages to release