mirror of https://github.com/rancher/ui.git
162 lines
4.3 KiB
JavaScript
162 lines
4.3 KiB
JavaScript
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import ViewNewEdit from 'shared/mixins/view-new-edit';
|
|
import ChildHook from 'shared/mixins/child-hook';
|
|
import { get, set, setProperties } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { alias } from '@ember/object/computed';
|
|
import Errors from 'ui/utils/errors';
|
|
import { reject } from 'rsvp';
|
|
import C from 'shared/utils/constants';
|
|
|
|
export default Component.extend(ViewNewEdit, ChildHook, {
|
|
globalStore: service(),
|
|
router: service(),
|
|
|
|
layout,
|
|
|
|
classNames: ['horizontal-form', 'container-fluid'],
|
|
|
|
clusterTemplate: null,
|
|
clusterTemplateRevision: null,
|
|
clusterTemplateRevisionId: null,
|
|
errors: null,
|
|
originalCluster: null,
|
|
memberErrors: null,
|
|
nodePoolErrors: null,
|
|
setDefaultTemplateRevision: false,
|
|
mode: 'new',
|
|
|
|
model: alias('clusterTemplate'),
|
|
cluster: alias('clusterTemplateRevision.clusterConfig'),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
set(this, 'originalCluster', get(this, 'clusterTemplateRevision.clusterConfig').clone());
|
|
},
|
|
|
|
actions: {
|
|
updateFromYaml(newOpts) {
|
|
this.cluster.replaceWith(newOpts);
|
|
},
|
|
|
|
addQuestion() {
|
|
const { clusterTemplateRevision } = this;
|
|
let question = this.globalStore.createRecord({ type: 'question' });
|
|
|
|
set(question, 'type', 'string');
|
|
|
|
if (clusterTemplateRevision.questions) {
|
|
clusterTemplateRevision.questions.pushObject(question);
|
|
} else {
|
|
set(clusterTemplateRevision, 'questions', [question]);
|
|
}
|
|
},
|
|
|
|
removeQuestion(question) {
|
|
const { clusterTemplateRevision } = this;
|
|
|
|
clusterTemplateRevision.questions.removeObject(question);
|
|
},
|
|
|
|
addAuthorizedPrincipal(member) {
|
|
let { members = [] } = this.primaryResource;
|
|
|
|
if (!members) {
|
|
members = [];
|
|
}
|
|
|
|
if (member) {
|
|
members.pushObject(this.globalStore.createRecord(member));
|
|
} else {
|
|
members.pushObject(this.globalStore.createRecord({ type: 'member' }));
|
|
}
|
|
|
|
set(this, 'primaryResource.members', members);
|
|
},
|
|
|
|
removeMember(member) {
|
|
let { members } = this.primaryResource;
|
|
|
|
members.removeObject(member);
|
|
},
|
|
|
|
cancel() {
|
|
this.cancel();
|
|
},
|
|
|
|
done() {
|
|
this.done();
|
|
},
|
|
},
|
|
|
|
willSave() {
|
|
set(this, 'clusterTemplateRevision.clusterTemplateId', '__TEMPID__');
|
|
this.validate();
|
|
|
|
// Make sure we add a question for the weave network configuration
|
|
if (this.clusterTemplateRevision && this.clusterTemplateRevision.questions) {
|
|
const allowNetworkOverride = this.clusterTemplateRevision.questions.find((q) => q.variable === C.NETWORK_QUESTIONS.PLUGIN);
|
|
|
|
if (!!allowNetworkOverride) {
|
|
let question = this.clusterTemplateRevision.questions.find((q) => q.variable === C.NETWORK_QUESTIONS.WEAVE_PASSWORD);
|
|
|
|
if (!question) {
|
|
question = this.globalStore.createRecord({
|
|
type: 'question',
|
|
variable: C.NETWORK_QUESTIONS.WEAVE_PASSWORD,
|
|
priamryResource: this.clusterTemplateRevision.clusterConfig,
|
|
});
|
|
|
|
this.clusterTemplateRevision.questions.push(question);
|
|
}
|
|
|
|
setProperties(question, {
|
|
type: 'string',
|
|
default: '',
|
|
hideQuestion: true,
|
|
isBuiltIn: true,
|
|
});
|
|
}
|
|
}
|
|
|
|
return this._super(...arguments);
|
|
},
|
|
|
|
|
|
doneSaving(neu) {
|
|
if (neu) {
|
|
const { clusterTemplateRevision } = this;
|
|
|
|
set(clusterTemplateRevision, 'clusterTemplateId', neu.id);
|
|
|
|
return this.clusterTemplateRevision.save().then((ctr) => {
|
|
if (this.setDefaultTemplateRevision) {
|
|
set(neu, 'defaultRevisionId', get(ctr, 'id'));
|
|
|
|
return neu.save().then(() => {
|
|
return this.send('done');
|
|
}).catch((err) => {
|
|
if (err) {
|
|
let body = Errors.stringify(err);
|
|
|
|
set(this, 'errors', [body]);
|
|
} else {
|
|
set(this, 'errors', null);
|
|
}
|
|
|
|
return false;
|
|
});
|
|
}
|
|
|
|
return this.send('done');
|
|
}).catch((err) => {
|
|
return reject(err);
|
|
});
|
|
} else {
|
|
return reject();
|
|
}
|
|
},
|
|
});
|