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)) - [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)) - [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 ### Bug fixes

View File

@ -12,6 +12,7 @@ const messages = {
errorPageNotFound: 'Page not found', errorPageNotFound: 'Page not found',
errorNoSuchItem: 'No such item', errorNoSuchItem: 'No such item',
errorUnknownItem: 'Unknown {type}', errorUnknownItem: 'Unknown {type}',
generateNewMacAddress: 'Generate new MAC addresses',
memoryFree: '{memoryFree} RAM free', memoryFree: '{memoryFree} RAM free',
utcDate: 'UTC date', utcDate: 'UTC date',
utcTime: 'UTC time', 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 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', { const promise = _call('backupNg.importVmBackup', {
id: resolveId(backup), id: resolveId(backup),
settings: { newMacAddresses: generateNewMacAddresses },
sr: resolveId(sr), sr: resolveId(sr),
}) })

View File

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

View File

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