mirror of https://github.com/rancher/dashboard.git
221 lines
5.6 KiB
Vue
221 lines
5.6 KiB
Vue
<script>
|
|
import isEmpty from 'lodash/isEmpty';
|
|
import UnitInput from '@/components/form/UnitInput';
|
|
import { CONTAINER_DEFAULT_RESOURCE_LIMIT } from '@/config/labels-annotations';
|
|
import { _VIEW } from '@/config/query-params';
|
|
import { parseSi, formatSi } from '@/utils/units';
|
|
import { cleanUp } from '@/utils/object';
|
|
|
|
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
|
|
} = this.value;
|
|
|
|
const parsed = {
|
|
limitsCpu: limitsCpu ? parseSi(limitsCpu) : null,
|
|
limitsMemory: limitsMemory ? parseSi(limitsMemory) : null,
|
|
requestsCpu: requestsCpu ? parseSi(requestsCpu) : null,
|
|
requestsMemory: requestsMemory ? parseSi(requestsMemory) : null,
|
|
};
|
|
|
|
const formatted = {
|
|
limitsCpu: formatSi(parsed.limitsCpu, {
|
|
minExponent: 1, maxExponent: 1, addSuffix: false, increment: 1 / 1000
|
|
}),
|
|
limitsMemory: formatSi(parsed.limitsMemory, {
|
|
minExponent: 2, maxExponent: 2, addSuffix: false, increment: 1024,
|
|
}),
|
|
requestsCpu: formatSi(parsed.requestsCpu, {
|
|
minExponent: 1, maxExponent: 1, addSuffix: false, increment: 1 / 1000,
|
|
}),
|
|
requestsMemory: formatSi(parsed.requestsMemory, {
|
|
minExponent: 2, maxExponent: 2, addSuffix: false, increment: 1024,
|
|
}),
|
|
viewMode: _VIEW,
|
|
};
|
|
|
|
return { ...formatted };
|
|
// return { ...formatted };
|
|
|
|
// return {
|
|
// limitsCpu, limitsMemory, requestsCpu, requestsMemory
|
|
// };
|
|
},
|
|
|
|
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,
|
|
} = this;
|
|
const out = {
|
|
limitsCpu: limitsCpu ? `${ limitsCpu }m` : null,
|
|
limitsMemory: limitsMemory ? `${ limitsMemory }Mi` : null,
|
|
requestsCpu: requestsCpu ? `${ requestsCpu }m` : null,
|
|
requestsMemory: requestsMemory ? `${ requestsMemory }Mi` : null,
|
|
};
|
|
|
|
this.$emit('input', cleanUp(out));
|
|
},
|
|
|
|
updateBeforeSave(value) {
|
|
const {
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
requestsMemory,
|
|
} = this;
|
|
const namespace = this.namespace; // no deep copy in destructure proxy yet
|
|
const out = {
|
|
limitsCpu: `${ limitsCpu }m`,
|
|
limitsMemory: `${ limitsMemory }Mi`,
|
|
requestsCpu: `${ requestsCpu }m`,
|
|
requestsMemory: `${ requestsMemory }Mi`,
|
|
};
|
|
|
|
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];
|
|
|
|
if (!isEmpty(defaults)) {
|
|
const {
|
|
limitsCpu,
|
|
limitsMemory,
|
|
requestsCpu,
|
|
requestsMemory,
|
|
} = JSON.parse(defaults);
|
|
|
|
this.limitsCpu = limitsCpu;
|
|
this.limitsMemory = limitsMemory;
|
|
this.requestsCpu = requestsCpu;
|
|
this.requestsMemory = requestsMemory;
|
|
}
|
|
},
|
|
}
|
|
|
|
};
|
|
</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"
|
|
:suffix="t('suffix.cpus')"
|
|
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
:label="t('containerResourceLimit.requestsCpu')"
|
|
:input-exponent="-1"
|
|
:mode="mode"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="requestsMemory"
|
|
:suffix="t('suffix.ib')"
|
|
:placeholder="t('containerResourceLimit.memPlaceholder')"
|
|
:label="t('containerResourceLimit.requestsMemory')"
|
|
:input-exponent="2"
|
|
:mode="mode"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="limitsCpu"
|
|
:suffix="t('suffix.cpus')"
|
|
:placeholder="t('containerResourceLimit.cpuPlaceholder')"
|
|
:label="t('containerResourceLimit.limitsCpu')"
|
|
:input-exponent="-1"
|
|
:mode="mode"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
<span class="col span-6">
|
|
<UnitInput
|
|
v-model="limitsMemory"
|
|
:suffix="t('suffix.ib')"
|
|
:placeholder="t('containerResourceLimit.memPlaceholder')"
|
|
:label="t('containerResourceLimit.limitsMemory')"
|
|
:input-exponent="2"
|
|
:mode="mode"
|
|
@input="updateLimits"
|
|
/>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</template>
|