mirror of https://github.com/rancher/dashboard.git
156 lines
3.6 KiB
Vue
156 lines
3.6 KiB
Vue
<script>
|
|
import ArrayList from '@/components/form/ArrayList';
|
|
import Row from './Row';
|
|
|
|
export const TYPES = [
|
|
{
|
|
key: 'configMaps',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.configMaps'
|
|
},
|
|
{
|
|
key: 'limitsCpu',
|
|
units: 'cpu',
|
|
labelKey: 'resourceQuota.limitsCpu'
|
|
},
|
|
{
|
|
key: 'limitsMemory',
|
|
units: 'memory',
|
|
labelKey: 'resourceQuota.limitsMemory'
|
|
},
|
|
{
|
|
key: 'persistentVolumeClaims',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.persistentVolumeClaims'
|
|
},
|
|
{
|
|
key: 'pods',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.pods'
|
|
},
|
|
{
|
|
key: 'replicationControllers',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.replicationControllers'
|
|
},
|
|
{
|
|
key: 'requestsCpu',
|
|
units: 'cpu',
|
|
labelKey: 'resourceQuota.requestsCpu'
|
|
},
|
|
{
|
|
key: 'requestsMemory',
|
|
units: 'memory',
|
|
labelKey: 'resourceQuota.requestsMemory'
|
|
},
|
|
{
|
|
key: 'requestsStorage',
|
|
units: 'storage',
|
|
labelKey: 'resourceQuota.requestsStorage'
|
|
},
|
|
{
|
|
key: 'secrets',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.secrets'
|
|
},
|
|
{
|
|
key: 'services',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.services'
|
|
},
|
|
{
|
|
key: 'servicesLoadBalancers',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.servicesLoadBalancers'
|
|
},
|
|
{
|
|
key: 'servicesNodePorts',
|
|
units: 'unitless',
|
|
labelKey: 'resourceQuota.servicesNodePorts'
|
|
},
|
|
];
|
|
|
|
export default {
|
|
components: { ArrayList, Row },
|
|
|
|
props: {
|
|
mode: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
value: {
|
|
type: Object,
|
|
default: () => {
|
|
return {};
|
|
}
|
|
},
|
|
typeOverride: {
|
|
type: Array,
|
|
default: () => {
|
|
return [];
|
|
}
|
|
}
|
|
},
|
|
|
|
data() {
|
|
this.$set(this.value, 'spec', this.value.spec || {});
|
|
this.$set(this.value.spec, 'namespaceDefaultResourceQuota', this.value.spec.namespaceDefaultResourceQuota || { limit: {} });
|
|
this.$set(this.value.spec, 'resourceQuota', this.value.spec.resourceQuota || { limit: {} });
|
|
|
|
return {
|
|
types: Object.keys(this.value.spec.resourceQuota.limit),
|
|
TYPES_OVERRIDE: this.typeOverride.length > 0 ? this.typeOverride : TYPES
|
|
};
|
|
},
|
|
|
|
computed: {
|
|
mappedTypes() {
|
|
return this.TYPES_OVERRIDE
|
|
.map(type => ({
|
|
label: this.t(type.labelKey),
|
|
units: type.units,
|
|
value: type.key
|
|
}));
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
updateType(i, type) {
|
|
this.$set(this.types, i, type);
|
|
},
|
|
remainingTypes(currentType) {
|
|
return this.mappedTypes
|
|
.filter(type => !this.types.includes(type.value) || type.value === currentType);
|
|
}
|
|
},
|
|
};
|
|
</script>
|
|
<template>
|
|
<ArrayList
|
|
v-model="types"
|
|
label="Resources"
|
|
:add-label="t('resourceQuota.add.label')"
|
|
:default-add-value="remainingTypes()[0] ? remainingTypes()[0].value : ''"
|
|
:add-allowed="remainingTypes().length > 0"
|
|
:mode="mode"
|
|
>
|
|
<template #columns="props">
|
|
<Row v-model="value" :mode="mode" :types="remainingTypes(types[props.i])" :type="types[props.i]" @type-change="updateType(props.i, $event)" />
|
|
</template>
|
|
</ArrayList>
|
|
</template>
|
|
<style lang="scss" scoped>
|
|
.row {
|
|
.headers {
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-evenly;
|
|
width: calc(100% - 75px);
|
|
|
|
span {
|
|
width: 100%;
|
|
}
|
|
}
|
|
}
|
|
</style>
|