diff --git a/app/kubernetes/converters/configuration.js b/app/kubernetes/converters/configuration.js index 04bc54d44..c31c8d006 100644 --- a/app/kubernetes/converters/configuration.js +++ b/app/kubernetes/converters/configuration.js @@ -14,6 +14,7 @@ class KubernetesConfigurationConverter { _.forEach(secret.Data, (entry) => { res.Data[entry.Key] = entry.Value; }); + res.data = res.Data; res.ConfigurationOwner = secret.ConfigurationOwner; res.IsRegistrySecret = secret.IsRegistrySecret; res.SecretType = secret.SecretType; @@ -34,6 +35,7 @@ class KubernetesConfigurationConverter { _.forEach(configMap.Data, (entry) => { res.Data[entry.Key] = entry.Value; }); + res.data = res.Data; res.ConfigurationOwner = configMap.ConfigurationOwner; return res; } diff --git a/app/kubernetes/converters/secret.js b/app/kubernetes/converters/secret.js index 45922d4d6..1ab9702b1 100644 --- a/app/kubernetes/converters/secret.js +++ b/app/kubernetes/converters/secret.js @@ -90,6 +90,7 @@ class KubernetesSecretConverter { } return entry; }); + res.data = res.Data; return res; } diff --git a/app/kubernetes/helpers/application/index.js b/app/kubernetes/helpers/application/index.js index 21ff38277..9440b910a 100644 --- a/app/kubernetes/helpers/application/index.js +++ b/app/kubernetes/helpers/application/index.js @@ -6,7 +6,6 @@ import { KubernetesApplicationAutoScalerFormValue, KubernetesApplicationConfigurationFormValue, KubernetesApplicationConfigurationFormValueOverridenKey, - KubernetesApplicationConfigurationFormValueOverridenKeyTypes, KubernetesApplicationEnvironmentVariableFormValue, KubernetesApplicationPersistedFolderFormValue, KubernetesApplicationPlacementFormValue, @@ -169,21 +168,25 @@ class KubernetesApplicationHelper { const overrideThreshold = max - _.max(_.map(keys, 'VolCount')); const res = _.map(new Array(max), () => new KubernetesApplicationConfigurationFormValue()); _.forEach(res, (item, index) => { - item.SelectedConfiguration = cfg; + item.selectedConfiguration = cfg; + // workaround to load configurations in the app in the select inputs + // this should be removed when the edit parent view is migrated to react + item.selectedConfiguration.metadata = {}; + item.selectedConfiguration.metadata.name = cfg.Name; const overriden = index >= overrideThreshold; if (overriden) { - item.Overriden = true; - item.OverridenKeys = _.map(keys, (k) => { + item.overriden = true; + item.overridenKeys = _.map(keys, (k) => { const fvKey = new KubernetesApplicationConfigurationFormValueOverridenKey(); - fvKey.Key = k.Key; + fvKey.key = k.Key; if (!k.Count) { - // !k.Count indicates k.Key is new added to the configuration and has not been loaded to the application yet - fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.NONE; + // !k.Count indicates k.key is new added to the configuration and has not been loaded to the application yet + fvKey.type = 'NONE'; } else if (index < k.EnvCount) { - fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT; + fvKey.type = 'ENVIRONMENT'; } else { - fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM; - fvKey.Path = k.Sum[index].rootMountPath; + fvKey.type = 'FILESYSTEM'; + fvKey.path = k.Sum[index].rootMountPath; } return fvKey; }); @@ -201,46 +204,46 @@ class KubernetesApplicationHelper { let finalMounts = []; _.forEach(configurations, (config) => { - const isBasic = config.SelectedConfiguration.Kind === KubernetesConfigurationKinds.CONFIGMAP; + const isBasic = config.selectedConfiguration.kind === 'ConfigMap'; - if (!config.Overriden) { - const envKeys = _.keys(config.SelectedConfiguration.Data); + if (!config.overriden) { + const envKeys = _.keys(config.selectedConfiguration.data); _.forEach(envKeys, (item) => { const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload(); res.name = item; if (isBasic) { - res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name; + res.valueFrom.configMapKeyRef.name = config.selectedConfiguration.metadata.name; res.valueFrom.configMapKeyRef.key = item; } else { - res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name; + res.valueFrom.secretKeyRef.name = config.selectedConfiguration.metadata.name; res.valueFrom.secretKeyRef.key = item; } finalEnv.push(res); }); } else { - const envKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT); + const envKeys = _.filter(config.overridenKeys, (item) => item.type === 'ENVIRONMENT'); _.forEach(envKeys, (item) => { const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload(); - res.name = item.Key; + res.name = item.key; if (isBasic) { - res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name; - res.valueFrom.configMapKeyRef.key = item.Key; + res.valueFrom.configMapKeyRef.name = config.selectedConfiguration.metadata.name; + res.valueFrom.configMapKeyRef.key = item.key; } else { - res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name; - res.valueFrom.secretKeyRef.key = item.Key; + res.valueFrom.secretKeyRef.name = config.selectedConfiguration.metadata.name; + res.valueFrom.secretKeyRef.key = item.key; } finalEnv.push(res); }); - const volKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM); - const groupedVolKeys = _.groupBy(volKeys, 'Path'); + const volKeys = _.filter(config.overridenKeys, (item) => item.type === 'FILESYSTEM'); + const groupedVolKeys = _.groupBy(volKeys, 'path'); _.forEach(groupedVolKeys, (items, path) => { const volumeName = KubernetesVolumeHelper.generatedApplicationConfigVolumeName(app.Name); - const configurationName = config.SelectedConfiguration.Name; + const configurationName = config.selectedConfiguration.metadata.name; const itemsMap = _.map(items, (item) => { const entry = new KubernetesApplicationVolumeEntryPayload(); - entry.key = item.Key; - entry.path = item.Key; + entry.key = item.key; + entry.path = item.key; return entry; }); diff --git a/app/kubernetes/models/application/formValues.js b/app/kubernetes/models/application/formValues.js index f4add318b..243765758 100644 --- a/app/kubernetes/models/application/formValues.js +++ b/app/kubernetes/models/application/formValues.js @@ -30,19 +30,13 @@ export function KubernetesApplicationFormValues() { this.OriginalIngresses = undefined; } -export const KubernetesApplicationConfigurationFormValueOverridenKeyTypes = Object.freeze({ - NONE: 0, - ENVIRONMENT: 1, - FILESYSTEM: 2, -}); - /** * KubernetesApplicationConfigurationFormValueOverridenKey Model */ const _KubernetesApplicationConfigurationFormValueOverridenKey = Object.freeze({ - Key: '', - Path: '', - Type: KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT, + key: '', + path: '', + type: 'ENVIRONMENT', }); export class KubernetesApplicationConfigurationFormValueOverridenKey { @@ -55,9 +49,9 @@ export class KubernetesApplicationConfigurationFormValueOverridenKey { * KubernetesApplicationConfigurationFormValue Model */ const _KubernetesApplicationConfigurationFormValue = Object.freeze({ - SelectedConfiguration: undefined, - Overriden: false, - OverridenKeys: [], // KubernetesApplicationConfigurationFormValueOverridenKey list + selectedConfiguration: undefined, + overriden: false, + overridenKeys: [], }); export class KubernetesApplicationConfigurationFormValue { diff --git a/app/kubernetes/react/components/index.ts b/app/kubernetes/react/components/index.ts index 16e531a75..a6bc99a7f 100644 --- a/app/kubernetes/react/components/index.ts +++ b/app/kubernetes/react/components/index.ts @@ -25,6 +25,9 @@ import { ApplicationsStacksDatatable } from '@/react/kubernetes/applications/Lis import { NodesDatatable } from '@/react/kubernetes/cluster/HomeView/NodesDatatable'; import { StackName } from '@/react/kubernetes/DeployView/StackName/StackName'; import { kubeEnvVarValidationSchema } from '@/react/kubernetes/applications/ApplicationForm/kubeEnvVarValidationSchema'; +import { SecretsFormSection } from '@/react/kubernetes/applications/components/ConfigurationsFormSection/SecretsFormSection'; +import { configurationsValidationSchema } from '@/react/kubernetes/applications/components/ConfigurationsFormSection/configurationValidationSchema'; +import { ConfigMapsFormSection } from '@/react/kubernetes/applications/components/ConfigurationsFormSection/ConfigMapsFormSection'; import { EnvironmentVariablesFieldset } from '@@/form-components/EnvironmentVariablesFieldset'; @@ -186,3 +189,19 @@ withFormValidation( // use kubeEnvVarValidationSchema instead of envVarValidation to add a regex matches rule kubeEnvVarValidationSchema ); + +withFormValidation( + ngModule, + withUIRouter(withCurrentUser(withReactQuery(ConfigMapsFormSection))), + 'configMapsFormSection', + ['values', 'onChange', 'namespace'], + configurationsValidationSchema +); + +withFormValidation( + ngModule, + withUIRouter(withCurrentUser(withReactQuery(SecretsFormSection))), + 'secretsFormSection', + ['values', 'onChange', 'namespace'], + configurationsValidationSchema +); diff --git a/app/kubernetes/views/applications/create/createApplication.html b/app/kubernetes/views/applications/create/createApplication.html index 56c9bc261..1a597a51d 100644 --- a/app/kubernetes/views/applications/create/createApplication.html +++ b/app/kubernetes/views/applications/create/createApplication.html @@ -381,7 +381,7 @@
{{ config.SelectedConfiguration.Name }}
- ConfigMap as environment variables:
-
- {{ key }}
{{ $last ? '' : ', ' }}
-
-
-
{{ config.SelectedConfiguration.Name }}
Secret as environment variables:
-
- {{ key }}
{{ $last ? '' : ', ' }}
-
-
-
{item.selectedConfiguration.metadata?.name}
+ ConfigMap as environment variables:
+ {Object.keys(configurationData).map((key, index) => (
+
+ {key}
+ {index < Object.keys(configurationData).length - 1 ? ', ' : ''}
+
+ ))}
+