mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix CRD.getPreferedVersion() to work based on apiVersion (#4553)
* Fix CRD.getPreferedVersion() to work based on apiVersion Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add tests Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
2a31c5a0d5
commit
6a97a7b35b
@ -19,10 +19,10 @@
|
|||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { CustomResourceDefinition } from "../endpoints";
|
import { CustomResourceDefinition, CustomResourceDefinitionSpec } from "../endpoints";
|
||||||
|
|
||||||
describe("Crds", () => {
|
describe("Crds", () => {
|
||||||
describe("getVersion", () => {
|
describe("getVersion()", () => {
|
||||||
it("should throw if none of the versions are served", () => {
|
it("should throw if none of the versions are served", () => {
|
||||||
const crd = new CustomResourceDefinition({
|
const crd = new CustomResourceDefinition({
|
||||||
apiVersion: "apiextensions.k8s.io/v1",
|
apiVersion: "apiextensions.k8s.io/v1",
|
||||||
@ -136,7 +136,7 @@ describe("Crds", () => {
|
|||||||
expect(crd.getVersion()).toBe("123");
|
expect(crd.getVersion()).toBe("123");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should get the version name from the version field", () => {
|
it("should get the version name from the version field, ignoring versions on v1beta", () => {
|
||||||
const crd = new CustomResourceDefinition({
|
const crd = new CustomResourceDefinition({
|
||||||
apiVersion: "apiextensions.k8s.io/v1beta1",
|
apiVersion: "apiextensions.k8s.io/v1beta1",
|
||||||
kind: "CustomResourceDefinition",
|
kind: "CustomResourceDefinition",
|
||||||
@ -147,7 +147,14 @@ describe("Crds", () => {
|
|||||||
},
|
},
|
||||||
spec: {
|
spec: {
|
||||||
version: "abc",
|
version: "abc",
|
||||||
},
|
versions: [
|
||||||
|
{
|
||||||
|
name: "foobar",
|
||||||
|
served: true,
|
||||||
|
storage: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as CustomResourceDefinitionSpec,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(crd.getVersion()).toBe("abc");
|
expect(crd.getVersion()).toBe("abc");
|
||||||
|
|||||||
@ -48,34 +48,36 @@ export interface CRDVersion {
|
|||||||
additionalPrinterColumns?: AdditionalPrinterColumnsV1[];
|
additionalPrinterColumns?: AdditionalPrinterColumnsV1[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CustomResourceDefinition {
|
export interface CustomResourceDefinitionSpec {
|
||||||
spec: {
|
group: string;
|
||||||
group: string;
|
/**
|
||||||
/**
|
* @deprecated for apiextensions.k8s.io/v1 but used in v1beta1
|
||||||
* @deprecated for apiextensions.k8s.io/v1 but used previously
|
*/
|
||||||
*/
|
version?: string;
|
||||||
version?: string;
|
names: {
|
||||||
names: {
|
plural: string;
|
||||||
plural: string;
|
singular: string;
|
||||||
singular: string;
|
kind: string;
|
||||||
kind: string;
|
listKind: string;
|
||||||
listKind: string;
|
|
||||||
};
|
|
||||||
scope: "Namespaced" | "Cluster" | string;
|
|
||||||
/**
|
|
||||||
* @deprecated for apiextensions.k8s.io/v1 but used previously
|
|
||||||
*/
|
|
||||||
validation?: object;
|
|
||||||
versions?: CRDVersion[];
|
|
||||||
conversion: {
|
|
||||||
strategy?: string;
|
|
||||||
webhook?: any;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* @deprecated for apiextensions.k8s.io/v1 but used previously
|
|
||||||
*/
|
|
||||||
additionalPrinterColumns?: AdditionalPrinterColumnsV1Beta[];
|
|
||||||
};
|
};
|
||||||
|
scope: "Namespaced" | "Cluster";
|
||||||
|
/**
|
||||||
|
* @deprecated for apiextensions.k8s.io/v1 but used in v1beta1
|
||||||
|
*/
|
||||||
|
validation?: object;
|
||||||
|
versions?: CRDVersion[];
|
||||||
|
conversion: {
|
||||||
|
strategy?: string;
|
||||||
|
webhook?: any;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @deprecated for apiextensions.k8s.io/v1 but used in v1beta1
|
||||||
|
*/
|
||||||
|
additionalPrinterColumns?: AdditionalPrinterColumnsV1Beta[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomResourceDefinition {
|
||||||
|
spec: CustomResourceDefinitionSpec;
|
||||||
status: {
|
status: {
|
||||||
conditions: {
|
conditions: {
|
||||||
lastTransitionTime: string;
|
lastTransitionTime: string;
|
||||||
@ -150,27 +152,30 @@ export class CustomResourceDefinition extends KubeObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPreferedVersion(): CRDVersion {
|
getPreferedVersion(): CRDVersion {
|
||||||
// Prefer the modern `versions` over the legacy `version`
|
const { apiVersion } = this;
|
||||||
if (this.spec.versions) {
|
|
||||||
for (const version of this.spec.versions) {
|
|
||||||
if (version.storage) {
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (this.spec.version) {
|
|
||||||
const { additionalPrinterColumns: apc } = this.spec;
|
|
||||||
const additionalPrinterColumns = apc?.map(({ JSONPath, ...apc }) => ({ ...apc, jsonPath: JSONPath }));
|
|
||||||
|
|
||||||
return {
|
switch (apiVersion) {
|
||||||
name: this.spec.version,
|
case "apiextensions.k8s.io/v1":
|
||||||
served: true,
|
for (const version of this.spec.versions) {
|
||||||
storage: true,
|
if (version.storage) {
|
||||||
schema: this.spec.validation,
|
return version;
|
||||||
additionalPrinterColumns,
|
}
|
||||||
};
|
}
|
||||||
|
break;
|
||||||
|
case "apiextensions.k8s.io/v1beta1":
|
||||||
|
const { additionalPrinterColumns: apc } = this.spec;
|
||||||
|
const additionalPrinterColumns = apc?.map(({ JSONPath, ...apc }) => ({ ...apc, jsonPath: JSONPath }));
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: this.spec.version,
|
||||||
|
served: true,
|
||||||
|
storage: true,
|
||||||
|
schema: this.spec.validation,
|
||||||
|
additionalPrinterColumns,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Error(`Failed to find a version for CustomResourceDefinition ${this.metadata.name}`);
|
throw new Error(`Unknown apiVersion=${apiVersion}: Failed to find a version for CustomResourceDefinition ${this.metadata.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
getVersion() {
|
getVersion() {
|
||||||
@ -197,7 +202,7 @@ export class CustomResourceDefinition extends KubeObject {
|
|||||||
const columns = this.getPreferedVersion().additionalPrinterColumns ?? [];
|
const columns = this.getPreferedVersion().additionalPrinterColumns ?? [];
|
||||||
|
|
||||||
return columns
|
return columns
|
||||||
.filter(column => column.name != "Age" && (ignorePriority || !column.priority));
|
.filter(column => column.name.toLowerCase() != "age" && (ignorePriority || !column.priority));
|
||||||
}
|
}
|
||||||
|
|
||||||
getValidation() {
|
getValidation() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user