mirror of https://github.com/rancher/ui.git
default template version support in infra
This commit is contained in:
parent
c246628457
commit
470f4607f3
|
|
@ -6,6 +6,7 @@ export default ModalBase.extend({
|
|||
|
||||
serviceChoices: Ember.computed.alias('modalService.modalOpts.serviceChoices'),
|
||||
originalModel: Ember.computed.alias('modalService.modalOpts.originalModel'),
|
||||
selectedTemplateUrl: Ember.computed.alias('modalService.modalOpts.selectedTemplateUrl'),
|
||||
|
||||
model: null,
|
||||
|
||||
|
|
@ -26,7 +27,7 @@ export default ModalBase.extend({
|
|||
stack: orig.get('stack').clone(),
|
||||
serviceChoices: this.get('serviceChoices'),
|
||||
tpl: tpl,
|
||||
currentUrl: orig.get('tplVersion.links.self'),
|
||||
currentUrl: this.get('selectedTemplateUrl')||orig.get('tplVersion.links.self'),
|
||||
versionLinks: links,
|
||||
versionsArray: verArr,
|
||||
};
|
||||
|
|
@ -35,16 +36,17 @@ export default ModalBase.extend({
|
|||
}.on('init'),
|
||||
|
||||
actions: {
|
||||
doSave(templateId, newStack, tpl) {
|
||||
doSave(opt) {
|
||||
let orig = this.get('originalModel');
|
||||
let stack = orig.get('stack');
|
||||
stack.merge(newStack);
|
||||
|
||||
orig.setProperties({
|
||||
enabled: true,
|
||||
stack: stack,
|
||||
tplVersion: tpl,
|
||||
stack.setProperties({
|
||||
templateId: opt.templateId,
|
||||
templateVersionId: opt.templateVersionId,
|
||||
answers: opt.answers
|
||||
});
|
||||
|
||||
orig.set('enabled', true);
|
||||
this.send('cancel');
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
serviceChoices=serviceChoices
|
||||
stackResource=model.stack
|
||||
templateResource=model.tpl
|
||||
selectedTemplateUrl=currentUrl
|
||||
selectedTemplateUrl=selectedTemplateUrl
|
||||
versionLinks=model.versionLinks
|
||||
versionsArray=model.versionsArray
|
||||
cancel=(action "cancel")
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
editing=true
|
||||
showHeader=false
|
||||
showPreview=false
|
||||
showDefaultVersionOption=true
|
||||
titleUpgrade='newCatalog.titleConfigure'
|
||||
selectVersionUpgrade='newCatalog.selectVersionConfigure'
|
||||
saveUpgrade='newCatalog.saveConfigure'
|
||||
|
|
|
|||
|
|
@ -64,9 +64,15 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
},
|
||||
|
||||
enableStack(obj) {
|
||||
let url = 'default';
|
||||
if ( obj.stack.templateVersionId ) {
|
||||
url = null;
|
||||
}
|
||||
|
||||
this.get('modalService').toggleModal('catalog-configure', {
|
||||
serviceChoices: this.get('serviceChoices'),
|
||||
originalModel: obj,
|
||||
selectedTemplateUrl: url
|
||||
});
|
||||
},
|
||||
|
||||
|
|
@ -106,13 +112,7 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
enabled: true,
|
||||
compatible: null,
|
||||
tpl: tpl,
|
||||
stack: this.get('store').createRecord({
|
||||
type: 'stack',
|
||||
name: cur.get('name'),
|
||||
description: cur.get('description'),
|
||||
environment: cur.get('answers'),
|
||||
templateVersionId: cur.get('externalId'),
|
||||
}),
|
||||
stack: cur.clone(),
|
||||
});
|
||||
} else {
|
||||
map[tplId] = Ember.Object.create({
|
||||
|
|
@ -121,9 +121,10 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
tpl: tpl,
|
||||
compatible: null,
|
||||
stack: this.get('store').createRecord({
|
||||
type: 'stack',
|
||||
type: 'catalogTemplate',
|
||||
name: tpl.get('defaultName'),
|
||||
environment: {},
|
||||
answers: {},
|
||||
templateId: tplId,
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
|
@ -203,29 +204,6 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
return drivers;
|
||||
}.property('activeOrchestration'),
|
||||
|
||||
applyDefaultTemplateVersions() {
|
||||
let promises = [];
|
||||
let map = this.get('stacksMap');
|
||||
Object.keys(map).forEach((key) => {
|
||||
let stack = map[key];
|
||||
if ( stack && stack.get('enabled') && !stack.get('tplVersion') ) {
|
||||
let tpl = stack.get('tpl');
|
||||
let version = tpl.defaultVersion;
|
||||
if ( tpl.versionLinks[version] ) {
|
||||
promises.push(
|
||||
this.get('store').request({url: tpl.versionLinks[version]}).then((tplVersion) => {
|
||||
stack.set('tplVersion', tplVersion);
|
||||
})
|
||||
);
|
||||
} else {
|
||||
console.warn('No default template for ' + tpl.id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return Ember.RSVP.all(promises);
|
||||
},
|
||||
|
||||
willSave() {
|
||||
let intl = this.get('intl');
|
||||
|
||||
|
|
@ -234,58 +212,50 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
return out;
|
||||
}
|
||||
|
||||
return this.applyDefaultTemplateVersions().then(() => {
|
||||
let map = this.get('stacksMap');
|
||||
let orch = this.get('activeOrchestration');
|
||||
let ok = true;
|
||||
let map = this.get('stacksMap');
|
||||
let orch = this.get('activeOrchestration');
|
||||
let ok = true;
|
||||
|
||||
Object.keys(map).forEach((key) => {
|
||||
let obj = map[key];
|
||||
let tpl = obj.get('tpl');
|
||||
if ( obj.enabled && !tpl.supportsOrchestration(orch) ) {
|
||||
this.get('growl').error(
|
||||
intl.t('editProjectTemplate.error.conflict'),
|
||||
intl.t('editProjectTemplate.error.enabling', {
|
||||
tplCategory: tpl.get('category'),
|
||||
stackName: tpl.get('name'),
|
||||
orchestration: Util.ucFirst(orch),
|
||||
})
|
||||
);
|
||||
Object.keys(map).forEach((key) => {
|
||||
let obj = map[key];
|
||||
let tpl = obj.get('tpl');
|
||||
if ( obj.enabled && !tpl.supportsOrchestration(orch) ) {
|
||||
this.get('growl').error(
|
||||
intl.t('editProjectTemplate.error.conflict'),
|
||||
intl.t('editProjectTemplate.error.enabling', {
|
||||
tplCategory: tpl.get('category'),
|
||||
stackName: tpl.get('name'),
|
||||
orchestration: Util.ucFirst(orch),
|
||||
})
|
||||
);
|
||||
|
||||
ok = false;
|
||||
}
|
||||
});
|
||||
|
||||
return ok;
|
||||
}).catch(() => {
|
||||
return false;
|
||||
ok = false;
|
||||
}
|
||||
});
|
||||
|
||||
return ok;
|
||||
},
|
||||
|
||||
doSave() {
|
||||
let map = this.get('stacksMap');
|
||||
let ary = [];
|
||||
|
||||
// Only look at enabled stacks
|
||||
// only look at enabled stacks
|
||||
Object.keys(map).forEach((key) => {
|
||||
let obj = map[key];
|
||||
if ( obj && obj.enabled ) {
|
||||
ary.push(obj);
|
||||
let stack = obj.stack;
|
||||
if ( stack.templateVersionId ) {
|
||||
delete stack.templateId;
|
||||
} else {
|
||||
delete stack.templateVersionId;
|
||||
}
|
||||
|
||||
ary.push(obj.stack);
|
||||
}
|
||||
});
|
||||
|
||||
// Map to the catalogTemplate objects the API wants
|
||||
let stacks = ary.map((obj) => {
|
||||
let s = obj.stack;
|
||||
return {
|
||||
name: s.name,
|
||||
description: s.description,
|
||||
answers: s.environment,
|
||||
templateVersionId: obj.tplVersion.id,
|
||||
};
|
||||
});
|
||||
|
||||
this.set('projectTemplate.stacks', stacks);
|
||||
this.set('projectTemplate.stacks', ary);
|
||||
return this._super();
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { compare as compareVersion } from 'ui/utils/parse-version';
|
|||
|
||||
export default Ember.Component.extend(NewOrEdit, {
|
||||
k8s: Ember.inject.service(),
|
||||
intl: Ember.inject.service(),
|
||||
projects: Ember.inject.service(),
|
||||
settings: Ember.inject.service(),
|
||||
|
||||
|
|
@ -27,6 +28,7 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
saveUpgrade: 'newCatalog.saveUpgrade',
|
||||
saveNew: 'newCatalog.saveNew',
|
||||
sectionClass: 'well',
|
||||
showDefaultVersionOption: false,
|
||||
|
||||
classNames: ['launch-catalog'],
|
||||
|
||||
|
|
@ -64,12 +66,16 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
this.set('selectedTemplateModel', null);
|
||||
|
||||
Ember.run.scheduleOnce('afterRender', () => {
|
||||
var def = this.get('templateResource.defaultVersion');
|
||||
var links = this.get('versionLinks');
|
||||
if (links[def]) {
|
||||
this.set('selectedTemplateUrl', links[def]);
|
||||
if ( this.get('selectedTemplateUrl') === 'default') {
|
||||
this.templateChanged();
|
||||
} else {
|
||||
this.set('selectedTemplateUrl', null);
|
||||
var def = this.get('templateResource.defaultVersion');
|
||||
var links = this.get('versionLinks');
|
||||
if (links[def]) {
|
||||
this.set('selectedTemplateUrl', links[def]);
|
||||
} else {
|
||||
this.set('selectedTemplateUrl', null);
|
||||
}
|
||||
}
|
||||
});
|
||||
}.on('init'),
|
||||
|
|
@ -85,22 +91,42 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
}.observes('selectedTemplateModel.links.readme'),
|
||||
|
||||
sortedVersions: function() {
|
||||
return this.get('versionsArray').sort((a,b) => {
|
||||
let out = this.get('versionsArray').sort((a,b) => {
|
||||
return compareVersion(a.version, b.version);
|
||||
});
|
||||
}.property('versionsArray'),
|
||||
|
||||
let def = this.get('templateResource.defaultVersion');
|
||||
if ( this.get('showDefaultVersionOption') && def ) {
|
||||
out.unshift({version: this.get('intl').t('newCatalog.version.default', {version: def}), link: 'default'});
|
||||
}
|
||||
|
||||
return out;
|
||||
}.property('versionsArray','templateResource.defaultVersion'),
|
||||
|
||||
templateChanged: function() {
|
||||
var url = this.get('selectedTemplateUrl');
|
||||
if (url) {
|
||||
this.set('loading', true);
|
||||
|
||||
if ( url === 'default' ) {
|
||||
var def = this.get('templateResource.defaultVersion');
|
||||
var links = this.get('versionLinks');
|
||||
if ( def && links ) {
|
||||
url = links[def];
|
||||
}
|
||||
}
|
||||
|
||||
var version = this.get('settings.rancherVersion');
|
||||
if ( version ) {
|
||||
url = Util.addQueryParam(url, 'minimumRancherVersion_lte', version);
|
||||
}
|
||||
|
||||
var current = this.get('stackResource.environment');
|
||||
if ( !current ) {
|
||||
current = {};
|
||||
this.set('stackResource.environment', current);
|
||||
}
|
||||
|
||||
this.get('store').request({
|
||||
url: url
|
||||
}).then((response) => {
|
||||
|
|
@ -135,7 +161,7 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
this.set('selectedTemplateModel', null);
|
||||
this.set('readmeContent', null);
|
||||
}
|
||||
}.observes('selectedTemplateUrl'),
|
||||
}.observes('selectedTemplateUrl','templateResource.defaultVersion'),
|
||||
|
||||
answers: function() {
|
||||
var out = {};
|
||||
|
|
@ -197,17 +223,26 @@ export default Ember.Component.extend(NewOrEdit, {
|
|||
let files = this.get('selectedTemplateModel.files');
|
||||
let stack = this.get('stackResource');
|
||||
|
||||
stack.setProperties({
|
||||
dockerCompose: files['docker-compose.yml'],
|
||||
rancherCompose: files['rancher-compose.yml'],
|
||||
environment: this.get('answers'),
|
||||
externalId: this.get('newExternalId'),
|
||||
});
|
||||
|
||||
if ( this.get('actuallySave') ) {
|
||||
stack.setProperties({
|
||||
dockerCompose: files['docker-compose.yml'],
|
||||
rancherCompose: files['rancher-compose.yml'],
|
||||
environment: this.get('answers'),
|
||||
externalId: this.get('newExternalId'),
|
||||
});
|
||||
|
||||
return true;
|
||||
} else {
|
||||
this.sendAction('doSave', this.get('templateResource.id'), stack, this.get('selectedTemplateModel'));
|
||||
let versionId = null;
|
||||
if ( this.get('selectedTemplateUrl') !== 'default' && this.get('selectedTemplateModel') ) {
|
||||
versionId = this.get('selectedTemplateModel.id');
|
||||
}
|
||||
|
||||
this.sendAction('doSave', {
|
||||
templateId: this.get('templateResource.id'),
|
||||
templateVersionId: versionId,
|
||||
answers: this.get('answers'),
|
||||
});
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
<td data-title="{{t 'generic.description'}}:">
|
||||
{{#if model.description}}{{model.description}}{{else}}<span class="text-muted">{{t 'projectRow.none'}}</span>{{/if}}
|
||||
</td>
|
||||
<td data-title="{{t 'projectTemplateRow.stacks'}}:">
|
||||
<td data-title="{{t 'settingsPage.indexTemplate.table.header.stacks'}}:">
|
||||
{{model.displayStacks}}
|
||||
</td>
|
||||
<td data-title="{{t 'settingsPage.indexTemplates.table.header.isPublic'}}:">
|
||||
<td data-title="{{t 'settingsPage.indexTemplate.table.header.isPublic'}}:">
|
||||
{{#if model.isPublic}}<i class="icon icon-check"></i>{{else}}<span class="text-muted">–</span>{{/if}}
|
||||
</td>
|
||||
<td data-title="{{t 'generic.actions'}}:"class="actions">
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@ export default Resource.extend({
|
|||
type: 'catalogTemplate',
|
||||
|
||||
externalId: function() {
|
||||
let id = this.get('templateVersionId') || this.get('templateVersion');
|
||||
let id = this.get('templateVersionId') || this.get('templateId');
|
||||
if ( id ) {
|
||||
return C.EXTERNAL_ID.KIND_CATALOG + C.EXTERNAL_ID.KIND_SEPARATOR + id;
|
||||
}
|
||||
}.property('templateVersionId','templateVersion'),
|
||||
}.property('templateVersionId','templateId'),
|
||||
|
||||
externalIdInfo: function() {
|
||||
return parseExternalId(this.get('externalId'));
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@ export default Ember.Route.extend({
|
|||
|
||||
let def = existing.find((tpl) => tpl.get('name').toLowerCase() === C.PROJECT_TEMPLATE.DEFAULT);
|
||||
if ( def ) {
|
||||
hash.projectTemplate = def.cloneForNew();
|
||||
hash.projectTemplate.isPublic = false;
|
||||
let tpl = def.cloneForNew();
|
||||
tpl.isPublic = false;
|
||||
tpl.name = '';
|
||||
tpl.description = '';
|
||||
hash.projectTemplate = tpl;
|
||||
} else {
|
||||
hash.projectTemplate = this.get('userStore').createRecord({
|
||||
type: 'projectTemplate',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ui",
|
||||
"version": "1.2.19",
|
||||
"version": "1.2.20",
|
||||
"private": true,
|
||||
"directories": {
|
||||
"doc": "doc",
|
||||
|
|
|
|||
|
|
@ -2894,6 +2894,7 @@ newBalancer:
|
|||
newCatalog:
|
||||
version:
|
||||
prompt: Choose a version...
|
||||
default: The default at the time (currently {version})
|
||||
saveUpgrade: Upgrade
|
||||
saveNew: Launch
|
||||
saveConfigure: Configure
|
||||
|
|
|
|||
Loading…
Reference in New Issue