diff --git a/app/components/catalog-configure/component.js b/app/components/catalog-configure/component.js index af0bbd82c..f1ac15477 100644 --- a/app/components/catalog-configure/component.js +++ b/app/components/catalog-configure/component.js @@ -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'); }, }, diff --git a/app/components/catalog-configure/template.hbs b/app/components/catalog-configure/template.hbs index c1efb759b..6ca0d8476 100644 --- a/app/components/catalog-configure/template.hbs +++ b/app/components/catalog-configure/template.hbs @@ -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' diff --git a/app/components/edit-projecttemplate/component.js b/app/components/edit-projecttemplate/component.js index ce14eaace..8a863c731 100644 --- a/app/components/edit-projecttemplate/component.js +++ b/app/components/edit-projecttemplate/component.js @@ -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(); }, diff --git a/app/components/new-catalog/component.js b/app/components/new-catalog/component.js index 0c1b72875..255fa0d2f 100644 --- a/app/components/new-catalog/component.js +++ b/app/components/new-catalog/component.js @@ -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; } }, diff --git a/app/components/project-template-row/template.hbs b/app/components/project-template-row/template.hbs index 195d0a02b..eb10d8ceb 100644 --- a/app/components/project-template-row/template.hbs +++ b/app/components/project-template-row/template.hbs @@ -4,10 +4,10 @@