ui/app/components/modal-restore-backup/component.js

107 lines
3.1 KiB
JavaScript

import { inject as service } from '@ember/service';
import {
get, set, setProperties, computed, observer
} from '@ember/object';
import Component from '@ember/component';
import ModalBase from 'shared/mixins/modal-base';
import layout from './template';
import moment from 'moment';
export default Component.extend(ModalBase, {
intl: service(),
growl: service(),
layout,
classNames: ['large-modal'],
backupId: null,
restoreRkeConfig: null,
loadingBackups: false,
k8sVersionRadioDisabled: computed.or('k8sVersionDisabled', 'restorationTypeDisabled'),
restorationTypeDisabled: computed.not('selectedBackup'),
init() {
this._super(...arguments);
this.initOwnProperties();
this.fetchAllBackupsForCluster();
},
actions: {
restore() {
const { backupId, restoreRkeConfig } = this;
const out = {};
if (backupId) {
set(out, 'etcdBackupId', backupId);
if (restoreRkeConfig !== 'etcd') {
set(out, 'restoreRkeConfig', restoreRkeConfig);
}
this.modalOpts.cluster.doAction('restoreFromEtcdBackup', out).then(() => {
this.send('cancel');
});
} else {
this.growl.fromError(this.intl.t('modalRestoreBackup.error'));
}
}
},
updateRestoreRkeConfig: observer('backupId', function() {
const value = this.backupId ? 'etcd' : '';
set(this, 'restoreRkeConfig', value);
}),
availableBackups: computed('modalOpts.cluster.etcdbackups.[]', function() {
return get(this, 'modalOpts.cluster.etcdbackups').map((backup) => {
let time = moment(get(backup, 'created'));
const hyphenatedVersion = backup.status.kubernetesVersion
? ` - ${ backup.status.kubernetesVersion }`
: '';
return {
id: backup.id,
label: `${ backup.displayName } (${ time.format('MMMM Do YYYY, H:mm:ss') })${ hyphenatedVersion }`,
created: backup.created,
state: backup.state,
}
}).sortBy('created').reverse();
}),
selectedBackup: computed('modalOpts.cluster.etcdbackups.[]', 'backupId', function() {
const backupId = this.backupId;
return !backupId ? null : get(this, 'modalOpts.cluster.etcdbackups').findBy('id', backupId);
}),
selectedVersion: computed('selectedBackup.status.kubernetesVersion', function() {
return get(this, 'selectedBackup.status.kubernetesVersion') || this.intl.t('modalRestoreBackup.type.versionUnknown');
}),
k8sVersionDisabled: computed('selectedVersion', 'restorationTypeDisabled', function() {
return !this.restorationTypeDisabled && this.selectedVersion === this.intl.t('modalRestoreBackup.type.versionUnknown');
}),
initOwnProperties() {
const backupId = this.modalOpts.selection ? this.modalOpts.selection.id : '';
const restoreRkeConfig = backupId ? 'etcd' : '';
setProperties(this, {
backupId,
restoreRkeConfig,
errors: [],
});
},
fetchAllBackupsForCluster() {
set(this, 'loadingBackups', true);
this.modalOpts.cluster.store.findAll('etcdbackup')
.finally(() => {
set(this, 'loadingBackups', false);
});
},
});