parent
3bb7d2c294
commit
b475b265ae
@ -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,
|
||||
})
|
||||
|
||||
|
@ -140,6 +140,7 @@ declare namespace backup {
|
||||
function importVmBackup(_: {
|
||||
backupId: string
|
||||
remote: Remote
|
||||
settings?: { newMacAddresses?: boolean }
|
||||
srUuid: string
|
||||
xapi: Xapi
|
||||
streamLogs: boolean = false
|
||||
|
@ -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' },
|
||||
|
@ -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
|
||||
|
@ -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',
|
||||
},
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user