1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 15:59:41 +02:00

fix(app): allow editing pod services [EE-6480] (#10875)

* fix(app): allow editing pod services [EE-6480]
* address review comment

---------

Co-authored-by: testa113 <testa113>
Co-authored-by: prabhat khera <prabhat.khera@portainer.io>
This commit is contained in:
Ali 2024-01-23 10:10:16 +13:00 committed by GitHub
parent 7cba02226e
commit 4c0049edbe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 60 additions and 11 deletions

View file

@ -9,7 +9,9 @@ import {
KubernetesPortainerApplicationNote,
} from 'Kubernetes/models/application/models';
import KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';
import { KubernetesPod, KubernetesPodToleration, KubernetesPodAffinity, KubernetesPodContainer, KubernetesPodContainerTypes, KubernetesPodEviction } from 'Kubernetes/pod/models';
import KubernetesApplicationHelper from 'Kubernetes/helpers/application';
import { createPayloadFactory } from './payloads/create';
function computeStatus(statuses) {
@ -100,6 +102,32 @@ function computeContainers(data) {
}
export default class KubernetesPodConverter {
static applicationFormValuesToPod(formValues, volumeClaims) {
let serviceSelector = {};
if (formValues.Services.length) {
serviceSelector = formValues.Services[0].Selector || { app: formValues.Name };
}
const res = new KubernetesPod();
res.Namespace = formValues.ResourcePool.Namespace.Name;
res.Name = formValues.Name;
res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;
res.ApplicationOwner = formValues.ApplicationOwner;
res.ApplicationName = formValues.Name;
res.ImageModel = formValues.ImageModel;
res.CpuLimit = formValues.CpuLimit;
res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);
res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);
res.Containers = formValues.Containers;
res.ApplicationType = formValues.ApplicationType;
res.ServiceSelector = serviceSelector;
res.Labels = formValues.Labels;
KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);
KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.ConfigMaps, formValues.Secrets);
KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);
return res;
}
static apiToModel(data) {
const res = new KubernetesPod();
res.Id = data.metadata.uid;
@ -115,6 +143,7 @@ export default class KubernetesPodConverter {
res.Affinity = computeAffinity(data.spec.affinity);
res.NodeSelector = data.spec.nodeSelector;
res.Tolerations = computeTolerations(data.spec.tolerations);
res.Labels = data.metadata.labels;
return res;
}
@ -140,6 +169,7 @@ function createPayload(pod) {
payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = pod.StackName;
payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = pod.ApplicationName;
payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pod.ApplicationOwner;
payload.metadata.labels = { ...(pod.Labels || {}), ...(pod.ServiceSelector || {}), ...payload.metadata.labels };
if (pod.Note) {
payload.metadata.annotations[KubernetesPortainerApplicationNote] = pod.Note;
} else {