mirror of
https://github.com/portainer/portainer.git
synced 2025-07-24 07:49:41 +02:00
Can't create kubernetes resources with a username longer than 63 characters (#4672)
* fix(kubernetes): truncate username when we create resource * fix(k8s): remove forbidden characters in owner label
This commit is contained in:
parent
cbd7fdc62e
commit
4cd468ce21
6 changed files with 13 additions and 6 deletions
|
@ -39,7 +39,8 @@ class KubernetesConfigMapConverter {
|
||||||
const res = new KubernetesConfigMapCreatePayload();
|
const res = new KubernetesConfigMapCreatePayload();
|
||||||
res.metadata.name = data.Name;
|
res.metadata.name = data.Name;
|
||||||
res.metadata.namespace = data.Namespace;
|
res.metadata.namespace = data.Namespace;
|
||||||
res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = data.ConfigurationOwner;
|
const configurationOwner = _.truncate(data.ConfigurationOwner, { length: 63, omission: '' });
|
||||||
|
res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;
|
||||||
res.data = data.Data;
|
res.data = data.Data;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import * as JsonPatch from 'fast-json-patch';
|
import * as JsonPatch from 'fast-json-patch';
|
||||||
|
|
||||||
import { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';
|
import { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';
|
||||||
import { KubernetesDaemonSetCreatePayload } from 'Kubernetes/models/daemon-set/payloads';
|
import { KubernetesDaemonSetCreatePayload } from 'Kubernetes/models/daemon-set/payloads';
|
||||||
import {
|
import {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import _ from 'lodash-es';
|
||||||
import { KubernetesNamespace } from 'Kubernetes/models/namespace/models';
|
import { KubernetesNamespace } from 'Kubernetes/models/namespace/models';
|
||||||
import { KubernetesNamespaceCreatePayload } from 'Kubernetes/models/namespace/payloads';
|
import { KubernetesNamespaceCreatePayload } from 'Kubernetes/models/namespace/payloads';
|
||||||
import { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';
|
import { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';
|
||||||
|
@ -20,7 +21,8 @@ class KubernetesNamespaceConverter {
|
||||||
res.metadata.name = namespace.Name;
|
res.metadata.name = namespace.Name;
|
||||||
res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = namespace.ResourcePoolName;
|
res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = namespace.ResourcePoolName;
|
||||||
if (namespace.ResourcePoolOwner) {
|
if (namespace.ResourcePoolOwner) {
|
||||||
res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = namespace.ResourcePoolOwner;
|
const resourcePoolOwner = _.truncate(namespace.ResourcePoolOwner, { length: 63, omission: '' });
|
||||||
|
res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = resourcePoolOwner;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,8 @@ class KubernetesSecretConverter {
|
||||||
const res = new KubernetesSecretCreatePayload();
|
const res = new KubernetesSecretCreatePayload();
|
||||||
res.metadata.name = secret.Name;
|
res.metadata.name = secret.Name;
|
||||||
res.metadata.namespace = secret.Namespace;
|
res.metadata.namespace = secret.Namespace;
|
||||||
res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = secret.ConfigurationOwner;
|
const configurationOwner = _.truncate(secret.configurationOwner, { length: 63, omission: '' });
|
||||||
|
res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;
|
||||||
res.stringData = secret.Data;
|
res.stringData = secret.Data;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ class KubernetesServiceConverter {
|
||||||
payload.metadata.namespace = service.Namespace;
|
payload.metadata.namespace = service.Namespace;
|
||||||
payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = service.StackName;
|
payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = service.StackName;
|
||||||
payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = service.ApplicationName;
|
payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = service.ApplicationName;
|
||||||
payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = service.ApplicationOwner;
|
payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = service.Application;
|
||||||
payload.spec.ports = service.Ports;
|
payload.spec.ports = service.Ports;
|
||||||
payload.spec.selector.app = service.ApplicationName;
|
payload.spec.selector.app = service.ApplicationName;
|
||||||
if (service.Headless) {
|
if (service.Headless) {
|
||||||
|
|
|
@ -10,7 +10,11 @@ class KubernetesCommonHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
static ownerToLabel(owner) {
|
static ownerToLabel(owner) {
|
||||||
return _.replace(owner, /[^-A-Za-z0-9_.]/g, '.');
|
let label = _.replace(owner, /[^-A-Za-z0-9_.]/g, '.');
|
||||||
|
label = _.truncate(label, { length: 63, omission: '' });
|
||||||
|
label = _.replace(label, /^[-_.]*/g, '');
|
||||||
|
label = _.replace(label, /[-_.]*$/g, '');
|
||||||
|
return label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export default KubernetesCommonHelper;
|
export default KubernetesCommonHelper;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue