mirror of https://github.com/rancher/ui.git
200 lines
5.5 KiB
JavaScript
200 lines
5.5 KiB
JavaScript
import Controller from '@ember/controller';
|
|
import {
|
|
get,
|
|
computed,
|
|
set,
|
|
observer,
|
|
setProperties
|
|
} from '@ember/object';
|
|
import { loadStylesheet, proxifyUrl } from 'shared/utils/load-script';
|
|
import { inject as service } from '@ember/service';
|
|
import { alias } from '@ember/object/computed';
|
|
|
|
|
|
export default Controller.extend({
|
|
globalStore: service(),
|
|
intl: service(),
|
|
router: service(),
|
|
|
|
needReloadSchema: false,
|
|
reloadingSchema: false,
|
|
schemaReloaded: false,
|
|
disabledAddCluster: false,
|
|
|
|
clusterTemplateRevisions: alias('model.clusterTemplateRevisions'),
|
|
|
|
reloadSchema: observer('needReloadSchema', function() {
|
|
if ( !this.reloadingSchema && this.needReloadSchema ) {
|
|
set(this, 'reloadingSchema', true);
|
|
|
|
this.globalStore.findAll('schema', {
|
|
url: '/v3/schemas',
|
|
forceReload: true
|
|
}).then(() => {
|
|
setProperties(this, {
|
|
schemaReloaded: true,
|
|
reloadingSchema: false
|
|
});
|
|
});
|
|
}
|
|
}),
|
|
|
|
kontainerDrivers: computed('model.kontainerDrivers.@each.{id,state}', function() {
|
|
const chinaCloud = ['tencentkubernetesengine', 'aliyunkubernetescontainerservice', 'huaweicontainercloudengine'];
|
|
const nope = ['import', 'rancherkubernetesengine'];
|
|
const kDrivers = get(this, 'model.kontainerDrivers') || [];
|
|
const builtIn = kDrivers.filter( (d) => d.state === 'active' && (d.builtIn || chinaCloud.indexOf(d.id) > -1) && !nope.includes(d.id));
|
|
const custom = kDrivers.filter( (d) => d.state === 'active' && !d.builtIn && d.hasUi);
|
|
|
|
return {
|
|
builtIn,
|
|
custom
|
|
}
|
|
}),
|
|
|
|
providerChoices: computed('model.nodeDrivers.{id,state}', 'schemaReloaded', 'intl.locale', 'kontainerDrivers.[]', function() {
|
|
const { kontainerDrivers, intl } = this;
|
|
const { builtIn, custom } = kontainerDrivers;
|
|
|
|
let out = [
|
|
{
|
|
name: 'googlegke',
|
|
driver: 'googlegke',
|
|
kontainerId: 'googlekubernetesengine',
|
|
},
|
|
{
|
|
name: 'amazoneks',
|
|
driver: 'amazoneks',
|
|
kontainerId: 'amazonelasticcontainerservice',
|
|
},
|
|
{
|
|
name: 'azureaks',
|
|
driver: 'azureaks',
|
|
kontainerId: 'azurekubernetesservice',
|
|
},
|
|
{
|
|
name: 'tencenttke',
|
|
driver: 'tencenttke',
|
|
kontainerId: 'tencentkubernetesengine'
|
|
},
|
|
{
|
|
name: 'aliyunkcs',
|
|
driver: 'aliyunkcs',
|
|
kontainerId: 'aliyunkubernetescontainerservice'
|
|
},
|
|
{
|
|
name: 'huaweicce',
|
|
driver: 'huaweicce',
|
|
kontainerId: 'huaweicontainercloudengine'
|
|
},
|
|
];
|
|
|
|
out = out.filter( (o) => builtIn.findBy('id', o.kontainerId) );
|
|
|
|
if (custom.length > 0) {
|
|
custom.forEach( (c) => {
|
|
const { name } = c;
|
|
const configName = `${ name }EngineConfig`;
|
|
const driverEngineSchema = this.globalStore.getById('schema', configName.toLowerCase());
|
|
|
|
if ( driverEngineSchema ) {
|
|
let {
|
|
displayName, name: driver, id: kontainerId, name, genericIcon = true
|
|
} = c;
|
|
|
|
out.pushObject({
|
|
displayName,
|
|
driver,
|
|
kontainerId,
|
|
name,
|
|
genericIcon
|
|
});
|
|
} else {
|
|
set(this, 'needReloadSchema', true);
|
|
}
|
|
});
|
|
}
|
|
|
|
get(this, 'model.nodeDrivers').filterBy('state', 'active').sortBy('name').forEach((driver) => {
|
|
const {
|
|
name, hasUi, hasBuiltinIconOnly: hasIcon, uiUrl
|
|
} = driver;
|
|
const configName = `${ name }Config`;
|
|
const driverSchema = this.globalStore.getById('schema', configName.toLowerCase());
|
|
|
|
if ( uiUrl ) {
|
|
const cssUrl = proxifyUrl(uiUrl.replace(/\.js$/, '.css'), get(this, 'app.proxyEndpoint'));
|
|
|
|
loadStylesheet(cssUrl, `driver-ui-css-${ name }`);
|
|
}
|
|
|
|
|
|
if ( driverSchema ) {
|
|
out.push({
|
|
name,
|
|
driver: 'rke',
|
|
genericIcon: !hasUi && !hasIcon,
|
|
nodeComponent: hasUi ? name : 'generic',
|
|
nodeWhich: name,
|
|
});
|
|
} else {
|
|
set(this, 'needReloadSchema', true);
|
|
}
|
|
}),
|
|
|
|
out.push({
|
|
name: 'custom',
|
|
driver: 'rke',
|
|
nodeWhich: 'custom',
|
|
preSave: true
|
|
});
|
|
|
|
out.push({
|
|
name: 'import',
|
|
driver: 'import',
|
|
preSave: true
|
|
});
|
|
|
|
out.forEach((driver) => {
|
|
const key = `clusterNew.${ driver.name }.label`;
|
|
|
|
if ( !get(driver, 'displayName') && intl.exists(key) ) {
|
|
set(driver, 'displayName', intl.t(key));
|
|
}
|
|
});
|
|
|
|
out.sortBy('name');
|
|
|
|
return out;
|
|
}),
|
|
|
|
providerGroups: computed('providerChoices.@each.{name,driver,nodeComponent,nodeWhich,preSave}', function() {
|
|
const choices = get(this, 'providerChoices');
|
|
const rkeGroup = [];
|
|
const cloudGroup = [];
|
|
const customGroup = [];
|
|
const importGroup = [];
|
|
|
|
choices.forEach((item) => {
|
|
if (get(item, 'driver') === 'rke' && get(item, 'name') !== 'custom') {
|
|
rkeGroup.pushObject(item);
|
|
} else if (get(item, 'driver') === 'import' && get(item, 'name') !== 'custom') {
|
|
importGroup.pushObject(item);
|
|
} else if (get(item, 'name') === 'custom') {
|
|
customGroup.pushObject(item);
|
|
} else {
|
|
cloudGroup.pushObject(item);
|
|
}
|
|
});
|
|
|
|
return {
|
|
cloudGroup: cloudGroup.sortBy('name'),
|
|
customGroup: customGroup.sortBy('name'),
|
|
importGroup: importGroup.sortBy('name'),
|
|
rkeGroup: rkeGroup.sortBy('name'),
|
|
};
|
|
}),
|
|
|
|
|
|
});
|