mirror of https://github.com/rancher/ui.git
131 lines
4.2 KiB
JavaScript
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 },
|
|
}
|
|
});
|