mirror of https://github.com/rancher/ui.git
231 lines
6.7 KiB
JavaScript
231 lines
6.7 KiB
JavaScript
import { get, set, observer, computed } from '@ember/object';
|
|
import { next } from '@ember/runloop';
|
|
import Component from '@ember/component';
|
|
import { parseSi } from 'shared/utils/parse-unit';
|
|
import layout from './template';
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
|
|
classNames: ['accordion-wrapper'],
|
|
|
|
// Inputs
|
|
instance: null,
|
|
service: null,
|
|
editing: true,
|
|
|
|
actions: {
|
|
modifyCapabilities: function (type, select) {
|
|
let options = Array.prototype.slice.call(select.target.options, 0);
|
|
let selectedOptions = [];
|
|
|
|
options.filterBy('selected', true).forEach((cap) => {
|
|
return selectedOptions.push(cap.value);
|
|
});
|
|
|
|
set(this, `instance.${type}`, selectedOptions);
|
|
},
|
|
},
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.initCapability();
|
|
this.initMemory();
|
|
this.initGpu();
|
|
this.initCpu();
|
|
},
|
|
|
|
// ----------------------------------
|
|
// Capability
|
|
// ----------------------------------
|
|
capabilityChoices: null,
|
|
initCapability: function () {
|
|
set(this, 'instance.capAdd', get(this, 'instance.capAdd') || []);
|
|
set(this, 'instance.capDrop', get(this, 'instance.capDrop') || []);
|
|
var choices = get(this, 'store').getById('schema', 'container').optionsFor('capAdd').sort();
|
|
set(this, 'capabilityChoices', choices);
|
|
},
|
|
|
|
// ----------------------------------
|
|
// AllowPrivilegeEscalation
|
|
// It is true always when the container is:
|
|
// 1) run as Privileged
|
|
// 2) has CAP_SYS_ADMIN
|
|
// ----------------------------------
|
|
privilegedChanged: observer('instance.privileged', 'instance.capAdd.[]', function () {
|
|
if (get(this, 'instance.privileged') || get(this, 'instance.capAdd').indexOf('SYS_ADMIN') > -1) {
|
|
set(this, 'instance.allowPrivilegeEscalation', true);
|
|
}
|
|
}),
|
|
|
|
allowPrivilegeEscalationDisabled: computed('instance.privileged', 'instance.capAdd.[]', function () {
|
|
return get(this, 'instance.privileged') || get(this, 'instance.capAdd').indexOf('SYS_ADMIN') > -1;
|
|
}),
|
|
|
|
// ----------------------------------
|
|
// Memory
|
|
// ----------------------------------
|
|
memoryMode: 'unlimited', // unlimited, set
|
|
memoryMb: null,
|
|
memoryReservationMb: null,
|
|
initMemory: function () {
|
|
var mem = get(this, 'instance.resources.memory.limit');
|
|
var memReservation = get(this, 'instance.resources.memory.request');
|
|
if (memReservation) {
|
|
set(this, 'memoryReservationMb', parseSi(memReservation, 1024) / 1048576);
|
|
} else {
|
|
set(this, 'memoryReservationMb', '');
|
|
}
|
|
|
|
if (mem) {
|
|
set(this, 'memoryMb', parseSi(mem, 1024) / 1048576);
|
|
set(this, 'memoryMode', 'set');
|
|
} else {
|
|
set(this, 'memoryMb', 128);
|
|
set(this, 'memoryMode', 'unlimited');
|
|
}
|
|
this.updateMemory();
|
|
},
|
|
|
|
updateMemory: function () {
|
|
let mem = parseInt(get(this, 'memoryMb'), 10);
|
|
let memoryMode = get(this, 'memoryMode');
|
|
|
|
// Memory
|
|
if (memoryMode === 'unlimited' || isNaN(mem) || mem <= 0) {
|
|
if (get(this, 'instance.resources.memory')) {
|
|
this.setProperties({
|
|
'instance.resources.memory.limit': null,
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
|
|
set(this, 'instance.resources.memory.limit', `${mem}Mi`);
|
|
},
|
|
|
|
memoryDidChange: observer('memoryMb', 'memoryMode', function () {
|
|
next(this, 'updateMemory');
|
|
}),
|
|
|
|
memoryReservationChanged: observer('memoryReservationMb', function () {
|
|
var mem = get(this, 'memoryReservationMb');
|
|
if (isNaN(mem) || mem <= 0) {
|
|
set(this, 'instance.resources.memory.request', null);
|
|
} else {
|
|
set(this, 'instance.resources.memory.request', `${mem}Mi`);
|
|
}
|
|
}),
|
|
|
|
// ----------------------------------
|
|
// CPU
|
|
// ----------------------------------
|
|
cpuMode: 'unlimited', // unlimited, set
|
|
cpuMillis: null,
|
|
cpuReservationMillis: null,
|
|
initCpu: function () {
|
|
var cpu = get(this, 'instance.resources.cpu.limit');
|
|
var cpuReservation = get(this, 'instance.resources.cpu.request');
|
|
|
|
set(this, 'cpuReservationMillis', this.convertToMillis(cpuReservation));
|
|
|
|
if (cpu) {
|
|
set(this, 'cpuMillis', this.convertToMillis(cpu));
|
|
set(this, 'cpuMode', 'set');
|
|
} else {
|
|
set(this, 'cpuMillis', 1000);
|
|
set(this, 'cpuMode', 'unlimited');
|
|
}
|
|
this.updateCpu();
|
|
},
|
|
|
|
cpuDidChange: observer('cpuMillis', 'cpuMode', function () {
|
|
next(this, 'updateCpu');
|
|
}),
|
|
|
|
updateCpu: function () {
|
|
let cpu = parseInt(get(this, 'cpuMillis'), 10);
|
|
let cpuMode = get(this, 'cpuMode');
|
|
if (cpuMode === 'unlimited' || isNaN(cpu) || cpu <= 0) {
|
|
if (get(this, 'instance.resources.cpu')) {
|
|
this.setProperties({
|
|
'instance.resources.cpu.limit': null,
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
set(this, 'instance.resources.cpu.limit', `${cpu}m`);
|
|
},
|
|
|
|
cpuReservationChanged: observer('cpuReservationMillis', function () {
|
|
var cpu = get(this, 'cpuReservationMillis');
|
|
|
|
if (isNaN(cpu) || cpu <= 0) {
|
|
set(this, 'instance.resources.cpu.request', null);
|
|
} else {
|
|
set(this, 'instance.resources.cpu.request', `${cpu}m`);
|
|
}
|
|
}),
|
|
|
|
// ----------------------------------
|
|
// GPU
|
|
// ----------------------------------
|
|
gpuMode: 'unlimited', // unlimited, set
|
|
gpuMillis: null,
|
|
gpuReservationMillis: null,
|
|
initGpu: function () {
|
|
var gpu = get(this, 'instance.resources.nvidiaGPU.limit');
|
|
var gpuReservation = get(this, 'instance.resources.nvidiaGPU.request');
|
|
|
|
set(this, 'gpuReservationMillis', this.convertToMillis(gpuReservation));
|
|
|
|
if (gpu) {
|
|
set(this, 'gpuMillis', this.convertToMillis(gpu));
|
|
set(this, 'gpuMode', 'set');
|
|
} else {
|
|
set(this, 'gpuMillis', 1000);
|
|
set(this, 'gpuMode', 'unlimited');
|
|
}
|
|
this.updateGpu();
|
|
},
|
|
|
|
gpuDidChange: observer('gpuMillis', 'gpuMode', function () {
|
|
next(this, 'updateGpu');
|
|
}),
|
|
|
|
updateGpu: function () {
|
|
let gpu = parseInt(get(this, 'gpuMillis'), 10);
|
|
let gpuMode = get(this, 'gpuMode');
|
|
if (gpuMode === 'unlimited' || isNaN(gpu) || gpu <= 0) {
|
|
if (get(this, 'instance.resources.nvidiaGPU')) {
|
|
this.setProperties({
|
|
'instance.resources.nvidiaGPU.limit': null,
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
set(this, 'instance.resources.nvidiaGPU.limit', `${gpu}m`);
|
|
},
|
|
|
|
gpuReservationChanged: observer('gpuReservationMillis', function () {
|
|
var gpu = get(this, 'gpuReservationMillis');
|
|
|
|
if (isNaN(gpu) || gpu <= 0) {
|
|
set(this, 'instance.resources.nvidiaGPU.request', null);
|
|
} else {
|
|
set(this, 'instance.resources.nvidiaGPU.request', `${gpu}m`);
|
|
}
|
|
}),
|
|
|
|
convertToMillis(strValue) {
|
|
if (!strValue) {
|
|
return '';
|
|
}
|
|
if (strValue.endsWith('m')) {
|
|
return parseInt(strValue.substr(0, strValue.length - 1), 10);
|
|
} else {
|
|
return parseInt(strValue, 10) * 1000;
|
|
}
|
|
},
|
|
});
|