mirror of https://github.com/rancher/ui.git
135 lines
3.7 KiB
JavaScript
135 lines
3.7 KiB
JavaScript
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import { get, set, computed } from '@ember/object';
|
|
import C from 'shared/utils/constants';
|
|
import { inject as service } from '@ember/service';
|
|
import { alias } from '@ember/object/computed';
|
|
import { satisfies, maxSatisfying, coerceVersion } from 'shared/utils/parse-version';
|
|
import { sortVersions } from 'shared/utils/sort';
|
|
import { scheduleOnce } from '@ember/runloop';
|
|
import { lt, gt, } from 'semver';
|
|
import { isEmpty } from '@ember/utils';
|
|
|
|
export default Component.extend({
|
|
settings: service(),
|
|
intl: service(),
|
|
|
|
layout,
|
|
|
|
cluster: null,
|
|
versionChoices: null,
|
|
versions: null,
|
|
initialVersion: null,
|
|
editing: false,
|
|
value: null,
|
|
|
|
defaultK8sVersionRange: alias(`settings.${ C.SETTING.VERSION_SYSTEM_K8S_DEFAULT_RANGE }`),
|
|
supportedVersionsRange: alias(`settings.${ C.SETTING.VERSION_K8S_SUPPORTED_RANGE }`),
|
|
defaultK8sVersion: alias(`settings.${ C.SETTING.VERSION_RKE_K8S_DEFAULT }`),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
scheduleOnce('afterRender', () => {
|
|
this.initVersions();
|
|
});
|
|
},
|
|
|
|
isRke: computed('cluster', function() {
|
|
const { cluster } = this;
|
|
|
|
if (get(cluster, 'rancherKubernetesEngineConfig')) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}),
|
|
|
|
initVersions() {
|
|
let {
|
|
defaultK8sVersionRange,
|
|
versions,
|
|
supportedVersionsRange,
|
|
editing,
|
|
initialVersion,
|
|
defaultK8sVersion,
|
|
applyClusterTemplate = false,
|
|
clusterTemplateCreate = false,
|
|
clusterTemplateQuestions = [],
|
|
} = this;
|
|
|
|
let out = versions;
|
|
|
|
if (initialVersion) {
|
|
if ( !out.includes(initialVersion) && editing ) {
|
|
out.unshift(initialVersion);
|
|
}
|
|
} else {
|
|
initialVersion = defaultK8sVersion;
|
|
}
|
|
|
|
let maxVersion = maxSatisfying(versions, defaultK8sVersionRange);
|
|
|
|
if (applyClusterTemplate || clusterTemplateCreate) {
|
|
var overrideMatch = ( clusterTemplateQuestions || [] ).findBy('variable', 'rancherKubernetesEngineConfig.kubernetesVersion');
|
|
|
|
if (overrideMatch && !isEmpty(overrideMatch.satisfies)) {
|
|
supportedVersionsRange = overrideMatch.satisfies;
|
|
maxVersion = maxSatisfying(versions, supportedVersionsRange);
|
|
}
|
|
}
|
|
|
|
let mappedVersions = sortVersions(out).reverse().map((v) => {
|
|
let label = v;
|
|
let out = null;
|
|
|
|
const version = coerceVersion(v)
|
|
|
|
if (!label.startsWith('v')) {
|
|
label = `v${ label }`;
|
|
}
|
|
|
|
if (satisfies(version, supportedVersionsRange)) {
|
|
out = {
|
|
label,
|
|
value: v
|
|
};
|
|
} else {
|
|
if (gt(version, coerceVersion(maxVersion))) {
|
|
if (overrideMatch && !isEmpty(overrideMatch.satisfies)) {
|
|
out = {
|
|
disabled: true,
|
|
label: `${ label } ${ this.intl.t('formVersions.unsupported') }`,
|
|
value: v
|
|
};
|
|
} else {
|
|
out = {
|
|
experimental: true,
|
|
label: `${ label } ${ this.intl.t('formVersions.experimental') }`,
|
|
value: v
|
|
};
|
|
}
|
|
} else if (lt(version, coerceVersion(maxVersion))) {
|
|
out = {
|
|
disabled: true,
|
|
label: `${ label } ${ this.intl.t('formVersions.unsupported') }`,
|
|
value: v
|
|
};
|
|
}
|
|
}
|
|
|
|
return out;
|
|
});
|
|
|
|
if (( !editing ) && defaultK8sVersionRange) {
|
|
if (this.value) {
|
|
if ( maxVersion && !mappedVersions.findBy('value', get(this, 'value')) ) {
|
|
set(this, 'value', maxVersion);
|
|
}
|
|
}
|
|
}
|
|
|
|
set(this, 'versionChoices', mappedVersions);
|
|
},
|
|
});
|