mirror of https://github.com/rancher/ui.git
122 lines
3.0 KiB
JavaScript
122 lines
3.0 KiB
JavaScript
import { alias } from '@ember/object/computed';
|
|
import { get, set, observer, setProperties } from '@ember/object';
|
|
import Component from '@ember/component';
|
|
import layout from './template';
|
|
const ROUND_ROBIN = 'ROUND_ROBIN';
|
|
const LEAST_CONN = 'LEAST_CONN';
|
|
const RANDOM = 'RANDOM';
|
|
const PASSTHROUGH = 'PASSTHROUGH';
|
|
|
|
const SOURCE_IP = 'sourceIp';
|
|
const HEADER = 'header';
|
|
const COOKIE = 'cookie';
|
|
const RING_SIZE = 1024;
|
|
|
|
const LB_MODES = [
|
|
{
|
|
label: 'cruDestinationRule.loadBalancer.simple.roundRobin.label',
|
|
value: ROUND_ROBIN,
|
|
},
|
|
{
|
|
label: 'cruDestinationRule.loadBalancer.simple.leastConn.label',
|
|
value: LEAST_CONN,
|
|
},
|
|
{
|
|
label: 'cruDestinationRule.loadBalancer.simple.random.label',
|
|
value: RANDOM,
|
|
},
|
|
{
|
|
label: 'cruDestinationRule.loadBalancer.simple.passthrough.label',
|
|
value: PASSTHROUGH,
|
|
},
|
|
]
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
|
|
trafficPolicy: null,
|
|
|
|
isSimpleMode: true,
|
|
lbModes: LB_MODES,
|
|
consistentHashMode: SOURCE_IP,
|
|
model: alias('trafficPolicy.loadBalancer'),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
this.initLB();
|
|
},
|
|
|
|
isSimpleModeDidChange: observer('isSimpleMode', function() {
|
|
const isSimpleMode = get(this, 'isSimpleMode');
|
|
|
|
if ( isSimpleMode ) {
|
|
set(this, 'trafficPolicy.loadBalancer', { simple: ROUND_ROBIN });
|
|
} else {
|
|
setProperties(this, {
|
|
'consistentHashMode': SOURCE_IP,
|
|
'trafficPolicy.loadBalancer': {
|
|
consistentHash: {
|
|
useSourceIp: true,
|
|
minimumRingSize: RING_SIZE
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}),
|
|
|
|
consistentHashModeDidChange: observer('consistentHashMode', function() {
|
|
const consistentHashMode = get(this, 'consistentHashMode');
|
|
|
|
if ( consistentHashMode === SOURCE_IP ) {
|
|
set(this, 'model', {
|
|
consistentHash: {
|
|
useSourceIp: true,
|
|
minimumRingSize: RING_SIZE
|
|
}
|
|
});
|
|
} else if ( consistentHashMode === COOKIE ) {
|
|
set(this, 'model', {
|
|
consistentHash: {
|
|
httpCookie: {
|
|
ttl: '0s',
|
|
name: ''
|
|
},
|
|
minimumRingSize: RING_SIZE
|
|
}
|
|
});
|
|
} else if ( consistentHashMode === HEADER ) {
|
|
set(this, 'model', {
|
|
consistentHash: {
|
|
httpHeaderName: '',
|
|
minimumRingSize: RING_SIZE
|
|
},
|
|
});
|
|
}
|
|
}),
|
|
|
|
initLB() {
|
|
if ( !get(this, 'trafficPolicy.loadBalancer') ) {
|
|
set(this, 'trafficPolicy.loadBalancer', { simple: ROUND_ROBIN });
|
|
}
|
|
|
|
if ( get(this, 'model.consistentHash.useSourceIp') ) {
|
|
setProperties(this, {
|
|
consistentHashMode: SOURCE_IP,
|
|
isSimpleMode: false
|
|
})
|
|
} else if ( get(this, 'model.consistentHash.httpHeaderName') ) {
|
|
setProperties(this, {
|
|
consistentHashMode: HEADER,
|
|
isSimpleMode: false
|
|
})
|
|
} else if ( get(this, 'model.consistentHash.httpCookie.name') ) {
|
|
setProperties(this, {
|
|
consistentHashMode: COOKIE,
|
|
isSimpleMode: false
|
|
})
|
|
}
|
|
},
|
|
|
|
});
|