Skip to content

Commit

Permalink
remove hard coded model versions from kubevirt
Browse files Browse the repository at this point in the history
  • Loading branch information
glekner committed Jun 29, 2021
1 parent f7b4300 commit bb0e506
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { ExtensionK8sModel } from '../api/common-types';
import { ExtensionK8sGroupKindModel } from '../api/common-types';
import { Extension, ExtensionDeclaration, CodeRef } from '../types';

/** YAML templates for editing resources via the yaml editor. */
export type YAMLTemplate = ExtensionDeclaration<
'console.yaml-template',
{
/** Model associated with the template. */
model: ExtensionK8sModel;
model: ExtensionK8sGroupKindModel;
/** The YAML template. */
template: CodeRef<string>;
/** The name of the template. Use the name `default` to mark this as the default template. */
Expand Down
56 changes: 37 additions & 19 deletions frontend/packages/kubevirt-plugin/console-extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,7 @@
{
"type": "console.page/route",
"properties": {
"path": [
"/k8s/ns/:ns/virtualmachines/:name",
"/k8s/ns/:ns/kubevirt.io~v1~VirtualMachine/:name",
"/k8s/ns/:ns/kubevirt.io~v1alpha3~VirtualMachine/:name"
],
"path": ["/k8s/ns/:ns/virtualmachines/:name"],
"component": {
"$codeRef": "VirtualMachinesDetailsPage.VirtualMachinesDetailsPage"
}
Expand All @@ -248,14 +244,38 @@
"required": ["KUBEVIRT"]
}
},
{
"type": "console.page/resource/details",
"properties": {
"model": {
"group": "kubevirt.io",
"kind": "VirtualMachine"
},
"component": { "$codeRef": "VirtualMachinesDetailsPage.VirtualMachinesDetailsPage" }
},
"flags": {
"required": ["KUBEVIRT"]
}
},
{
"type": "console.page/route",
"properties": {
"path": [
"/k8s/ns/:ns/virtualmachineinstances/:name",
"/k8s/ns/:ns/kubevirt.io~v1~VirtualMachineInstance/:name",
"/k8s/ns/:ns/kubevirt.io~v1alpha3~VirtualMachineInstance/:name"
],
"path": ["/k8s/ns/:ns/virtualmachineinstances/:name"],
"component": {
"$codeRef": "VirtualMachinesInstanceDetailsPage.VirtualMachinesInstanceDetailsPage"
}
},
"flags": {
"required": ["KUBEVIRT"]
}
},
{
"type": "console.page/resource/details",
"properties": {
"model": {
"group": "kubevirt.io",
"kind": "VirtualMachineInstance"
},
"component": {
"$codeRef": "VirtualMachinesInstanceDetailsPage.VirtualMachinesInstanceDetailsPage"
}
Expand Down Expand Up @@ -328,12 +348,12 @@
}
},
{
"type": "console.page/route",
"type": "console.page/resource/details",
"properties": {
"path": [
"/k8s/ns/:ns/virtualmachinesnapshots/:name",
"/k8s/ns/:ns/snapshot.kubevirt.io~v1alpha1~VirtualMachineSnapshot/:name"
],
"model": {
"group": "snapshot.kubevirt.io",
"kind": "VirtualMachineSnapshot"
},
"component": {
"$codeRef": "SnapshotDetailsPage.SnapshotDetailsPage"
}
Expand Down Expand Up @@ -384,8 +404,7 @@
"name": "default",
"model": {
"group": "kubevirt.io",
"kind": "VirtualMachine",
"version": "v1alpha3"
"kind": "VirtualMachine"
},
"template": {
"$codeRef": "yamlTemplates.defaultVMYamlTemplate"
Expand All @@ -401,8 +420,7 @@
"name": "default",
"model": {
"group": "kubevirt.io",
"kind": "VirtualMachineTemplate",
"version": "v1alpha3"
"kind": "VirtualMachineTemplate"
},
"template": {
"$codeRef": "yamlTemplates.defaultVMTemplateYamlTemplate"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
} from '@console/internal/components/utils';
import { getName } from '@console/shared';
import { VM_DETAIL_SNAPSHOTS } from '../../constants';
import { VirtualMachineSnapshotModel } from '../../models';
import { VirtualMachineModel, VirtualMachineSnapshotModel } from '../../models';
import { kubevirtReferenceForModel } from '../../models/kubevirtReferenceForModel';
import {
getVmRestoreTime,
Expand Down Expand Up @@ -114,6 +114,7 @@ export const SnapshotDetailsPage: React.FC<SnapshotDetailsPageProps> = ({ match,

const breadcrumbsForSnapshots = (snapshot) => {
const vmName = getVmSnapshotVmName(snapshot);
const vmReference = kubevirtReferenceForModel(VirtualMachineModel);
const vmNamespace = namespace || 'default';
return [
{
Expand All @@ -126,7 +127,7 @@ export const SnapshotDetailsPage: React.FC<SnapshotDetailsPageProps> = ({ match,
},
{
name: `${vmName} Snapshots`,
path: `/k8s/ns/${vmNamespace}/virtualmachines/${vmName}/${VM_DETAIL_SNAPSHOTS}`,
path: `/k8s/ns/${vmNamespace}/${vmReference}/${vmName}/${VM_DETAIL_SNAPSHOTS}`,
},
{
name: `${snapshotName} Details`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,15 @@
import * as _ from 'lodash';
import { modelFor, referenceForGroupVersionKind } from '@console/internal/module/k8s';
import {
apiVersionForModel,
modelForGroupKind,
referenceForModel,
} from '@console/internal/module/k8s';
import { K8sKind } from '@console/internal/module/k8s/types';

const VERSIONS = ['v1', 'v1alpha3', 'v1beta1', 'v1alpha1'];
export const kubevirtReferenceForModel = (model: K8sKind): string =>
referenceForModel(modelForGroupKind(model.apiGroup, model.kind) || model);

const getKubevirtModelAvailableVersion = (model: K8sKind): string =>
_.uniq([model.apiVersion, ...VERSIONS]).find(
(v) => !!modelFor(referenceForGroupVersionKind(model.apiGroup)(v)(model.kind)),
);

export const kubevirtReferenceForModel = (model: K8sKind): string => {
const version = getKubevirtModelAvailableVersion(model);

if (version) {
return referenceForGroupVersionKind(model.apiGroup)(version)(model.kind);
}

return model.kind;
};

export const getKubevirtAvailableModel = (model: K8sKind): K8sKind => {
const version = getKubevirtModelAvailableVersion(model);

if (version) {
return modelFor(referenceForGroupVersionKind(model.apiGroup)(version)(model.kind));
}

return model;
};
export const getKubevirtAvailableModel = (model: K8sKind): K8sKind =>
modelForGroupKind(model.apiGroup, model.kind) || model;

export const getKubevirtModelAvailableAPIVersion = (model: K8sKind): string =>
`${model.apiGroup}/${getKubevirtModelAvailableVersion(model) || model.apiVersion}`;
apiVersionForModel(modelForGroupKind(model.apiGroup, model.kind) || model);
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { Map as ImmutableMap } from 'immutable';
import { TemplateModel } from '@console/internal/models';
import { VirtualMachineModel } from '..';
import { getKubevirtModelAvailableAPIVersion } from '../kubevirtReferenceForModel';

export const VMTemplateYAMLTemplates = ImmutableMap().setIn(
['vm-template'],
Expand All @@ -16,8 +18,8 @@ metadata:
name.os.template.kubevirt.io/fedora31: Fedora 31
description: VM template example
objects:
- apiVersion: kubevirt.io/v1
kind: VirtualMachine
- apiVersion: ${getKubevirtModelAvailableAPIVersion(VirtualMachineModel)}
kind: ${VirtualMachineModel.kind}
metadata:
labels:
app: '\${NAME}'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Map as ImmutableMap } from 'immutable';
import { VirtualMachineModel } from '..';
import { getKubevirtModelAvailableAPIVersion } from '../kubevirtReferenceForModel';

export const VirtualMachineYAMLTemplates = ImmutableMap().setIn(
['default'],
`
apiVersion: ${VirtualMachineModel.apiGroup}/${VirtualMachineModel.apiVersion}
apiVersion: ${getKubevirtModelAvailableAPIVersion(VirtualMachineModel)}
kind: ${VirtualMachineModel.kind}
metadata:
name: vm-example
Expand Down
15 changes: 13 additions & 2 deletions frontend/public/models/yaml-templates.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { Map as ImmutableMap } from 'immutable';

import { GroupVersionKind, referenceForModel, referenceForExtensionModel } from '../module/k8s';
import {
GroupVersionKind,
referenceForModel,
referenceForExtensionModel,
modelForGroupKind,
} from '../module/k8s';
import * as k8sModels from '../models';
import * as appModels from '@console/app/src/models/';
import { YAMLTemplate } from '@console/dynamic-plugin-sdk/src/extensions/yaml-templates';
Expand Down Expand Up @@ -1316,7 +1321,13 @@ export const getYAMLTemplates = (extensionTemplates: ResolvedExtension<YAMLTempl
.merge(baseTemplates)
.withMutations((map) => {
extensionTemplates.forEach((yt) => {
const modelRef = referenceForExtensionModel(yt.properties.model);
const model = yt.properties.model;
let modelRef;
if (model.version) {
modelRef = referenceForExtensionModel(model);
} else {
modelRef = referenceForModel(modelForGroupKind(model.group, model.kind));
}
const templateName = yt.properties.name || 'default';

if (!baseTemplates.hasIn([modelRef, templateName])) {
Expand Down

0 comments on commit bb0e506

Please sign in to comment.