From b475b265aec7c0ca317f6cb5accb372fe6415f9e Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Tue, 30 Mar 2021 14:30:29 +0200 Subject: [PATCH] feat(import VM backup): newMacAddresses setting Related to #5697 --- @xen-orchestra/backups/ImportVmBackup.js | 4 +++- @xen-orchestra/proxy/docs/api.md | 1 + @xen-orchestra/proxy/src/app/mixins/backups/index.js | 5 +++-- CHANGELOG.unreleased.md | 1 + packages/xo-server/src/api/backup-ng.js | 7 +++++-- packages/xo-server/src/xo-mixins/backups-ng/index.js | 4 +++- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/@xen-orchestra/backups/ImportVmBackup.js b/@xen-orchestra/backups/ImportVmBackup.js index 57c09813b..761b15d5d 100644 --- a/@xen-orchestra/backups/ImportVmBackup.js +++ b/@xen-orchestra/backups/ImportVmBackup.js @@ -5,8 +5,9 @@ const { importDeltaVm } = require('./_deltaVm') const { Task } = require('./Task') exports.ImportVmBackup = class ImportVmBackup { - constructor({ adapter, metadata, srUuid, xapi }) { + constructor({ adapter, metadata, srUuid, xapi, settings: { newMacAddresses } = {} }) { this._adapter = adapter + this._importDeltaVmSettings = { newMacAddresses } this._metadata = metadata this._srUuid = srUuid this._xapi = xapi @@ -37,6 +38,7 @@ exports.ImportVmBackup = class ImportVmBackup { const vmRef = isFull ? await xapi.VM_import(backup, srRef) : await importDeltaVm(backup, await xapi.getRecord('SR', srRef), { + ...this._importDeltaVmSettings, detectBase: false, }) diff --git a/@xen-orchestra/proxy/docs/api.md b/@xen-orchestra/proxy/docs/api.md index 901272840..c43cc40d6 100644 --- a/@xen-orchestra/proxy/docs/api.md +++ b/@xen-orchestra/proxy/docs/api.md @@ -140,6 +140,7 @@ declare namespace backup { function importVmBackup(_: { backupId: string remote: Remote + settings?: { newMacAddresses?: boolean } srUuid: string xapi: Xapi streamLogs: boolean = false diff --git a/@xen-orchestra/proxy/src/app/mixins/backups/index.js b/@xen-orchestra/proxy/src/app/mixins/backups/index.js index cda250561..e51590549 100644 --- a/@xen-orchestra/proxy/src/app/mixins/backups/index.js +++ b/@xen-orchestra/proxy/src/app/mixins/backups/index.js @@ -177,10 +177,10 @@ export default class Backups { }, ], importVmBackup: [ - defer(($defer, { backupId, remote, srUuid, streamLogs = false, xapi: xapiOpts }) => + defer(($defer, { backupId, remote, srUuid, settings, streamLogs = false, xapi: xapiOpts }) => Disposable.use(this.getAdapter(remote), this.getXapi(xapiOpts), async (adapter, xapi) => { const metadata = await adapter.readVmBackupMetadata(backupId) - const run = () => new ImportVmBackup({ adapter, metadata, srUuid, xapi }).run() + const run = () => new ImportVmBackup({ adapter, metadata, settings, srUuid, xapi }).run() return streamLogs ? runWithLogs( async (args, onLog) => @@ -205,6 +205,7 @@ export default class Backups { params: { backupId: { type: 'string' }, remote: { type: 'object' }, + settings: { type: 'object' }, srUuid: { type: 'string' }, streamLogs: { type: 'boolean', optional: true }, xapi: { type: 'object' }, diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 3c1517eb5..305d02170 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -25,4 +25,5 @@ > In case of conflict, the highest (lowest in previous list) `$version` wins. - @xen-orchestra/xapi minor +- @xen-orchestra/backups minor - xo-server patch diff --git a/packages/xo-server/src/api/backup-ng.js b/packages/xo-server/src/api/backup-ng.js index 2366fcbc9..dfba6391e 100644 --- a/packages/xo-server/src/api/backup-ng.js +++ b/packages/xo-server/src/api/backup-ng.js @@ -247,8 +247,8 @@ listVmBackups.params = { }, } -export function importVmBackup({ id, sr }) { - return this.importVmBackupNg(id, sr) +export function importVmBackup({ id, settings, sr }) { + return this.importVmBackupNg(id, sr, settings) } importVmBackup.permission = 'admin' @@ -257,6 +257,9 @@ importVmBackup.params = { id: { type: 'string', }, + settings: { + type: 'object', + }, sr: { type: 'string', }, diff --git a/packages/xo-server/src/xo-mixins/backups-ng/index.js b/packages/xo-server/src/xo-mixins/backups-ng/index.js index c6b179b86..7e4e79c88 100644 --- a/packages/xo-server/src/xo-mixins/backups-ng/index.js +++ b/packages/xo-server/src/xo-mixins/backups-ng/index.js @@ -447,7 +447,7 @@ export default class BackupNg { // ├─ task.start(message: 'transfer') // │ └─ task.end(result: { id: string, size: number }) // └─ task.end - async importVmBackupNg(id: string, srId: string): Promise { + async importVmBackupNg(id: string, srId: string, settings): Promise { const app = this._app const xapi = app.getXapi(srId) const sr = xapi.getObject(srId) @@ -469,6 +469,7 @@ export default class BackupNg { url: remote.url, options: remote.options, }, + settings, srUuid: sr.uuid, streamLogs: true, xapi: { @@ -530,6 +531,7 @@ export default class BackupNg { new ImportVmBackup({ adapter, metadata, + settings, srUuid: srId, xapi: await app.getXapi(srId), }).run()