diff --git a/app/kubernetes/services/configMapService.js b/app/kubernetes/services/configMapService.js index be863eaeb..b8ebbe38b 100644 --- a/app/kubernetes/services/configMapService.js +++ b/app/kubernetes/services/configMapService.js @@ -28,8 +28,19 @@ class KubernetesConfigMapService { this.KubernetesConfigMaps(namespace).get(params).$promise, this.KubernetesConfigMaps(namespace).getYaml(params).$promise, ]); - const configMap = KubernetesConfigMapConverter.apiToConfigMap(rawPromise.value, yamlPromise.value); - return configMap; + + if (_.get(rawPromise, 'reason.status') == 404 && _.get(yamlPromise, 'reason.status') == 404) { + return KubernetesConfigMapConverter.defaultConfigMap(namespace, name); + } + + // Saving binary data to 'data' field in configMap Object is not allowed by kubernetes and getYaml() may get + // an error. We should keep binary data to 'binaryData' field instead of 'data'. Before that, we + // use response from get() and ignore 500 error as a workaround. + if (rawPromise.value) { + return KubernetesConfigMapConverter.apiToConfigMap(rawPromise.value, yamlPromise.value); + } + + throw new PortainerError('Unable to retrieve config map ', name); } catch (err) { if (err.status === 404) { return KubernetesConfigMapConverter.defaultConfigMap(namespace, name);