mirror of
https://github.com/portainer/portainer.git
synced 2025-07-25 08:19:40 +02:00
refactor(app): backport technical changes (#4679)
* refactor(app): backport technical changes * refactor(app): remove EE only features * feat(app): small review changes to match EE codebase layout on some files Co-authored-by: xAt0mZ <baron_l@epitech.eu>
This commit is contained in:
parent
158bdae10e
commit
ccf6babc02
40 changed files with 951 additions and 976 deletions
|
@ -1,4 +1,4 @@
|
|||
import * as _ from 'lodash-es';
|
||||
import _ from 'lodash-es';
|
||||
import filesizeParser from 'filesize-parser';
|
||||
|
||||
import {
|
||||
|
|
|
@ -12,7 +12,7 @@ class KubernetesPersistentVolumeClaimConverter {
|
|||
res.Name = data.metadata.name;
|
||||
res.Namespace = data.metadata.namespace;
|
||||
res.CreationDate = data.metadata.creationTimestamp;
|
||||
res.Storage = data.spec.resources.requests.storage.replace('i', 'B');
|
||||
res.Storage = `${data.spec.resources.requests.storage}B`;
|
||||
res.StorageClass = _.find(storageClasses, { Name: data.spec.storageClassName });
|
||||
res.Yaml = yaml ? yaml.data : '';
|
||||
res.ApplicationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationOwnerLabel] : '';
|
||||
|
@ -35,7 +35,7 @@ class KubernetesPersistentVolumeClaimConverter {
|
|||
pvc.PreviousName = item.PersistentVolumeClaimName;
|
||||
}
|
||||
pvc.StorageClass = existantPVC.StorageClass;
|
||||
pvc.Storage = existantPVC.Storage.charAt(0) + 'i';
|
||||
pvc.Storage = existantPVC.Storage.charAt(0);
|
||||
pvc.CreationDate = existantPVC.CreationDate;
|
||||
pvc.Id = existantPVC.Id;
|
||||
} else {
|
||||
|
@ -45,7 +45,7 @@ class KubernetesPersistentVolumeClaimConverter {
|
|||
} else {
|
||||
pvc.Name = formValues.Name + '-' + pvc.Name;
|
||||
}
|
||||
pvc.Storage = '' + item.Size + item.SizeUnit.charAt(0) + 'i';
|
||||
pvc.Storage = '' + item.Size + item.SizeUnit.charAt(0);
|
||||
pvc.StorageClass = item.StorageClass;
|
||||
}
|
||||
pvc.MountPath = item.ContainerPath;
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
import _ from 'lodash-es';
|
||||
|
||||
import { KubernetesResourcePool } from 'Kubernetes/models/resource-pool/models';
|
||||
import { KubernetesNamespace } from 'Kubernetes/models/namespace/models';
|
||||
import { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';
|
||||
import KubernetesResourceQuotaConverter from './resourceQuota';
|
||||
|
||||
class KubernetesResourcePoolConverter {
|
||||
static apiToResourcePool(namespace) {
|
||||
|
@ -7,6 +12,24 @@ class KubernetesResourcePoolConverter {
|
|||
res.Yaml = namespace.Yaml;
|
||||
return res;
|
||||
}
|
||||
|
||||
static formValuesToResourcePool(formValues) {
|
||||
const namespace = new KubernetesNamespace();
|
||||
namespace.Name = formValues.Name;
|
||||
namespace.ResourcePoolName = formValues.Name;
|
||||
namespace.ResourcePoolOwner = formValues.Owner;
|
||||
|
||||
const quota = KubernetesResourceQuotaConverter.resourcePoolFormValuesToResourceQuota(formValues);
|
||||
|
||||
const ingMap = _.map(formValues.IngressClasses, (c) => {
|
||||
if (c.Selected) {
|
||||
c.Namespace = namespace.Name;
|
||||
return KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);
|
||||
}
|
||||
});
|
||||
const ingresses = _.without(ingMap, undefined);
|
||||
return [namespace, quota, ingresses];
|
||||
}
|
||||
}
|
||||
|
||||
export default KubernetesResourcePoolConverter;
|
||||
|
|
|
@ -1,10 +1,20 @@
|
|||
import * as JsonPatch from 'fast-json-patch';
|
||||
import filesizeParser from 'filesize-parser';
|
||||
|
||||
import { KubernetesResourceQuota } from 'Kubernetes/models/resource-quota/models';
|
||||
import { KubernetesResourceQuotaCreatePayload, KubernetesResourceQuotaUpdatePayload } from 'Kubernetes/models/resource-quota/payloads';
|
||||
import {
|
||||
KubernetesResourceQuota,
|
||||
KubernetesPortainerResourceQuotaCPULimit,
|
||||
KubernetesPortainerResourceQuotaMemoryLimit,
|
||||
KubernetesPortainerResourceQuotaCPURequest,
|
||||
KubernetesPortainerResourceQuotaMemoryRequest,
|
||||
KubernetesResourceQuotaDefaults,
|
||||
} from 'Kubernetes/models/resource-quota/models';
|
||||
import { KubernetesResourceQuotaCreatePayload } from 'Kubernetes/models/resource-quota/payloads';
|
||||
import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';
|
||||
import { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';
|
||||
import KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';
|
||||
import KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';
|
||||
import { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';
|
||||
|
||||
class KubernetesResourceQuotaConverter {
|
||||
static apiToResourceQuota(data, yaml) {
|
||||
|
@ -14,21 +24,21 @@ class KubernetesResourceQuotaConverter {
|
|||
res.Name = data.metadata.name;
|
||||
res.CpuLimit = 0;
|
||||
res.MemoryLimit = 0;
|
||||
if (data.spec.hard && data.spec.hard['limits.cpu']) {
|
||||
res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard['limits.cpu']);
|
||||
if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]) {
|
||||
res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]);
|
||||
}
|
||||
if (data.spec.hard && data.spec.hard['limits.memory']) {
|
||||
res.MemoryLimit = filesizeParser(data.spec.hard['limits.memory'], { base: 10 });
|
||||
if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit]) {
|
||||
res.MemoryLimit = filesizeParser(data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });
|
||||
}
|
||||
|
||||
res.MemoryLimitUsed = 0;
|
||||
if (data.status.used && data.status.used['limits.memory']) {
|
||||
res.MemoryLimitUsed = filesizeParser(data.status.used['limits.memory'], { base: 10 });
|
||||
if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaMemoryLimit]) {
|
||||
res.MemoryLimitUsed = filesizeParser(data.status.used[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });
|
||||
}
|
||||
|
||||
res.CpuLimitUsed = 0;
|
||||
if (data.status.used && data.status.used['limits.cpu']) {
|
||||
res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used['limits.cpu']);
|
||||
if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaCPULimit]) {
|
||||
res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used[KubernetesPortainerResourceQuotaCPULimit]);
|
||||
}
|
||||
res.Yaml = yaml ? yaml.data : '';
|
||||
res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';
|
||||
|
@ -40,48 +50,54 @@ class KubernetesResourceQuotaConverter {
|
|||
const res = new KubernetesResourceQuotaCreatePayload();
|
||||
res.metadata.name = KubernetesResourceQuotaHelper.generateResourceQuotaName(quota.Namespace);
|
||||
res.metadata.namespace = quota.Namespace;
|
||||
res.spec.hard['requests.cpu'] = quota.CpuLimit;
|
||||
res.spec.hard['requests.memory'] = quota.MemoryLimit;
|
||||
res.spec.hard['limits.cpu'] = quota.CpuLimit;
|
||||
res.spec.hard['limits.memory'] = quota.MemoryLimit;
|
||||
KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPURequest}']`, quota.CpuLimit);
|
||||
KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryRequest}']`, quota.MemoryLimit);
|
||||
KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPULimit}']`, quota.CpuLimit);
|
||||
KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryLimit}']`, quota.MemoryLimit);
|
||||
res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;
|
||||
if (quota.ResourcePoolOwner) {
|
||||
res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;
|
||||
}
|
||||
if (!quota.CpuLimit || quota.CpuLimit === 0) {
|
||||
delete res.spec.hard['requests.cpu'];
|
||||
delete res.spec.hard['limits.cpu'];
|
||||
}
|
||||
if (!quota.MemoryLimit || quota.MemoryLimit === 0) {
|
||||
delete res.spec.hard['requests.memory'];
|
||||
delete res.spec.hard['limits.memory'];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static updatePayload(quota) {
|
||||
const res = new KubernetesResourceQuotaUpdatePayload();
|
||||
res.metadata.name = quota.Name;
|
||||
res.metadata.namespace = quota.Namespace;
|
||||
const res = KubernetesResourceQuotaConverter.createPayload(quota);
|
||||
res.metadata.uid = quota.Id;
|
||||
res.spec.hard['requests.cpu'] = quota.CpuLimit;
|
||||
res.spec.hard['requests.memory'] = quota.MemoryLimit;
|
||||
res.spec.hard['limits.cpu'] = quota.CpuLimit;
|
||||
res.spec.hard['limits.memory'] = quota.MemoryLimit;
|
||||
res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;
|
||||
if (quota.ResourcePoolOwner) {
|
||||
res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;
|
||||
}
|
||||
if (!quota.CpuLimit || quota.CpuLimit === 0) {
|
||||
delete res.spec.hard['requests.cpu'];
|
||||
delete res.spec.hard['limits.cpu'];
|
||||
}
|
||||
if (!quota.MemoryLimit || quota.MemoryLimit === 0) {
|
||||
delete res.spec.hard['requests.memory'];
|
||||
delete res.spec.hard['limits.memory'];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static patchPayload(oldQuota, newQuota) {
|
||||
const oldPayload = KubernetesResourceQuotaConverter.createPayload(oldQuota);
|
||||
const newPayload = KubernetesResourceQuotaConverter.createPayload(newQuota);
|
||||
const payload = JsonPatch.compare(oldPayload, newPayload);
|
||||
return payload;
|
||||
}
|
||||
|
||||
static quotaToResourcePoolFormValues(quota) {
|
||||
const res = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);
|
||||
res.Name = quota.Namespace;
|
||||
res.CpuLimit = quota.CpuLimit;
|
||||
res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimit);
|
||||
if (res.CpuLimit || res.MemoryLimit) {
|
||||
res.HasQuota = true;
|
||||
}
|
||||
res.StorageClasses = quota.StorageRequests;
|
||||
return res;
|
||||
}
|
||||
|
||||
static resourcePoolFormValuesToResourceQuota(formValues) {
|
||||
if (formValues.HasQuota) {
|
||||
const quota = new KubernetesResourceQuota(formValues.Name);
|
||||
if (formValues.HasQuota) {
|
||||
quota.CpuLimit = formValues.CpuLimit;
|
||||
quota.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);
|
||||
}
|
||||
quota.ResourcePoolName = formValues.Name;
|
||||
quota.ResourcePoolOwner = formValues.Owner;
|
||||
return quota;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default KubernetesResourceQuotaConverter;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import * as _ from 'lodash-es';
|
||||
import _ from 'lodash-es';
|
||||
import * as JsonPatch from 'fast-json-patch';
|
||||
|
||||
import { KubernetesServiceCreatePayload } from 'Kubernetes/models/service/payloads';
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import * as JsonPatch from 'fast-json-patch';
|
||||
|
||||
import { KubernetesStorageClass } from 'Kubernetes/models/storage-class/models';
|
||||
import { KubernetesStorageClassCreatePayload } from 'Kubernetes/models/storage-class/payload';
|
||||
import * as JsonPatch from 'fast-json-patch';
|
||||
|
||||
class KubernetesStorageClassConverter {
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue