1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

fix: Remove incorrect KubeObject validations

- Default to using the ensured selfLink for ID if UID is not present

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-05-24 10:19:49 -04:00
parent 90c449cc0d
commit 18b89d9a85
3 changed files with 124 additions and 25 deletions

View File

@ -25,8 +25,8 @@ export interface KubeJsonApiData<
Status = unknown, Status = unknown,
Spec = unknown, Spec = unknown,
> { > {
kind: string; readonly kind: string;
apiVersion: string; readonly apiVersion: string;
metadata: Metadata; metadata: Metadata;
status?: Status; status?: Status;
spec?: Spec; spec?: Spec;
@ -227,9 +227,6 @@ export type KubeJsonApiObjectMetadata<Namespaced extends KubeObjectScope = KubeO
export type KubeObjectMetadata<Namespaced extends KubeObjectScope = KubeObjectScope> = export type KubeObjectMetadata<Namespaced extends KubeObjectScope = KubeObjectScope> =
KubeJsonApiObjectMetadata<Namespaced> & { KubeJsonApiObjectMetadata<Namespaced> & {
readonly selfLink: string; readonly selfLink: string;
readonly uid: string;
readonly name: string;
readonly resourceVersion: string;
}; };
export type NamespaceScopedMetadata = KubeObjectMetadata<KubeObjectScope.Namespace>; export type NamespaceScopedMetadata = KubeObjectMetadata<KubeObjectScope.Namespace>;

View File

@ -0,0 +1,116 @@
import { KubeObject } from "./kube-object";
describe("kube object tests", () => {
it("should allow an object to be created when missing uid", () => {
expect(
() =>
new KubeObject({
apiVersion: "metrics.k8s.io/v1beta1",
containers: [
{
name: "cert-manager",
usage: {
cpu: "472721n",
memory: "74404Ki",
},
},
],
kind: "PodMetrics",
metadata: {
creationTimestamp: "2023-05-24T14:17:01Z",
labels: {
app: "cert-manager",
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/instance": "cert-manager",
"app.kubernetes.io/managed-by": "Helm",
"app.kubernetes.io/name": "cert-manager",
"app.kubernetes.io/version": "v1.5.5",
"helm.sh/chart": "cert-manager-v1.5.5",
"pod-template-hash": "54cbdfb45c",
},
name: "cert-manager-54cbdfb45c-n4kp9",
namespace: "cert-manager",
selfLink: "/apis/metrics.k8s.io/v1beta1/namespaces/cert-manager/pods/cert-manager-54cbdfb45c-n4kp9",
resourceVersion: "123",
},
timestamp: "2023-05-24T14:16:39Z",
window: "16s",
}),
).not.toThrow();
});
it("should allow an object to be created when missing resourceVersion", () => {
expect(
() =>
new KubeObject({
apiVersion: "metrics.k8s.io/v1beta1",
containers: [
{
name: "cert-manager",
usage: {
cpu: "472721n",
memory: "74404Ki",
},
},
],
kind: "PodMetrics",
metadata: {
creationTimestamp: "2023-05-24T14:17:01Z",
labels: {
app: "cert-manager",
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/instance": "cert-manager",
"app.kubernetes.io/managed-by": "Helm",
"app.kubernetes.io/name": "cert-manager",
"app.kubernetes.io/version": "v1.5.5",
"helm.sh/chart": "cert-manager-v1.5.5",
"pod-template-hash": "54cbdfb45c",
},
name: "cert-manager-54cbdfb45c-n4kp9",
namespace: "cert-manager",
selfLink: "/apis/metrics.k8s.io/v1beta1/namespaces/cert-manager/pods/cert-manager-54cbdfb45c-n4kp9",
uid: "123",
},
timestamp: "2023-05-24T14:16:39Z",
window: "16s",
}),
).not.toThrow();
});
it("should allow an object to be created when missing resourceVersion and uid", () => {
expect(
() =>
new KubeObject({
apiVersion: "metrics.k8s.io/v1beta1",
containers: [
{
name: "cert-manager",
usage: {
cpu: "472721n",
memory: "74404Ki",
},
},
],
kind: "PodMetrics",
metadata: {
creationTimestamp: "2023-05-24T14:17:01Z",
labels: {
app: "cert-manager",
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/instance": "cert-manager",
"app.kubernetes.io/managed-by": "Helm",
"app.kubernetes.io/name": "cert-manager",
"app.kubernetes.io/version": "v1.5.5",
"helm.sh/chart": "cert-manager-v1.5.5",
"pod-template-hash": "54cbdfb45c",
},
name: "cert-manager-54cbdfb45c-n4kp9",
namespace: "cert-manager",
selfLink: "/apis/metrics.k8s.io/v1beta1/namespaces/cert-manager/pods/cert-manager-54cbdfb45c-n4kp9",
},
timestamp: "2023-05-24T14:16:39Z",
window: "16s",
}),
).not.toThrow();
});
});

View File

@ -111,20 +111,6 @@ export class KubeObject<
); );
} }
if (!isString(data.metadata.uid)) {
throw new KubeCreationError(
`Cannot create a KubeObject from an object without metadata.uid being a string`,
data,
);
}
if (!isString(data.metadata.resourceVersion)) {
throw new KubeCreationError(
`Cannot create a KubeObject from an object without metadata.resourceVersion being a string`,
data,
);
}
if (!isString(data.metadata.selfLink)) { if (!isString(data.metadata.selfLink)) {
throw new KubeCreationError( throw new KubeCreationError(
`Cannot create a KubeObject from an object without metadata.selfLink being a string`, `Cannot create a KubeObject from an object without metadata.selfLink being a string`,
@ -136,23 +122,23 @@ export class KubeObject<
autoBind(this); autoBind(this);
} }
get selfLink() { get selfLink(): string {
return this.metadata.selfLink; return this.metadata.selfLink;
} }
getId() { getId(): string {
return this.metadata.uid; return this.metadata.uid ?? this.metadata.selfLink;
} }
getResourceVersion() { getResourceVersion(): string {
return this.metadata.resourceVersion; return this.metadata.resourceVersion ?? "";
} }
getScopedName() { getScopedName() {
return [this.getNs(), this.getName()].filter(Boolean).join("/"); return [this.getNs(), this.getName()].filter(Boolean).join("/");
} }
getName() { getName(): string {
return this.metadata.name; return this.metadata.name;
} }