feat(xo-web/restore): support new mac addresses (#5697)

This commit is contained in:
Mathieu 2021-03-30 17:48:45 +02:00 committed by GitHub
parent 7c9850ada8
commit f9b3a1f293
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 6 deletions

View File

@ -7,6 +7,7 @@
- [Host/Load-balancer] Add a new anti-affinity mode (PR [#5652](https://github.com/vatesfr/xen-orchestra/pull/5652))
- [Plugins/perf-alert] Ability to choose all hosts, VMs and SRs [#2987](https://github.com/vatesfr/xen-orchestra/issues/2987) (PR [#5692](https://github.com/vatesfr/xen-orchestra/pull/5692))
- [Backup restore] Ability to generate new MAC addresses (PR [#5697](https://github.com/vatesfr/xen-orchestra/pull/5697))
### Bug fixes

View File

@ -12,6 +12,7 @@ const messages = {
errorPageNotFound: 'Page not found',
errorNoSuchItem: 'No such item',
errorUnknownItem: 'Unknown {type}',
generateNewMacAddress: 'Generate new MAC addresses',
memoryFree: '{memoryFree} RAM free',
utcDate: 'UTC date',
utcTime: 'UTC time',

View File

@ -2017,9 +2017,10 @@ export const runBackupNgJob = ({ force, ...params }) => {
export const listVmBackups = remotes => _call('backupNg.listVmBackups', { remotes: resolveIds(remotes) })
export const restoreBackup = (backup, sr, startOnRestore) => {
export const restoreBackup = (backup, sr, { generateNewMacAddresses = false, startOnRestore = false } = {}) => {
const promise = _call('backupNg.importVmBackup', {
id: resolveId(backup),
settings: { newMacAddresses: generateNewMacAddresses },
sr: resolveId(sr),
})

View File

@ -186,13 +186,13 @@ export default class Restore extends Component {
body: <RestoreBackupsModalBody data={data} />,
icon: 'restore',
})
.then(({ backup, sr, start }) => {
.then(({ backup, generateNewMacAddresses, sr, start }) => {
if (backup == null || sr == null) {
error(_('backupRestoreErrorTitle'), _('backupRestoreErrorMessage'))
return
}
return restoreBackup(backup, sr, start)
return restoreBackup(backup, sr, { generateNewMacAddresses, startOnRestore: start })
}, noop)
.then(() => this._refreshBackupList())
@ -211,14 +211,16 @@ export default class Restore extends Component {
body: <RestoreBackupsBulkModalBody datas={datas} />,
icon: 'restore',
})
.then(({ sr, latest, start }) => {
.then(({ sr, generateNewMacAddresses, latest, start }) => {
if (sr == null) {
error(_('restoreVmBackupsBulkErrorTitle', 'restoreVmBackupsBulkErrorMessage'))
return
}
const prop = latest ? 'last' : 'first'
return Promise.all(map(datas, data => restoreBackup(data[prop], sr, start)))
return Promise.all(
map(datas, data => restoreBackup(data[prop], sr, { generateNewMacAddresses, startOnRestore: start }))
)
}, noop)
.then(() => this._refreshBackupList())

View File

@ -9,6 +9,8 @@ import { SelectSr } from 'select-objects'
const BACKUP_RENDERER = getRenderXoItemOfType('backup')
export default class RestoreBackupsModalBody extends Component {
state = { generateNewMacAddresses: true }
get value() {
return this.state
}
@ -29,13 +31,21 @@ export default class RestoreBackupsModalBody extends Component {
<div>
<Toggle iconSize={1} onChange={this.linkState('start')} /> {_('restoreVmBackupsStart', { nVms: 1 })}
</div>
<div>
<Toggle
iconSize={1}
value={this.state.generateNewMacAddresses}
onChange={this.toggleState('generateNewMacAddresses')}
/>{' '}
{_('generateNewMacAddress')}
</div>
</div>
)
}
}
export class RestoreBackupsBulkModalBody extends Component {
state = { latest: true }
state = { generateNewMacAddresses: true, latest: true }
get value() {
return this.state
@ -65,6 +75,14 @@ export class RestoreBackupsBulkModalBody extends Component {
<Toggle iconSize={1} onChange={this.linkState('start')} />{' '}
{_('restoreVmBackupsStart', { nVms: datas.length })}
</div>
<div>
<Toggle
iconSize={1}
value={this.state.generateNewMacAddresses}
onChange={this.toggleState('generateNewMacAddresses')}
/>{' '}
{_('generateNewMacAddress')}
</div>
</div>
)
}