mirror of https://github.com/rancher/dashboard.git
240 lines
5.5 KiB
Vue
240 lines
5.5 KiB
Vue
<script>
|
|
import isEmpty from 'lodash/isEmpty';
|
|
import UnitInput from '@shell/components/form/UnitInput';
|
|
import { CONTAINER_DEFAULT_RESOURCE_LIMIT } from '@shell/config/labels-annotations';
|
|
import { cleanUp } from '@shell/utils/object';
|
|
import { _VIEW } from '@shell/config/query-params';
|
|
|
|
export default {
|
|
components: { UnitInput },
|
|
|
|
props: {
|
|
mode: {
|
|
type: String,
|
|
default: 'create'
|
|
},
|
|
|
|
namespace: {
|
|
type: Object,
|
|
default: null
|
|
},
|
|
|
|
value: {
|
|
type: Object,
|
|
default: () => {
|
|
return {};
|
|
}
|
|
},
|
|
|
|
registerBeforeHook: {
|
|
type: Function,
|
|
default: null
|
|
},
|
|
|
|
showTip: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
},
|
|
|
|
data() {
|
|
const {
|
|
limitsCpu, limitsMemory, requestsCpu, requestsMemory, limitsGpu
|
|
} = this.value;
|
|
|
|
return {
|
|
limitsCpu, limitsMemory, requestsCpu, requestsMemory, limitsGpu, viewMode: _VIEW
|
|
};
|
|
},
|
|
|
|
watch: {
|
|
value() {
|
|
const {
|
|
limitsCpu, limitsMemory, requestsCpu, requestsMemory, limitsGpu
|
|
} = this.value;
|
|
|
|
this.limitsCpu = limitsCpu;
|
|
this.limitsMemory = limitsMemory;
|
|
this.requestsCpu = requestsCpu;
|
|
this.requestsMemory = requestsMemory;
|
|
this.limitsGpu = limitsGpu;
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
detailTopColumns() {
|
|
return [
|
|
{
|
|
title: this.$store.getters['i18n/t']('generic.created'),
|
|
name: 'created'
|
|
},
|
|
];
|
|
},
|
|
},
|
|
|
|
created() {
|
|
if (this?.namespace?.id) {
|
|
this.initLimits();
|
|
}
|
|
|
|
if (this.registerBeforeHook) {
|
|
this.registerBeforeHook(this.updateBeforeSave);
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
updateLimits() {
|
|
const {
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
requestsMemory,
|
|
limitsGpu
|
|
} = this;
|
|
|
|
this.$emit('input', cleanUp({
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
limitsGpu,
|
|
requestsMemory
|
|
}));
|
|
},
|
|
|
|
updateBeforeSave(value) {
|
|
const {
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
requestsMemory,
|
|
limitsGpu
|
|
} = this;
|
|
const namespace = this.namespace; // no deep copy in destructure proxy yet
|
|
|
|
const out = cleanUp({
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
limitsGpu,
|
|
requestsMemory
|
|
});
|
|
|
|
if (namespace) {
|
|
namespace.setAnnotation(CONTAINER_DEFAULT_RESOURCE_LIMIT, JSON.stringify(out));
|
|
}
|
|
},
|
|
|
|
initLimits() {
|
|
const namespace = this.namespace;
|
|
const defaults = namespace?.metadata?.annotations[CONTAINER_DEFAULT_RESOURCE_LIMIT];
|
|
|
|
// Ember UI can set the defaults to the string literal 'null'
|
|
if (!isEmpty(defaults) && defaults !== 'null') {
|
|
const {
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
requestsMemory,
|
|
limitsGpu
|
|
} = JSON.parse(defaults);
|
|
|
|
this.limitsCpu = limitsCpu;
|
|
this.limitsMemory = limitsMemory;
|
|
this.requestsCpu = requestsCpu;
|
|
this.requestsMemory = requestsMemory;
|
|
this.limitsGpu = limitsGpu;
|
|
}
|
|
},
|
|
}
|
|
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div class="row">
|
|
<div
|
|
v-if="showTip"
|
|
class="col span-12"
|
|
>
|
|
<p class="helper-text mb-10">
|
|
<t
|
|
v-if="mode === viewMode"
|
|
k="containerResourceLimit.helpTextDetail"
|
|
/>
|
|
<t
|
|
v-else
|
|
k="containerResourceLimit.helpText"
|
|
/>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-20">
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="requestsCpu"
|
|
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
:label="t('containerResourceLimit.requestsCpu')"
|
|
:mode="mode"
|
|
:input-exponent="-1"
|
|
:output-modifier="true"
|
|
:base-unit="t('suffix.cpus')"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="requestsMemory"
|
|
:placeholder="t('containerResourceLimit.memPlaceholder')"
|
|
:label="t('containerResourceLimit.requestsMemory')"
|
|
:mode="mode"
|
|
:input-exponent="2"
|
|
:increment="1024"
|
|
:output-modifier="true"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
</div>
|
|
|
|
<div class="row mb-20">
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="limitsCpu"
|
|
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
:label="t('containerResourceLimit.limitsCpu')"
|
|
:mode="mode"
|
|
:input-exponent="-1"
|
|
:output-modifier="true"
|
|
:base-unit="t('suffix.cpus')"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="limitsMemory"
|
|
:placeholder="t('containerResourceLimit.memPlaceholder')"
|
|
:label="t('containerResourceLimit.limitsMemory')"
|
|
:mode="mode"
|
|
:input-exponent="2"
|
|
:increment="1024"
|
|
:output-modifier="true"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
</div>
|
|
<div class="row">
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="limitsGpu"
|
|
:placeholder="t('containerResourceLimit.gpuPlaceholder')"
|
|
:label="t('containerResourceLimit.limitsGpu')"
|
|
:mode="mode"
|
|
:base-unit="t('suffix.gpus')"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</template>
|