mirror of https://github.com/rancher/ui.git
81 lines
3.2 KiB
JavaScript
81 lines
3.2 KiB
JavaScript
import Service from '@ember/service';
|
|
import Semver from 'semver';
|
|
import { setProperties } from '@ember/object';
|
|
import { satisfies, coerceVersion } from 'shared/utils/parse-version';
|
|
import C from 'shared/utils/constants';
|
|
import { alias } from '@ember/object/computed';
|
|
import { inject as service } from '@ember/service';
|
|
|
|
export default Service.extend({
|
|
intl: service(),
|
|
settings: service(),
|
|
|
|
defaultK8sVersionRange: alias(`settings.${ C.SETTING.VERSION_SYSTEM_K8S_DEFAULT_RANGE }`),
|
|
|
|
parseCloudProviderVersionChoices(versions, providerVersion, mode, maxVersionRange = null, includePrerelease = false, experimentalRange = null, minVersionRange = null) {
|
|
let {
|
|
intl,
|
|
defaultK8sVersionRange
|
|
} = this;
|
|
|
|
maxVersionRange = maxVersionRange ? maxVersionRange : defaultK8sVersionRange.split(' ').pop();
|
|
minVersionRange = minVersionRange ? minVersionRange : defaultK8sVersionRange.split(' ').pop();
|
|
|
|
return versions.map((version) => {
|
|
// Only show versions between the max and min allowed versions, except if the cluster
|
|
// is already at a version below the minimum. In that case, the existing version still
|
|
// needs to be included as the default value when editing the cluster.
|
|
if (satisfies(coerceVersion(version), maxVersionRange, { includePrerelease }) && (version === providerVersion || satisfies(coerceVersion(version), minVersionRange))) {
|
|
const experimental = experimentalRange && satisfies(coerceVersion(version), experimentalRange) ? intl.t('generic.experimental') : '';
|
|
const out = {
|
|
label: `${ version } ${ experimental }`,
|
|
value: version,
|
|
};
|
|
|
|
if (mode === 'edit') {
|
|
if (Semver.lt(coerceVersion(version), coerceVersion(providerVersion))) {
|
|
setProperties(out, {
|
|
disabled: true,
|
|
label: `${ out.label } ${ intl.t('formVersions.downgrade') }`
|
|
});
|
|
}
|
|
}
|
|
|
|
return out;
|
|
}
|
|
}).filter((version) => version);
|
|
},
|
|
parseCloudProviderVersionChoicesV2(versions, providerVersion, mode, maxVersionRange = null, includePrerelease = false, minVersionRange = null) {
|
|
let {
|
|
intl,
|
|
defaultK8sVersionRange
|
|
} = this;
|
|
|
|
maxVersionRange = maxVersionRange ? maxVersionRange : defaultK8sVersionRange.split(' ').pop();
|
|
minVersionRange = minVersionRange ? minVersionRange : defaultK8sVersionRange.split(' ').pop();
|
|
|
|
return versions.map((version) => {
|
|
// Only show versions between the max and min allowed versions, except if the cluster
|
|
// is already at a version below the minimum. In that case, the existing version still
|
|
// needs to be included as the default value when editing the cluster.
|
|
if (satisfies(version, maxVersionRange) && (version === providerVersion || satisfies(version, minVersionRange))) {
|
|
const out = {
|
|
label: version,
|
|
value: version,
|
|
};
|
|
|
|
if (mode === 'edit') {
|
|
if (Semver.lt(version, providerVersion, { includePrerelease })) {
|
|
setProperties(out, {
|
|
disabled: true,
|
|
label: `${ out.label } ${ intl.t('formVersions.downgrade') }`
|
|
});
|
|
}
|
|
}
|
|
|
|
return out;
|
|
}
|
|
}).filter((version) => version);
|
|
}
|
|
});
|