ui/lib/shared/addon/components/cru-cluster/component.js

145 lines
3.8 KiB
JavaScript

import Component from '@ember/component';
import { get, set, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import ViewNewEdit from 'shared/mixins/view-new-edit';
import ChildHook from 'shared/mixins/child-hook';
import { alias } from '@ember/object/computed';
import layout from './template';
const MEMBER_CONFIG = {
type: 'clusterRoleTemplateBinding',
};
export default Component.extend(ViewNewEdit, ChildHook, {
layout,
globalStore: service(),
intl: service(),
access: service(),
cluster: alias('model.cluster'),
originalCluster: alias('model.originalCluster'),
primaryResource: alias('model.cluster'),
step: 1,
initialProvider: null,
memberConfig: MEMBER_CONFIG,
init() {
this._super(...arguments);
// On edit pass in initialProvider, for create just set provider directly
const initialProvider = get(this, 'initialProvider');
if ( initialProvider ) {
set(this, 'provider', initialProvider);
}
// if ( get(this, 'cluster.id') && initialProvider ){
// set(this,'step', 2);
// }
},
actions: {
clickNext() {
this.$('BUTTON[type="submit"]').click();
},
close() {
this.sendAction('close');
},
},
providerChoices: computed(
'isEdit',
'cluster.rancherKubernetesEngineConfig',
'nodeDrivers.[]',
'intl.locale',
function() {
const intl = get(this, 'intl');
let out = [
{name: 'googlegke', driver: 'googlegke'},
{name: 'amazoneks', driver: 'amazoneks'},
{name: 'azureaks', driver: 'azureaks'},
];
get(this, 'model.nodeDrivers').filterBy('active',true).sortBy('name').forEach((driver) => {
const name = get(driver, 'name');
const hasUi = get(driver, 'hasUi');
out.push({
name: name,
driver: 'rke',
nodeComponent: hasUi ? name : 'generic',
nodeWhich: name,
});
}),
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));
}
});
if ( get(this, 'isEdit') && get(this, 'cluster.rancherKubernetesEngineConfig') ) {
out = out.filterBy('driver','rke');
}
return out;
}),
providerGroups: computed('providerChoices.@each.{name,driver,nodeComponent,nodeWhich,preSave}', function() {
const choices = get(this, 'providerChoices');
const group = [];
let groupIndex = 0;
choices.forEach((item, index) => {
if (index % 6 === 0) {
group.push([item]);
groupIndex++;
} else {
group[groupIndex - 1].push(item);
}
});
return group;
}),
driverInfo: computed('provider', function() {
const name = get(this, 'provider');
const choices = get(this, 'providerChoices');
const entry = choices.findBy('name', name);
if ( entry ) {
return {
name: entry.name,
driverComponent: `cluster-driver/driver-${entry.driver}`,
nodeWhich: entry.nodeWhich,
preSave: !!entry.preSave,
};
}
}),
didSave() {
const originalCluster = get(this, 'cluster');
return originalCluster.waitForCondition('BackingNamespaceCreated').then(() => {
return this.applyHooks().then(() => {
const clone = originalCluster.clone();
set(this, 'cluster', clone);
set(this, 'originalCluster', originalCluster);
return clone;
});
});
},
doneSaving() {
if ( get(this, 'step') === 1 && get(this, 'driverInfo.preSave') ) {
set(this, 'step', 2);
set(this, 'initialProvider', get(this, 'provider'));
} else {
this.sendAction('close');
}
},
});