diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index c7edb77d3..16edb2307 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -10,6 +10,7 @@ - [VM/Snapshots] Always delete broken quiesced snapshots [#4074](https://github.com/vatesfr/xen-orchestra/issues/4074) (PR [#4075](https://github.com/vatesfr/xen-orchestra/pull/4075)) - [Settings/Servers] Display link to pool [#4041](https://github.com/vatesfr/xen-orchestra/issues/4041) (PR [#4045](https://github.com/vatesfr/xen-orchestra/pull/4045)) - [Import] Change wording of drop zone (PR [#4020](https://github.com/vatesfr/xen-orchestra/pull/4020)) +- [Backup NG] Ability to set the interval of the full backups [#1783](https://github.com/vatesfr/xen-orchestra/issues/1783) (PR [#4083](https://github.com/vatesfr/xen-orchestra/pull/4083)) ### Bug fixes diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index c6c01a9dc..cfb8fc38b 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -443,6 +443,7 @@ const messages = { offlineSnapshotInfo: 'Shutdown VMs before snapshotting them', timeout: 'Timeout', timeoutInfo: 'Number of hours after which a job is considered failed', + fullBackupInterval: 'Full backup interval', timeoutUnit: 'in hours', dbAndDrRequireEnterprisePlan: 'Delta Backup and DR require Enterprise plan', crRequiresPremiumPlan: 'CR requires Premium plan', diff --git a/packages/xo-web/src/xo-app/backup-ng/_getSettingsWithNonDefaultValue.js b/packages/xo-web/src/xo-app/backup-ng/_getSettingsWithNonDefaultValue.js index 2d0485628..707621c49 100644 --- a/packages/xo-web/src/xo-app/backup-ng/_getSettingsWithNonDefaultValue.js +++ b/packages/xo-web/src/xo-app/backup-ng/_getSettingsWithNonDefaultValue.js @@ -5,6 +5,7 @@ const DEFAULTS = { compression: '', concurrency: 0, + fullInterval: 0, offlineSnapshot: false, timeout: 0, } diff --git a/packages/xo-web/src/xo-app/backup-ng/index.js b/packages/xo-web/src/xo-app/backup-ng/index.js index ede04b2a4..cb757acc1 100644 --- a/packages/xo-web/src/xo-app/backup-ng/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/index.js @@ -249,6 +249,7 @@ class JobsTable extends React.Component { const { compression, concurrency, + fullInterval, offlineSnapshot, reportWhen, timeout, @@ -268,6 +269,9 @@ class JobsTable extends React.Component { {timeout !== undefined && (
  • {_.keyValue(_('timeout'), timeout / 3600e3)} hours
  • )} + {fullInterval !== undefined && ( +
  • {_.keyValue(_('fullBackupInterval'), fullInterval)}
  • + )} {offlineSnapshot !== undefined && (
  • {_.keyValue( diff --git a/packages/xo-web/src/xo-app/backup-ng/new/index.js b/packages/xo-web/src/xo-app/backup-ng/new/index.js index 431c4b0e4..789b7ae80 100644 --- a/packages/xo-web/src/xo-app/backup-ng/new/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/new/index.js @@ -520,6 +520,12 @@ export default decorate([ value: value && value * 3600e3, }) }, + setFullInterval({ setGlobalSettings }, value) { + setGlobalSettings({ + name: 'fullInterval', + value, + }) + }, setOfflineSnapshot: ( { setGlobalSettings }, { target: { checked: value } } @@ -534,6 +540,7 @@ export default decorate([ compressionId: generateId, formId: generateId, inputConcurrencyId: generateId, + inputFullIntervalId: generateId, inputReportWhenId: generateId, inputTimeoutId: generateId, @@ -631,9 +638,14 @@ export default decorate([ ({ state, effects, remotes, srsById, job = {}, intl }) => { const { formatMessage } = intl const { propSettings, settings = propSettings } = state - const { concurrency, reportWhen = 'failure', offlineSnapshot, timeout } = - settings.get('') || {} const compression = defined(state.compression, job.compression, '') + const { + concurrency, + fullInterval, + offlineSnapshot, + reportWhen = 'failure', + timeout, + } = settings.get('') || {} if (state.needUpdateParams) { effects.updateParams() @@ -923,6 +935,16 @@ export default decorate([ placeholder={formatMessage(messages.timeoutUnit)} /> + + {' '} + + {state.isFull && (