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;