ui/lib/shared/addon/components/form-agent-config/component.js

127 lines
3.2 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import {
computed,
get,
set,
observer
} from '@ember/object';
import { once } from '@ember/runloop';
export default Component.extend({
layout,
mode: 'new',
// TODO nb pass in fleet/cluster spec
cluster: {},
agentKey: '',
actions: {
updateLimits(val){
if (!val.cpu && !val.memory){
this.updateResourceRequirement('limits', null)
} else {
this.updateResourceRequirement('limits', val)
}
},
updateRequests(val){
if (!val.cpu && !val.memory){
this.updateResourceRequirement('requests', null)
} else {
this.updateResourceRequirement('requests', val)
}
},
updateAffinity(val){
// TODO nb do
console.log('agentConfig updating affinity to: ', val)
}
},
// TODO nb add affinity
agentObserver: observer('agentConfig.overrideResourceRequirements', 'agentConfig.appendTolerations', 'agentConfig.overrideAffinity', function() {
const agentConfig = get(this, 'agentConfig') || {}
const agentKey = get(this, 'agentKey')
if (Object.keys(agentConfig).length){
set(this.cluster, agentKey, agentConfig)
} else if (this.cluster[agentKey]){
delete this.cluster[agentKey]
}
}),
agentConfig: computed('cluster', 'agentKey', function() {
const agentKey = get(this, 'agentKey')
return get(this.cluster, agentKey) || {}
}),
overrideResourceRequirements: computed('agentConfig.overrideResourceRequirements.{requests,limits}', {
get(){
return get(this, 'agentConfig.overrideResourceRequirements') || {}
},
set(key, val = {}){
if (val.limits || val.requests){
set(this, 'agentConfig.overrideResourceRequirements', val)
} else if (this.agentConfig.overrideResourceRequirements){
delete this.agentConfig.overrideResourceRequirements
this.notifyPropertyChange('agentConfig')
}
return val
}
}),
limits: computed('overrideResourceRequirements.limits', function() {
return get(this, 'overrideResourceRequirements.limits') || {}
}),
requests: computed('overrideResourceRequirements.requests', function() {
return get(this, 'overrideResourceRequirements.requests') || {}
}),
appendTolerations: computed('agentConfig.appendTolerations', {
get(){
return get(this, 'agentConfig.appendTolerations') || []
},
set(key, val = []){
if (val.length){
set(this, 'agentConfig.appendTolerations', val)
} else if (this.agentConfig.appendTolerations){
delete this.agentConfig.appendTolerations
this.notifyPropertyChange('agentConfig')
}
return val
},
}),
overrideAffinity: computed('agentConfig.overrideAffinity', {
get(){
return get(this, 'agentConfig.overrideAffinity') || {}
},
set(key, val){
set(this.agentConfig, 'overrideAffinity', val)
return val
}
}),
updateResourceRequirement(type, val){
const neu = { ...this.overrideResourceRequirements }
if (val){
neu[type] = val
} else if (neu[type]){
delete neu[type]
}
this.set('overrideResourceRequirements', neu)
},
})