mirror of https://github.com/portainer/portainer
81 lines
3.5 KiB
JavaScript
81 lines
3.5 KiB
JavaScript
import _ from 'lodash-es';
|
|
import * as JsonPatch from 'fast-json-patch';
|
|
|
|
import { KubernetesPersistentVolumeClaim } from 'Kubernetes/models/volume/models';
|
|
import { KubernetesPersistentVolumClaimCreatePayload } from 'Kubernetes/models/volume/payloads';
|
|
import { KubernetesPortainerApplicationOwnerLabel, KubernetesPortainerApplicationNameLabel } from 'Kubernetes/models/application/models';
|
|
|
|
class KubernetesPersistentVolumeClaimConverter {
|
|
static apiToPersistentVolumeClaim(data, storageClasses, yaml) {
|
|
const res = new KubernetesPersistentVolumeClaim();
|
|
res.Id = data.metadata.uid;
|
|
res.Name = data.metadata.name;
|
|
res.Namespace = data.metadata.namespace;
|
|
res.CreationDate = data.metadata.creationTimestamp;
|
|
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] : '';
|
|
res.ApplicationName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationNameLabel] : '';
|
|
return res;
|
|
}
|
|
|
|
/**
|
|
* Generate KubernetesPersistentVolumeClaim list from KubernetesApplicationFormValues
|
|
* @param {KubernetesApplicationFormValues} formValues
|
|
*/
|
|
static applicationFormValuesToVolumeClaims(formValues) {
|
|
_.remove(formValues.PersistedFolders, (item) => item.NeedsDeletion);
|
|
const res = _.map(formValues.PersistedFolders, (item) => {
|
|
const pvc = new KubernetesPersistentVolumeClaim();
|
|
if (!_.isEmpty(item.ExistingVolume)) {
|
|
const existantPVC = item.ExistingVolume.PersistentVolumeClaim;
|
|
pvc.Name = existantPVC.Name;
|
|
if (item.PersistentVolumeClaimName) {
|
|
pvc.PreviousName = item.PersistentVolumeClaimName;
|
|
}
|
|
pvc.StorageClass = existantPVC.StorageClass;
|
|
pvc.Storage = existantPVC.Storage.charAt(0);
|
|
pvc.CreationDate = existantPVC.CreationDate;
|
|
pvc.Id = existantPVC.Id;
|
|
} else {
|
|
if (item.PersistentVolumeClaimName) {
|
|
pvc.Name = item.PersistentVolumeClaimName;
|
|
pvc.PreviousName = item.PersistentVolumeClaimName;
|
|
} else {
|
|
pvc.Name = formValues.Name + '-' + pvc.Name;
|
|
}
|
|
pvc.Storage = '' + item.Size + item.SizeUnit.charAt(0);
|
|
pvc.StorageClass = item.StorageClass;
|
|
}
|
|
pvc.MountPath = item.ContainerPath;
|
|
pvc.Namespace = formValues.ResourcePool.Namespace.Name;
|
|
pvc.ApplicationOwner = formValues.ApplicationOwner;
|
|
pvc.ApplicationName = formValues.Name;
|
|
return pvc;
|
|
});
|
|
return res;
|
|
}
|
|
|
|
static createPayload(pvc) {
|
|
const res = new KubernetesPersistentVolumClaimCreatePayload();
|
|
res.metadata.name = pvc.Name;
|
|
res.metadata.namespace = pvc.Namespace;
|
|
res.spec.resources.requests.storage = pvc.Storage;
|
|
res.spec.storageClassName = pvc.StorageClass ? pvc.StorageClass.Name : '';
|
|
res.metadata.labels.app = pvc.ApplicationName;
|
|
res.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pvc.ApplicationOwner;
|
|
res.metadata.labels[KubernetesPortainerApplicationNameLabel] = pvc.ApplicationName;
|
|
return res;
|
|
}
|
|
|
|
static patchPayload(oldPVC, newPVC) {
|
|
const oldPayload = KubernetesPersistentVolumeClaimConverter.createPayload(oldPVC);
|
|
const newPayload = KubernetesPersistentVolumeClaimConverter.createPayload(newPVC);
|
|
const payload = JsonPatch.compare(oldPayload, newPayload);
|
|
return payload;
|
|
}
|
|
}
|
|
|
|
export default KubernetesPersistentVolumeClaimConverter;
|