1
0
Fork 0
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:
Alice Groux 2021-02-26 16:50:33 +01:00 committed by GitHub
parent 158bdae10e
commit ccf6babc02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 951 additions and 976 deletions

View file

@ -1,4 +1,4 @@
import * as _ from 'lodash-es';
import _ from 'lodash-es';
import filesizeParser from 'filesize-parser';
import {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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';

View file

@ -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 {
/**