mirror of https://github.com/rancher/ui.git
141 lines
3.9 KiB
JavaScript
141 lines
3.9 KiB
JavaScript
import Resource from '@rancher/ember-api-store/models/resource';
|
|
import { get, set, computed } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { all } from 'rsvp';
|
|
|
|
const BETA_ANNOTATION = 'storageclass.beta.kubernetes.io/is-default-class';
|
|
const DEFAULT_ANNOTATION = 'storageclass.kubernetes.io/is-default-class';
|
|
|
|
const PROVISIONERS = [];
|
|
|
|
registerProvisioner('aws-ebs', 'kubernetes.io/aws-ebs', true);
|
|
registerProvisioner('gce-pd', 'kubernetes.io/gce-pd', true);
|
|
registerProvisioner('glusterfs', 'kubernetes.io/glusterfs', true);
|
|
registerProvisioner('cinder', 'kubernetes.io/cinder', true);
|
|
registerProvisioner('vsphere-volume', 'kubernetes.io/vsphere-volume', true);
|
|
registerProvisioner('rbd', 'kubernetes.io/rbd', true);
|
|
registerProvisioner('quobyte', 'kubernetes.io/quobyte', true);
|
|
registerProvisioner('azure-disk', 'kubernetes.io/azure-disk', true);
|
|
registerProvisioner('azure-file', 'kubernetes.io/azure-file', true);
|
|
registerProvisioner('portworx-volume', 'kubernetes.io/portworx-volume', true);
|
|
registerProvisioner('scaleio', 'kubernetes.io/scaleio', true);
|
|
registerProvisioner('storageos', 'kubernetes.io/storageos', true);
|
|
registerProvisioner('longhorn', 'rancher.io/longhorn', true);
|
|
|
|
export function registerProvisioner(name, provisioner, component) {
|
|
if ( component === true ) {
|
|
component = name;
|
|
}
|
|
|
|
const existing = PROVISIONERS.findBy('name', name);
|
|
|
|
if ( existing ) {
|
|
PROVISIONERS.removeObject(existing);
|
|
}
|
|
|
|
PROVISIONERS.push({
|
|
name,
|
|
value: provisioner,
|
|
component,
|
|
});
|
|
}
|
|
|
|
export function getProvisioners() {
|
|
return JSON.parse(JSON.stringify(PROVISIONERS));
|
|
}
|
|
|
|
export default Resource.extend({
|
|
clusterStore: service(),
|
|
router: service(),
|
|
|
|
type: 'storageClass',
|
|
state: 'active',
|
|
|
|
isDefault: computed('annotations', function() {
|
|
const annotations = get(this, 'annotations') || {};
|
|
|
|
return annotations[DEFAULT_ANNOTATION] === 'true' ||
|
|
annotations[BETA_ANNOTATION] === 'true';
|
|
}),
|
|
|
|
availableActions: computed('isDefault', function() {
|
|
const isDefault = get(this, 'isDefault');
|
|
|
|
let out = [
|
|
{
|
|
label: 'action.makeDefault',
|
|
icon: 'icon icon-star-fill',
|
|
action: 'makeDefault',
|
|
enabled: !isDefault
|
|
},
|
|
{
|
|
label: 'action.resetDefault',
|
|
icon: 'icon icon-star-line',
|
|
action: 'resetDefault',
|
|
enabled: isDefault
|
|
},
|
|
];
|
|
|
|
return out;
|
|
}),
|
|
|
|
displayProvisioner: computed('provisioner', 'intl.locale', function() {
|
|
const intl = get(this, 'intl');
|
|
const provisioner = get(this, 'provisioner');
|
|
const entry = PROVISIONERS.findBy('value', provisioner)
|
|
|
|
if ( provisioner && entry ) {
|
|
const key = `storageClass.${ entry.name }.title`;
|
|
|
|
if ( intl.exists(key) ) {
|
|
return intl.t(key);
|
|
}
|
|
}
|
|
|
|
return provisioner;
|
|
}),
|
|
actions: {
|
|
makeDefault() {
|
|
const cur = get(this, 'clusterStore').all('storageClass')
|
|
.filterBy('isDefault', true);
|
|
const promises = [];
|
|
|
|
cur.forEach((sc) => {
|
|
promises.push(sc.setDefault(false));
|
|
});
|
|
|
|
all(promises).then(() => {
|
|
this.setDefault(true);
|
|
});
|
|
},
|
|
|
|
resetDefault() {
|
|
this.setDefault(false)
|
|
},
|
|
|
|
edit() {
|
|
get(this, 'router').transitionTo('authenticated.cluster.storage.classes.detail.edit', get(this, 'id'));
|
|
},
|
|
},
|
|
|
|
setDefault(on) {
|
|
let annotations = get(this, 'annotations');
|
|
|
|
if ( !annotations ) {
|
|
annotations = {};
|
|
set(this, 'annotations', annotations);
|
|
}
|
|
|
|
if ( on ) {
|
|
annotations[DEFAULT_ANNOTATION] = 'true';
|
|
annotations[BETA_ANNOTATION] = 'true';
|
|
} else {
|
|
annotations[DEFAULT_ANNOTATION] = 'false';
|
|
annotations[BETA_ANNOTATION] = 'false';
|
|
}
|
|
|
|
this.save();
|
|
},
|
|
|
|
});
|