mirror of
https://github.com/portainer/portainer.git
synced 2025-07-25 08:19:40 +02:00
refactor(app): migrate app summary section [EE-6239] (#10910)
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
This commit is contained in:
parent
7a4314032a
commit
abf517de28
61 changed files with 1461 additions and 661 deletions
|
@ -1,15 +1,12 @@
|
|||
import _ from 'lodash-es';
|
||||
import filesizeParser from 'filesize-parser';
|
||||
|
||||
import { KubernetesApplicationDataAccessPolicies, KubernetesApplicationDeploymentTypes, KubernetesApplicationTypes } from 'Kubernetes/models/application/models/appConstants';
|
||||
import {
|
||||
KubernetesApplication,
|
||||
KubernetesApplicationConfigurationVolume,
|
||||
KubernetesApplicationDataAccessPolicies,
|
||||
KubernetesApplicationDeploymentTypes,
|
||||
KubernetesApplicationPersistedFolder,
|
||||
KubernetesApplicationPort,
|
||||
KubernetesApplicationPublishingTypes,
|
||||
KubernetesApplicationTypes,
|
||||
KubernetesPortainerApplicationNameLabel,
|
||||
KubernetesPortainerApplicationNote,
|
||||
KubernetesPortainerApplicationOwnerLabel,
|
||||
|
@ -241,16 +238,16 @@ class KubernetesApplicationConverter {
|
|||
static apiPodToApplication(data, pods, service, ingresses) {
|
||||
const res = new KubernetesApplication();
|
||||
KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);
|
||||
res.ApplicationType = KubernetesApplicationTypes.POD;
|
||||
res.ApplicationType = KubernetesApplicationTypes.Pod;
|
||||
return res;
|
||||
}
|
||||
|
||||
static apiDeploymentToApplication(data, pods, service, ingresses) {
|
||||
const res = new KubernetesApplication();
|
||||
KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);
|
||||
res.ApplicationType = KubernetesApplicationTypes.DEPLOYMENT;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;
|
||||
res.ApplicationType = KubernetesApplicationTypes.Deployment;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.Replicated;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.Shared;
|
||||
res.RunningPodsCount = data.status.availableReplicas || data.status.replicas - data.status.unavailableReplicas || 0;
|
||||
res.TotalPodsCount = data.spec.replicas;
|
||||
return res;
|
||||
|
@ -259,9 +256,9 @@ class KubernetesApplicationConverter {
|
|||
static apiDaemonSetToApplication(data, pods, service, ingresses) {
|
||||
const res = new KubernetesApplication();
|
||||
KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);
|
||||
res.ApplicationType = KubernetesApplicationTypes.DAEMONSET;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.GLOBAL;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;
|
||||
res.ApplicationType = KubernetesApplicationTypes.DaemonSet;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.Global;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.Shared;
|
||||
res.RunningPodsCount = data.status.numberAvailable || data.status.desiredNumberScheduled - data.status.numberUnavailable || 0;
|
||||
res.TotalPodsCount = data.status.desiredNumberScheduled;
|
||||
return res;
|
||||
|
@ -270,9 +267,9 @@ class KubernetesApplicationConverter {
|
|||
static apiStatefulSetToapplication(data, pods, service, ingresses) {
|
||||
const res = new KubernetesApplication();
|
||||
KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);
|
||||
res.ApplicationType = KubernetesApplicationTypes.STATEFULSET;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.ISOLATED;
|
||||
res.ApplicationType = KubernetesApplicationTypes.StatefulSet;
|
||||
res.DeploymentType = KubernetesApplicationDeploymentTypes.Replicated;
|
||||
res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.Isolated;
|
||||
res.RunningPodsCount = data.status.readyReplicas || 0;
|
||||
res.TotalPodsCount = data.spec.replicas;
|
||||
res.HeadlessServiceName = data.spec.serviceName;
|
||||
|
@ -313,16 +310,7 @@ class KubernetesApplicationConverter {
|
|||
res.PublishedPorts = KubernetesApplicationHelper.generatePublishedPortsFormValuesFromPublishedPorts(app.ServiceType, app.PublishedPorts, ingresses);
|
||||
res.Containers = app.Containers;
|
||||
|
||||
const isIngress = _.filter(res.PublishedPorts, (p) => p.IngressName).length;
|
||||
if (app.ServiceType === KubernetesServiceTypes.LOAD_BALANCER) {
|
||||
res.PublishingType = KubernetesApplicationPublishingTypes.LOAD_BALANCER;
|
||||
} else if (app.ServiceType === KubernetesServiceTypes.NODE_PORT) {
|
||||
res.PublishingType = KubernetesApplicationPublishingTypes.NODE_PORT;
|
||||
} else if (app.ServiceType === KubernetesServiceTypes.CLUSTER_IP && isIngress) {
|
||||
res.PublishingType = KubernetesApplicationPublishingTypes.INGRESS;
|
||||
} else {
|
||||
res.PublishingType = KubernetesApplicationPublishingTypes.CLUSTER_IP;
|
||||
}
|
||||
res.PublishingType = app.ServiceType;
|
||||
|
||||
if (app.Pods && app.Pods.length) {
|
||||
KubernetesApplicationHelper.generatePlacementsFormValuesFromAffinity(res, app.Pods[0].Affinity);
|
||||
|
@ -338,20 +326,20 @@ class KubernetesApplicationConverter {
|
|||
const rwx = KubernetesApplicationHelper.hasRWX(claims);
|
||||
|
||||
const deployment =
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&
|
||||
(claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED))) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT;
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.Replicated &&
|
||||
(claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.Shared))) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.Deployment;
|
||||
|
||||
const statefulSet =
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.Replicated &&
|
||||
claims.length > 0 &&
|
||||
formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.ISOLATED) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.STATEFULSET;
|
||||
formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.Isolated) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.StatefulSet;
|
||||
|
||||
const daemonSet =
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.GLOBAL &&
|
||||
(claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED && rwx))) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.DAEMONSET;
|
||||
(formValues.DeploymentType === KubernetesApplicationDeploymentTypes.Global &&
|
||||
(claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.Shared && rwx))) ||
|
||||
formValues.ApplicationType === KubernetesApplicationTypes.DaemonSet;
|
||||
|
||||
let app;
|
||||
if (deployment) {
|
||||
|
@ -363,6 +351,7 @@ class KubernetesApplicationConverter {
|
|||
} else {
|
||||
throw new PortainerError('Unable to determine which association to use to convert form');
|
||||
}
|
||||
app.ApplicationType = formValues.ApplicationType;
|
||||
|
||||
let headlessService;
|
||||
if (statefulSet) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue