ui/lib/shared/addon/components/container/form-upgrade-deployment/component.js

98 lines
2.5 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import { get, setProperties, observer } from '@ember/object';
function maybeInt(str) {
const num = parseInt(str,10);
if ( num+'' === str ) {
return num;
}
return str;
}
export default Component.extend({
layout,
workload: null,
scaleMode: null,
editing: null,
isUpgrade: null,
classNames: ['accordion-wrapper'],
_strategy: null,
workloadConfig: null,
batchSize: null,
didReceiveAttrs() {
const config = get(this, 'workloadConfig');
let maxSurge = get(config, 'maxSurge');
let maxUnavailable = get(config, 'maxUnavailable');
let actualStrategy = get(config, 'strategy');
const changes = {};
if ( !actualStrategy ) {
actualStrategy = 'RollingUpdate';
maxSurge = 1;
maxUnavailable = null;
}
if ( actualStrategy === 'RollingUpdate' ) {
if ( maxSurge && maxUnavailable ) {
changes['_strategy'] = 'custom';
} else if ( maxSurge ) {
changes['_strategy'] = 'startFirst';
changes['batchSize'] = maxSurge;
} else if ( maxUnavailable ) {
changes['_strategy'] = 'stopFirst';
changes['batchSize'] = maxUnavailable;
} else {
changes['_strategy'] = 'stopFirst';
}
}
setProperties(this, changes);
this.strategyChanged();
},
strategyChanged: observer('_strategy','batchSize', function() {
const _strategy = get(this, '_strategy');
const config = get(this, 'workloadConfig');
let batchSize = maybeInt(get(this, 'batchSize'));
let maxSurge = maybeInt(get(config, 'maxSurge'));
let maxUnavailable = maybeInt(get(config, 'maxUnavailable'));
if ( !maxSurge && !maxUnavailable ) {
maxSurge = 1;
maxUnavailable = 0;
}
if ( _strategy === 'startFirst' ) {
setProperties(config, {
strategy: 'RollingUpdate',
maxSurge: batchSize,
maxUnavailable: 0,
});
} else if ( _strategy === 'stopFirst' ) {
setProperties(config, {
strategy: 'RollingUpdate',
maxSurge: 0,
maxUnavailable: batchSize,
});
} else if ( _strategy === 'custom' ) {
setProperties(config, {
strategy: 'RollingUpdate',
maxSurge: maxSurge,
maxUnavailable: maxUnavailable
});
} else if ( _strategy === 'recreate' ) {
setProperties(config, {
strategy: 'Recreate',
maxSurge: null,
maxUnavailable: null,
});
}
}),
});