From 342a0d6d22cb4bbc54141544b510df95439d16e2 Mon Sep 17 00:00:00 2001 From: cong meng Date: Thu, 17 Dec 2020 12:20:18 +1300 Subject: [PATCH] fix(k8s/application): transform username to be dns compliant (#4595) (#4601) * fix(k8s/application): transform username to be dns compliant (#4595) * fix(k8s/application): transform username to be dns compliant for configurations and resource pools(#4595) * fix(k8s/application): update regex to replace all special characters (#4595) Co-authored-by: Simon Meng --- app/kubernetes/converters/application.js | 3 +++ app/kubernetes/helpers/commonHelper.js | 4 ++++ app/kubernetes/services/configurationService.js | 3 +++ app/kubernetes/services/resourcePoolService.js | 3 +++ 4 files changed, 13 insertions(+) diff --git a/app/kubernetes/converters/application.js b/app/kubernetes/converters/application.js index 1f863de1f..a1fe39b44 100644 --- a/app/kubernetes/converters/application.js +++ b/app/kubernetes/converters/application.js @@ -27,6 +27,7 @@ import KubernetesServiceConverter from 'Kubernetes/converters/service'; import KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim'; import PortainerError from 'Portainer/error'; import { KubernetesIngressHelper } from 'Kubernetes/ingress/helper'; +import KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper'; function _apiPortsToPublishedPorts(pList, pRefs) { const ports = _.map(pList, (item) => { @@ -294,6 +295,8 @@ class KubernetesApplicationConverter { } static applicationFormValuesToApplication(formValues) { + formValues.ApplicationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ApplicationOwner); + const claims = KubernetesPersistentVolumeClaimConverter.applicationFormValuesToVolumeClaims(formValues); const rwx = _.find(claims, (item) => _.includes(item.StorageClass.AccessModes, 'RWX')) !== undefined; diff --git a/app/kubernetes/helpers/commonHelper.js b/app/kubernetes/helpers/commonHelper.js index af461775f..9767de3b9 100644 --- a/app/kubernetes/helpers/commonHelper.js +++ b/app/kubernetes/helpers/commonHelper.js @@ -8,5 +8,9 @@ class KubernetesCommonHelper { _.set(obj, path, value); } } + + static ownerToLabel(owner) { + return _.replace(owner, /[^-A-Za-z0-9_.]/g, '.'); + } } export default KubernetesCommonHelper; diff --git a/app/kubernetes/services/configurationService.js b/app/kubernetes/services/configurationService.js index dbc69a7db..e6600e6cd 100644 --- a/app/kubernetes/services/configurationService.js +++ b/app/kubernetes/services/configurationService.js @@ -4,6 +4,7 @@ import KubernetesConfigurationConverter from 'Kubernetes/converters/configuratio import KubernetesConfigMapConverter from 'Kubernetes/converters/configMap'; import KubernetesSecretConverter from 'Kubernetes/converters/secret'; import { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models'; +import KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper'; class KubernetesConfigurationService { /* @ngInject */ @@ -67,6 +68,8 @@ class KubernetesConfigurationService { * CREATE */ async createAsync(formValues) { + formValues.ConfigurationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ConfigurationOwner); + try { if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) { const configMap = KubernetesConfigMapConverter.configurationFormValuesToConfigMap(formValues); diff --git a/app/kubernetes/services/resourcePoolService.js b/app/kubernetes/services/resourcePoolService.js index 4320bf750..a1b1029aa 100644 --- a/app/kubernetes/services/resourcePoolService.js +++ b/app/kubernetes/services/resourcePoolService.js @@ -7,6 +7,7 @@ import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelpe import { KubernetesNamespace } from 'Kubernetes/models/namespace/models'; import KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper'; import { KubernetesIngressConverter } from 'Kubernetes/ingress/converter'; +import KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper'; class KubernetesResourcePoolService { /* @ngInject */ @@ -73,6 +74,8 @@ class KubernetesResourcePoolService { * @param {KubernetesResourcePoolFormValues} formValues */ async createAsync(formValues) { + formValues.Owner = KubernetesCommonHelper.ownerToLabel(formValues.Owner); + try { const namespace = new KubernetesNamespace(); namespace.Name = formValues.Name;