Split/migrate K8s template name for backwards compatibility (#799)

This commit is contained in:
Vincent Fiduccia 2016-07-26 14:20:55 -07:00 committed by GitHub
parent 325a394fcb
commit 6c7d90c1ce
8 changed files with 60 additions and 23 deletions

View File

@ -9,15 +9,21 @@ export default Ember.Route.extend({
model: function(params/*, transition*/) { model: function(params/*, transition*/) {
var store = this.get('store'); var store = this.get('store');
var version = this.get('settings.rancherVersion');
let url = this.get('app.catalogEndpoint')+'/templates/'+params.template;
if ( version )
{
url = Util.addQueryParam(url, 'minimumRancherVersion_lte', version);
}
var dependencies = { var dependencies = {
tpl: store.request({url: this.get('app.catalogEndpoint')+'/templates/'+params.template}), tpl: store.request({url: url}),
}; };
if ( params.upgrade ) if ( params.upgrade )
{ {
var version = this.get('settings.rancherVersion'); url = this.get('app.catalogEndpoint')+'/templateversions/'+params.upgrade;
var url = this.get('app.catalogEndpoint')+'/templateversions/'+params.upgrade;
if ( version ) if ( version )
{ {
url = Util.addQueryParam(url, 'minimumRancherVersion_lte', version); url = Util.addQueryParam(url, 'minimumRancherVersion_lte', version);

View File

@ -2,11 +2,13 @@ import Ember from 'ember';
import NewOrEdit from 'ui/mixins/new-or-edit'; import NewOrEdit from 'ui/mixins/new-or-edit';
import ShellQuote from 'npm:shell-quote'; import ShellQuote from 'npm:shell-quote';
import C from 'ui/utils/constants'; import C from 'ui/utils/constants';
import Util from 'ui/utils/util';
import { compare as compareVersion } from 'ui/utils/parse-version'; import { compare as compareVersion } from 'ui/utils/parse-version';
export default Ember.Component.extend(NewOrEdit, { export default Ember.Component.extend(NewOrEdit, {
k8s: Ember.inject.service(), k8s: Ember.inject.service(),
projects: Ember.inject.service(), projects: Ember.inject.service(),
settings: Ember.inject.service(),
allTemplates: null, allTemplates: null,
templateResource: null, templateResource: null,
@ -74,13 +76,18 @@ export default Ember.Component.extend(NewOrEdit, {
}.property('versionsArray'), }.property('versionsArray'),
templateChanged: function() { templateChanged: function() {
var link = this.get('selectedTemplateUrl'); var url = this.get('selectedTemplateUrl');
if (link) { if (url) {
this.set('loading', true); this.set('loading', true);
var version = this.get('settings.rancherVersion');
if ( version ) {
url = Util.addQueryParam(url, 'minimumRancherVersion_lte', version);
}
var current = this.get('environmentResource.environment'); var current = this.get('environmentResource.environment');
this.get('store').request({ this.get('store').request({
url: link url: url
}).then((response) => { }).then((response) => {
if (response.questions) { if (response.questions) {
response.questions.forEach((item) => { response.questions.forEach((item) => {

View File

@ -15,7 +15,7 @@
{{/if}} {{/if}}
<span> <span>
{{t step}}{{#if (and subCount (eq currentStep index))}} {{t 'waitOrchestration.count' sub=subStep count=subCount}}{{/if}} {{t step}}{{#if (and subStep subCount (eq currentStep index))}} {{t 'waitOrchestration.count' sub=subStep count=subCount}}{{/if}}
</span> </span>
</li> </li>
{{/each}} {{/each}}

View File

@ -192,13 +192,35 @@ var Environment = Resource.extend({
}.property('services'), }.property('services'),
externalIdInfo: function() { externalIdInfo: function() {
return parseExternalId(this.get('externalId')); let eid = this.get('externalId');
let info = parseExternalId(eid);
// Migrate kubernetes -> k8s
// 1.1.x did not send minimumRancherVersion correctly, so the catalog template
// was changed from "kubernetes" to "k8s" so that they won't upgrade from 1.2 to 1.3
if ( info && info.kind === C.EXTERNAL_ID.KIND_SYSTEM_CATALOG )
{
const base = C.EXTERNAL_ID.KIND_SYSTEM_CATALOG + C.EXTERNAL_ID.KIND_SEPARATOR + C.CATALOG.LIBRARY_KEY + C.EXTERNAL_ID.GROUP_SEPARATOR;
let old_prefix = base + C.EXTERNAL_ID.KIND_LEGACY_KUBERNETES + C.EXTERNAL_ID.GROUP_SEPARATOR;
let neu_prefix = base + C.EXTERNAL_ID.KIND_KUBERNETES + C.EXTERNAL_ID.GROUP_SEPARATOR;
if ( eid.indexOf(old_prefix) === 0 )
{
let neu = eid.replace(old_prefix,neu_prefix);
console.log('Migrating Stack ' + this.get('id') + ' from ' + eid + ' to ' + neu);
this.set('externalId', neu);
this.save();
return parseExternalId(neu);
}
}
return info;
}.property('externalId'), }.property('externalId'),
grouping: function() { grouping: function() {
var kind = this.get('externalIdInfo.kind'); var kind = this.get('externalIdInfo.kind');
if ( kind === C.EXTERNAL_ID.KIND_KUBERNETES ) if ( kind === C.EXTERNAL_ID.KIND_KUBERNETES || kind === C.EXTERNAL_ID.KIND_LEGACY_KUBERNETES )
{ {
return C.EXTERNAL_ID.KIND_KUBERNETES; return C.EXTERNAL_ID.KIND_KUBERNETES;
} }

View File

@ -501,7 +501,7 @@ export default Ember.Service.extend({
}.property('version.{minor,major}'), }.property('version.{minor,major}'),
filterSystemStack(stacks) { filterSystemStack(stacks) {
const OLD_STACK_ID = C.EXTERNAL_ID.KIND_SYSTEM + C.EXTERNAL_ID.KIND_SEPARATOR + C.EXTERNAL_ID.KIND_KUBERNETES; const OLD_STACK_ID = C.EXTERNAL_ID.KIND_SYSTEM + C.EXTERNAL_ID.KIND_SEPARATOR + C.EXTERNAL_ID.KIND_LEGACY_KUBERNETES;
const NEW_STACK_PREFIX = C.EXTERNAL_ID.KIND_SYSTEM_CATALOG + C.EXTERNAL_ID.KIND_SEPARATOR + C.CATALOG.LIBRARY_KEY + C.EXTERNAL_ID.GROUP_SEPARATOR + C.EXTERNAL_ID.KIND_KUBERNETES + C.EXTERNAL_ID.GROUP_SEPARATOR; const NEW_STACK_PREFIX = C.EXTERNAL_ID.KIND_SYSTEM_CATALOG + C.EXTERNAL_ID.KIND_SEPARATOR + C.CATALOG.LIBRARY_KEY + C.EXTERNAL_ID.GROUP_SEPARATOR + C.EXTERNAL_ID.KIND_KUBERNETES + C.EXTERNAL_ID.GROUP_SEPARATOR;
var stack = (stacks||[]).filter((stack) => { var stack = (stacks||[]).filter((stack) => {

View File

@ -2,12 +2,13 @@ const KIND_USER = 'user';
const KIND_CATALOG = 'catalog'; const KIND_CATALOG = 'catalog';
const KIND_SYSTEM = 'system'; const KIND_SYSTEM = 'system';
const KIND_SYSTEM_CATALOG = 'system-catalog'; const KIND_SYSTEM_CATALOG = 'system-catalog';
const KIND_KUBERNETES = 'kubernetes'; const KIND_LEGACY_KUBERNETES = 'kubernetes';
const KIND_KUBERNETES = 'k8s';
const KIND_SWARM = 'swarm'; const KIND_SWARM = 'swarm';
const KIND_MESOS = 'mesos'; const KIND_MESOS = 'mesos';
const KIND_NOT_KUBERNETES = `not-${KIND_KUBERNETES}`; const KIND_NOT_KUBERNETES = `sys-${KIND_KUBERNETES}`;
const KIND_NOT_SWARM = `not-${KIND_SWARM}`; const KIND_NOT_SWARM = `sys-${KIND_SWARM}`;
const KIND_NOT_MESOS = `not-${KIND_MESOS}`; const KIND_NOT_MESOS = `sys-${KIND_MESOS}`;
var C = { var C = {
COOKIE: { COOKIE: {
@ -25,6 +26,7 @@ var C = {
KIND_CATALOG: KIND_CATALOG, KIND_CATALOG: KIND_CATALOG,
KIND_SYSTEM: KIND_SYSTEM, KIND_SYSTEM: KIND_SYSTEM,
KIND_SYSTEM_CATALOG: KIND_SYSTEM_CATALOG, KIND_SYSTEM_CATALOG: KIND_SYSTEM_CATALOG,
KIND_LEGACY_KUBERNETES: KIND_LEGACY_KUBERNETES,
KIND_KUBERNETES: KIND_KUBERNETES, KIND_KUBERNETES: KIND_KUBERNETES,
KIND_SWARM: KIND_SWARM, KIND_SWARM: KIND_SWARM,
KIND_MESOS: KIND_MESOS, KIND_MESOS: KIND_MESOS,

View File

@ -116,7 +116,7 @@ const navTree = [
icon: 'icon icon-network', icon: 'icon icon-network',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'not-kubernetes'}, queryParams: {which: C.EXTERNAL_ID.KIND_NOT_KUBERNETES},
}, },
], ],
}, },
@ -160,7 +160,7 @@ const navTree = [
icon: 'icon icon-network', icon: 'icon icon-network',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'not-swarm'}, queryParams: {which: C.EXTERNAL_ID.KIND_NOT_SWARM},
}, },
] ]
}, },
@ -188,7 +188,7 @@ const navTree = [
icon: 'icon icon-network', icon: 'icon icon-network',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'not-mesos'}, queryParams: {which: C.EXTERNAL_ID.KIND_NOT_MESOS},
}, },
], ],
}, },
@ -198,7 +198,7 @@ const navTree = [
id: 'cattle', id: 'cattle',
localizedLabel: 'nav.cattle.tab', localizedLabel: 'nav.cattle.tab',
route: 'environments', route: 'environments',
queryParams: {which: 'user'}, queryParams: {which: C.EXTERNAL_ID.KIND_USER},
ctx: [getProjectId], ctx: [getProjectId],
moreCurrentWhen: ['authenticated.project.waiting'], moreCurrentWhen: ['authenticated.project.waiting'],
condition: function() { return this.get('hasProject') && !this.get('hasKubernetes') && !this.get('hasSwarm') && !this.get('hasMesos'); }, condition: function() { return this.get('hasProject') && !this.get('hasKubernetes') && !this.get('hasSwarm') && !this.get('hasMesos'); },
@ -209,7 +209,7 @@ const navTree = [
icon: 'icon icon-globe', icon: 'icon icon-globe',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'all'}, queryParams: {which: C.EXTERNAL_ID.KIND_ALL},
}, },
{divider: true}, {divider: true},
{ {
@ -218,7 +218,7 @@ const navTree = [
icon: 'icon icon-layers', icon: 'icon icon-layers',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'user'}, queryParams: {which: C.EXTERNAL_ID.KIND_USER},
}, },
{ {
id: 'cattle-system', id: 'cattle-system',
@ -226,7 +226,7 @@ const navTree = [
icon: 'icon icon-network', icon: 'icon icon-network',
route: 'environments', route: 'environments',
ctx: [getProjectId], ctx: [getProjectId],
queryParams: {which: 'system'}, queryParams: {which: C.EXTERNAL_ID.KIND_SYSTEM},
}, },
], ],
}, },

View File

@ -18,7 +18,7 @@ export function parseExternalId(externalId) {
var idx = externalId.indexOf(C.EXTERNAL_ID.KIND_SEPARATOR); var idx = externalId.indexOf(C.EXTERNAL_ID.KIND_SEPARATOR);
if (idx >= 0) { if (idx >= 0) {
// New style kind://[group:]ido // New style kind://[group:]id
out.kind = externalId.substr(0, idx); out.kind = externalId.substr(0, idx);
var rest = externalId.substr(idx + C.EXTERNAL_ID.KIND_SEPARATOR.length); var rest = externalId.substr(idx + C.EXTERNAL_ID.KIND_SEPARATOR.length);