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')
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,
})

View File

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

View File

@ -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' },

View File

@ -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

View File

@ -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',
},

View File

@ -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<string> {
async importVmBackupNg(id: string, srId: string, settings): Promise<string> {
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()