ui/lib/global-admin/addon/clusters/new/launch/route.js

131 lines
4.2 KiB
JavaScript

import Route from '@ember/routing/route';
import { hash } from 'rsvp';
import { inject as service } from '@ember/service';
import { get, set, setProperties } from '@ember/object';
import { isEmpty } from '@ember/utils';
export default Route.extend({
globalStore: service(),
access: service(),
settings: service(),
roleTemplateService: service('roleTemplate'),
clusterTemplateService: service('clusterTemplates'),
_cachedClusterDetails: null,
beforeModel(transition) {
let { me: { hasAdmin: globalAdmin = false } } = this.access;
if (!globalAdmin) {
const { clusterTemplates } = this.modelFor('clusters.new');
let { clusterTemplateEnforcement = false } = this.settings;
// setting is string value
if (clusterTemplateEnforcement === 'true') {
clusterTemplateEnforcement = true;
} else {
clusterTemplateEnforcement = false;
}
if (clusterTemplateEnforcement) {
if (clusterTemplates.length === 1 && isEmpty(transition.to.params.clusterTemplateRevision)) {
return this.replaceWith(this.routeName, transition.to.params.provider, { queryParams: { clusterTemplateRevision: clusterTemplates.firstObject.defaultRevisionId } });
}
}
}
return;
},
model(params) {
const gs = this.globalStore;
const {
kontainerDrivers,
nodeDrivers,
clusterTemplates,
clusterTemplateRevisions
} = this.modelFor('clusters.new');
const { provider, clusterTemplateRevision } = params;
let cluster = gs.createRecord({
type: 'cluster',
name: ''
});
let ctr = null;
let ct = null;
let ctId = null;
ctr = clusterTemplateRevisions.findBy('id', clusterTemplateRevision);
if (clusterTemplateRevision && ctr) {
ctId = get(ctr, 'clusterTemplateId');
ct = clusterTemplates.findBy('id', ctId);
setProperties(cluster, {
clusterTemplateRevisionId: clusterTemplateRevision,
clusterTemplateId: get(ct, 'id'),
});
this.clusterTemplateService.cloneAndPopulateClusterConfig(cluster, ctr);
} else {
if (cluster.clusterTemplateId && cluster.clusterTemplateRevisionId && !clusterTemplateRevision) {
// user deselected RKE Template
setProperties(cluster, {
clusterTemplateId: null,
clusterTemplateRevisionId: null,
});
}
}
if (this._cachedClusterDetails) {
set(cluster, 'name', this._cachedClusterDetails.name);
set(this, '_cachedClusterDetails', null);
}
return hash({
cluster,
kontainerDrivers,
nodeDrivers,
provider,
clusterTemplateRevision: ctr,
roleTemplates: get(this, 'roleTemplateService').fetchFilteredRoleTemplates(),
me: get(this, 'access.principal'),
cloudCredentials: gs.findAll('cloudcredential'),
clusterRoleTemplateBinding: gs.findAll('clusterRoleTemplateBinding'),
psacs: gs.findAll('podSecurityAdmissionConfigurationTemplate'),
users: gs.findAll('user'),
clusterTemplates,
clusterTemplateRevisions
});
},
resetController(controller, isExiting, transition) {
if (isExiting && transition.targetName !== 'error') {
controller.setProperties({
clusterTemplateRevision: null,
importProvider: null,
register: false,
});
}
},
actions: {
willTransition(transition) {
if (transition.queryParamsOnly) {
let name = this.controller.model.cluster.name ? this.controller.model.cluster.name : null;
set(this, '_cachedClusterDetails', { name });
} else {
if (this._cachedClusterDetails) {
set(this, '_cachedClusterDetails', null);
}
}
}
},
queryParams: {
clusterTemplateRevision: { refreshModel: true },
importProvider: { refreshModel: true },
}
});