feat(import VM backup): newMacAddresses setting

Related to #5697
This commit is contained in:
Julien Fontanet 2021-03-30 14:30:29 +02:00
parent 3bb7d2c294
commit b475b265ae
6 changed files with 16 additions and 6 deletions

View File

@ -5,8 +5,9 @@ const { importDeltaVm } = require('./_deltaVm')
const { Task } = require('./Task') const { Task } = require('./Task')
exports.ImportVmBackup = class ImportVmBackup { exports.ImportVmBackup = class ImportVmBackup {
constructor({ adapter, metadata, srUuid, xapi }) { constructor({ adapter, metadata, srUuid, xapi, settings: { newMacAddresses } = {} }) {
this._adapter = adapter this._adapter = adapter
this._importDeltaVmSettings = { newMacAddresses }
this._metadata = metadata this._metadata = metadata
this._srUuid = srUuid this._srUuid = srUuid
this._xapi = xapi this._xapi = xapi
@ -37,6 +38,7 @@ exports.ImportVmBackup = class ImportVmBackup {
const vmRef = isFull const vmRef = isFull
? await xapi.VM_import(backup, srRef) ? await xapi.VM_import(backup, srRef)
: await importDeltaVm(backup, await xapi.getRecord('SR', srRef), { : await importDeltaVm(backup, await xapi.getRecord('SR', srRef), {
...this._importDeltaVmSettings,
detectBase: false, detectBase: false,
}) })

View File

@ -140,6 +140,7 @@ declare namespace backup {
function importVmBackup(_: { function importVmBackup(_: {
backupId: string backupId: string
remote: Remote remote: Remote
settings?: { newMacAddresses?: boolean }
srUuid: string srUuid: string
xapi: Xapi xapi: Xapi
streamLogs: boolean = false streamLogs: boolean = false

View File

@ -177,10 +177,10 @@ export default class Backups {
}, },
], ],
importVmBackup: [ 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) => { Disposable.use(this.getAdapter(remote), this.getXapi(xapiOpts), async (adapter, xapi) => {
const metadata = await adapter.readVmBackupMetadata(backupId) 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 return streamLogs
? runWithLogs( ? runWithLogs(
async (args, onLog) => async (args, onLog) =>
@ -205,6 +205,7 @@ export default class Backups {
params: { params: {
backupId: { type: 'string' }, backupId: { type: 'string' },
remote: { type: 'object' }, remote: { type: 'object' },
settings: { type: 'object' },
srUuid: { type: 'string' }, srUuid: { type: 'string' },
streamLogs: { type: 'boolean', optional: true }, streamLogs: { type: 'boolean', optional: true },
xapi: { type: 'object' }, xapi: { type: 'object' },

View File

@ -25,4 +25,5 @@
> In case of conflict, the highest (lowest in previous list) `$version` wins. > In case of conflict, the highest (lowest in previous list) `$version` wins.
- @xen-orchestra/xapi minor - @xen-orchestra/xapi minor
- @xen-orchestra/backups minor
- xo-server patch - xo-server patch

View File

@ -247,8 +247,8 @@ listVmBackups.params = {
}, },
} }
export function importVmBackup({ id, sr }) { export function importVmBackup({ id, settings, sr }) {
return this.importVmBackupNg(id, sr) return this.importVmBackupNg(id, sr, settings)
} }
importVmBackup.permission = 'admin' importVmBackup.permission = 'admin'
@ -257,6 +257,9 @@ importVmBackup.params = {
id: { id: {
type: 'string', type: 'string',
}, },
settings: {
type: 'object',
},
sr: { sr: {
type: 'string', type: 'string',
}, },

View File

@ -447,7 +447,7 @@ export default class BackupNg {
// ├─ task.start(message: 'transfer') // ├─ task.start(message: 'transfer')
// │ └─ task.end(result: { id: string, size: number }) // │ └─ task.end(result: { id: string, size: number })
// └─ task.end // └─ task.end
async importVmBackupNg(id: string, srId: string): Promise<string> { async importVmBackupNg(id: string, srId: string, settings): Promise<string> {
const app = this._app const app = this._app
const xapi = app.getXapi(srId) const xapi = app.getXapi(srId)
const sr = xapi.getObject(srId) const sr = xapi.getObject(srId)
@ -469,6 +469,7 @@ export default class BackupNg {
url: remote.url, url: remote.url,
options: remote.options, options: remote.options,
}, },
settings,
srUuid: sr.uuid, srUuid: sr.uuid,
streamLogs: true, streamLogs: true,
xapi: { xapi: {
@ -530,6 +531,7 @@ export default class BackupNg {
new ImportVmBackup({ new ImportVmBackup({
adapter, adapter,
metadata, metadata,
settings,
srUuid: srId, srUuid: srId,
xapi: await app.getXapi(srId), xapi: await app.getXapi(srId),
}).run() }).run()