From 1d6159e40db6f665fb8396b5a097fc33ed84776a Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Wed, 14 Apr 2021 17:53:48 +0200 Subject: [PATCH 01/12] kubernetes-common: Adds initial shared types and files Signed-off-by: Juan Lulkin --- packages/kubernetes-common/.eslintrc.js | 0 packages/kubernetes-common/CHANGELOG.md | 7 + packages/kubernetes-common/README.md | 3 + packages/kubernetes-common/package.json | 48 ++++++ packages/kubernetes-common/src/index.ts | 17 ++ packages/kubernetes-common/src/types.ts | 208 ++++++++++++++++++++++++ 6 files changed, 283 insertions(+) create mode 100644 packages/kubernetes-common/.eslintrc.js create mode 100644 packages/kubernetes-common/CHANGELOG.md create mode 100644 packages/kubernetes-common/README.md create mode 100644 packages/kubernetes-common/package.json create mode 100644 packages/kubernetes-common/src/index.ts create mode 100644 packages/kubernetes-common/src/types.ts diff --git a/packages/kubernetes-common/.eslintrc.js b/packages/kubernetes-common/.eslintrc.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kubernetes-common/CHANGELOG.md b/packages/kubernetes-common/CHANGELOG.md new file mode 100644 index 0000000000..4b73dbafad --- /dev/null +++ b/packages/kubernetes-common/CHANGELOG.md @@ -0,0 +1,7 @@ +# @backstage/techdocs-common + +## 0.1.0 + +### Minor Changes + +- Adds the following types to be shared by the backend and the front end: \ No newline at end of file diff --git a/packages/kubernetes-common/README.md b/packages/kubernetes-common/README.md new file mode 100644 index 0000000000..db3989cdcb --- /dev/null +++ b/packages/kubernetes-common/README.md @@ -0,0 +1,3 @@ +# @backstage/kubernetes-common + +Common types and functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend. \ No newline at end of file diff --git a/packages/kubernetes-common/package.json b/packages/kubernetes-common/package.json new file mode 100644 index 0000000000..ff541911ba --- /dev/null +++ b/packages/kubernetes-common/package.json @@ -0,0 +1,48 @@ +{ + "name": "@backstage/kubernetes-common", + "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/kubernetes-common" + }, + "keywords": [ + "techdocs", + "kubernetes" + ], + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli build --outputs cjs,types", + "lint": "backstage-cli lint", + "test": "backstage-cli test", + "prepack": "backstage-cli prepack", + "postpack": "backstage-cli postpack", + "clean": "backstage-cli clean" + }, + "bugs": { + "url": "https://github.com/backstage/backstage/issues" + }, + "dependencies": { + "@kubernetes/client-node": "^0.14.0" + }, + "devDependencies": { + "@backstage/cli": "^0.6.5" + }, + "jest": { + "roots": [ + ".." + ] + } +} diff --git a/packages/kubernetes-common/src/index.ts b/packages/kubernetes-common/src/index.ts new file mode 100644 index 0000000000..50e9534751 --- /dev/null +++ b/packages/kubernetes-common/src/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './types'; diff --git a/packages/kubernetes-common/src/types.ts b/packages/kubernetes-common/src/types.ts new file mode 100644 index 0000000000..84ca08585b --- /dev/null +++ b/packages/kubernetes-common/src/types.ts @@ -0,0 +1,208 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ExtensionsV1beta1Ingress, + V1ConfigMap, + V1Deployment, + V1HorizontalPodAutoscaler, + V1Pod, + V1ReplicaSet, + V1Service, +} from '@kubernetes/client-node'; +import { Entity } from '@backstage/catalog-model'; + +export interface ClusterDetails { + name: string; + url: string; + authProvider: string; + serviceAccountToken?: string | undefined; +} + +export interface KubernetesRequestBody { + auth?: { + google?: string; + }; + entity: Entity; +} + +export interface ClusterObjects { + cluster: { name: string }; + resources: FetchResponse[]; + errors: KubernetesFetchError[]; +} + +export interface ObjectsByEntityResponse { + items: ClusterObjects[]; +} + +export interface FetchResponseWrapper { + errors: KubernetesFetchError[]; + responses: FetchResponse[]; +} + +export type FetchResponse = + | PodFetchResponse + | ServiceFetchResponse + | ConfigMapFetchResponse + | DeploymentFetchResponse + | ReplicaSetsFetchResponse + | HorizontalPodAutoscalersFetchResponse + | IngressesFetchResponse + | CustomResourceFetchResponse; + +// TODO fairly sure there's a easier way to do this + +export type KubernetesObjectTypes = + | 'pods' + | 'services' + | 'configmaps' + | 'deployments' + | 'replicasets' + | 'horizontalpodautoscalers' + | 'ingresses' + | 'customresources'; + +export interface PodFetchResponse { + type: 'pods'; + resources: Array; +} + +export interface ServiceFetchResponse { + type: 'services'; + resources: Array; +} + +export interface ConfigMapFetchResponse { + type: 'configmaps'; + resources: Array; +} + +export interface DeploymentFetchResponse { + type: 'deployments'; + resources: Array; +} + +export interface ReplicaSetsFetchResponse { + type: 'replicasets'; + resources: Array; +} + +export interface HorizontalPodAutoscalersFetchResponse { + type: 'horizontalpodautoscalers'; + resources: Array; +} + +export interface IngressesFetchResponse { + type: 'ingresses'; + resources: Array; +} + +export interface CustomResourceFetchResponse { + type: 'customresources'; + resources: Array; +} + +export interface ObjectFetchParams { + serviceId: string; + clusterDetails: ClusterDetails; + objectTypesToFetch: Set; + labelSelector: string; + customResources: CustomResource[]; +} + +// Fetches information from a kubernetes cluster using the cluster details object +// to target a specific cluster +export interface KubernetesFetcher { + fetchObjectsForService( + params: ObjectFetchParams, + ): Promise; +} + +// Used to locate which cluster(s) a service is running on +export interface KubernetesServiceLocator { + getClustersByServiceId(serviceId: string): Promise; +} + +// Used to load cluster details from different sources +export interface KubernetesClustersSupplier { + getClusters(): Promise; +} + +export type KubernetesErrorTypes = + | 'BAD_REQUEST' + | 'UNAUTHORIZED_ERROR' + | 'SYSTEM_ERROR' + | 'UNKNOWN_ERROR'; + +export interface KubernetesFetchError { + errorType: KubernetesErrorTypes; + statusCode?: number; + resourcePath?: string; +} + +export interface ConfigClusterLocatorMethod { + /** + * @visibility frontend + */ + type: 'config'; + clusters: { + /** + * @visibility frontend + */ + url: string; + /** + * @visibility frontend + */ + name: string; + /** + * @visibility secret + */ + serviceAccountToken: string | undefined; + /** + * @visibility frontend + */ + authProvider: 'aws' | 'google' | 'serviceAccount'; + }[]; +} + +export interface GKEClusterLocatorMethod { + /** + * @visibility frontend + */ + type: 'gke'; + /** + * @visibility frontend + */ + projectId: string; + /** + * @visibility frontend + */ + region?: string; +} + +export type ClusterLocatorMethod = + | ConfigClusterLocatorMethod + | GKEClusterLocatorMethod; + +export type ServiceLocatorMethod = 'multiTenant' | 'http'; // TODO implement http +export type AuthProviderType = 'google' | 'serviceAccount' | 'aws'; + +export interface CustomResource { + group: string; + apiVersion: string; + plural: string; +} From 1f790d756fa6a796217b693eef109f872b80dfc1 Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Wed, 14 Apr 2021 17:54:18 +0200 Subject: [PATCH 02/12] kubernetes-backend: Updates kube backend to reexport types from common Signed-off-by: Juan Lulkin --- plugins/kubernetes-backend/package.json | 1 + plugins/kubernetes-backend/src/types/types.ts | 208 ++---------------- 2 files changed, 16 insertions(+), 193 deletions(-) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 7a8b16bc8a..6c600f4d8b 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -34,6 +34,7 @@ "@backstage/backend-common": "^0.6.3", "@backstage/catalog-model": "^0.7.7", "@backstage/config": "^0.1.4", + "@backstage/kubernetes-common": "^0.1.0", "@google-cloud/container": "^2.2.0", "@kubernetes/client-node": "^0.14.0", "@types/express": "^4.17.6", diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index c597c718c5..2316740af0 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -14,196 +14,18 @@ * limitations under the License. */ -import { - ExtensionsV1beta1Ingress, - V1ConfigMap, - V1Deployment, - V1HorizontalPodAutoscaler, - V1Pod, - V1ReplicaSet, - V1Service, -} from '@kubernetes/client-node'; -import { Entity } from '@backstage/catalog-model'; - -export interface ClusterDetails { - name: string; - url: string; - authProvider: string; - serviceAccountToken?: string | undefined; - skipTLSVerify?: boolean; -} - -export interface KubernetesRequestBody { - auth?: { - google?: string; - }; - entity: Entity; -} - -export interface ClusterObjects { - cluster: { name: string }; - resources: FetchResponse[]; - errors: KubernetesFetchError[]; -} - -export interface ObjectsByEntityResponse { - items: ClusterObjects[]; -} - -export interface FetchResponseWrapper { - errors: KubernetesFetchError[]; - responses: FetchResponse[]; -} - -export type FetchResponse = - | PodFetchResponse - | ServiceFetchResponse - | ConfigMapFetchResponse - | DeploymentFetchResponse - | ReplicaSetsFetchResponse - | HorizontalPodAutoscalersFetchResponse - | IngressesFetchResponse - | CustomResourceFetchResponse; - -// TODO fairly sure there's a easier way to do this - -export type KubernetesObjectTypes = - | 'pods' - | 'services' - | 'configmaps' - | 'deployments' - | 'replicasets' - | 'horizontalpodautoscalers' - | 'ingresses' - | 'customresources'; - -export interface PodFetchResponse { - type: 'pods'; - resources: Array; -} - -export interface ServiceFetchResponse { - type: 'services'; - resources: Array; -} - -export interface ConfigMapFetchResponse { - type: 'configmaps'; - resources: Array; -} - -export interface DeploymentFetchResponse { - type: 'deployments'; - resources: Array; -} - -export interface ReplicaSetsFetchResponse { - type: 'replicasets'; - resources: Array; -} - -export interface HorizontalPodAutoscalersFetchResponse { - type: 'horizontalpodautoscalers'; - resources: Array; -} - -export interface IngressesFetchResponse { - type: 'ingresses'; - resources: Array; -} - -export interface CustomResourceFetchResponse { - type: 'customresources'; - resources: Array; -} - -export interface ObjectFetchParams { - serviceId: string; - clusterDetails: ClusterDetails; - objectTypesToFetch: Set; - labelSelector: string; - customResources: CustomResource[]; -} - -// Fetches information from a kubernetes cluster using the cluster details object -// to target a specific cluster -export interface KubernetesFetcher { - fetchObjectsForService( - params: ObjectFetchParams, - ): Promise; -} - -// Used to locate which cluster(s) a service is running on -export interface KubernetesServiceLocator { - getClustersByServiceId(serviceId: string): Promise; -} - -// Used to load cluster details from different sources -export interface KubernetesClustersSupplier { - getClusters(): Promise; -} - -export type KubernetesErrorTypes = - | 'BAD_REQUEST' - | 'UNAUTHORIZED_ERROR' - | 'SYSTEM_ERROR' - | 'UNKNOWN_ERROR'; - -export interface KubernetesFetchError { - errorType: KubernetesErrorTypes; - statusCode?: number; - resourcePath?: string; -} - -export interface ConfigClusterLocatorMethod { - /** - * @visibility frontend - */ - type: 'config'; - clusters: { - /** - * @visibility frontend - */ - url: string; - /** - * @visibility frontend - */ - name: string; - /** - * @visibility secret - */ - serviceAccountToken: string | undefined; - /** - * @visibility frontend - */ - authProvider: 'aws' | 'google' | 'serviceAccount'; - }[]; -} - -export interface GKEClusterLocatorMethod { - /** - * @visibility frontend - */ - type: 'gke'; - /** - * @visibility frontend - */ - projectId: string; - /** - * @visibility frontend - */ - region?: string; -} - -export type ClusterLocatorMethod = - | ConfigClusterLocatorMethod - | GKEClusterLocatorMethod; - -export type ServiceLocatorMethod = 'multiTenant' | 'http'; // TODO implement http -export type AuthProviderType = 'google' | 'serviceAccount' | 'aws'; - -export interface CustomResource { - group: string; - apiVersion: string; - plural: string; -} +export type { + ClusterDetails, + CustomResource, + FetchResponse, + FetchResponseWrapper, + KubernetesClustersSupplier, + KubernetesErrorTypes, + KubernetesFetchError, + KubernetesFetcher, + KubernetesObjectTypes, + KubernetesRequestBody, + KubernetesServiceLocator, + ObjectFetchParams, + ServiceLocatorMethod, +} from '@backstage/kubernetes-common'; From 0b61c22e0af1fdc74e74b5556cef9994b64b3c7e Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Wed, 14 Apr 2021 17:55:09 +0200 Subject: [PATCH 03/12] kubernetes: Updates kubernetes frontend to use common Signed-off-by: Juan Lulkin --- plugins/kubernetes/package.json | 4 ++-- plugins/kubernetes/schema.d.ts | 2 +- plugins/kubernetes/src/api/KubernetesBackendClient.ts | 2 +- plugins/kubernetes/src/api/types.ts | 2 +- .../src/components/KubernetesContent/ErrorPanel.tsx | 2 +- .../src/components/KubernetesContent/KubernetesContent.tsx | 2 +- .../kubernetes/src/error-detection/error-detection.test.ts | 2 +- plugins/kubernetes/src/error-detection/error-detection.ts | 2 +- plugins/kubernetes/src/hooks/useKubernetesObjects.ts | 2 +- .../src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts | 2 +- .../kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts | 2 +- .../src/kubernetes-auth-provider/KubernetesAuthProviders.ts | 2 +- .../ServiceAccountKubernetesAuthProvider.ts | 2 +- plugins/kubernetes/src/kubernetes-auth-provider/types.ts | 2 +- plugins/kubernetes/src/utils/response.ts | 2 +- 15 files changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 03013e1480..7c607b1776 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -34,8 +34,8 @@ "@backstage/catalog-model": "^0.7.4", "@backstage/config": "^0.1.4", "@backstage/core": "^0.7.6", - "@backstage/plugin-catalog-react": "^0.1.3", - "@backstage/plugin-kubernetes-backend": "^0.3.2", + "@backstage/kubernetes-common": "^0.1.0", + "@backstage/plugin-catalog-react": "^0.1.3", "@backstage/theme": "^0.2.6", "@kubernetes/client-node": "^0.14.0", "@material-ui/core": "^4.11.0", diff --git a/plugins/kubernetes/schema.d.ts b/plugins/kubernetes/schema.d.ts index 196f5ba76d..e421100760 100644 --- a/plugins/kubernetes/schema.d.ts +++ b/plugins/kubernetes/schema.d.ts @@ -17,7 +17,7 @@ import { ClusterLocatorMethod, CustomResource, -} from '@backstage/plugin-kubernetes-backend'; +} from '@backstage/kubernetes-common'; export interface Config { kubernetes?: { diff --git a/plugins/kubernetes/src/api/KubernetesBackendClient.ts b/plugins/kubernetes/src/api/KubernetesBackendClient.ts index 1eadec3fb0..0bbba7c8f7 100644 --- a/plugins/kubernetes/src/api/KubernetesBackendClient.ts +++ b/plugins/kubernetes/src/api/KubernetesBackendClient.ts @@ -19,7 +19,7 @@ import { KubernetesApi } from './types'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/plugin-kubernetes-backend'; +} from '@backstage/kubernetes-common'; export class KubernetesBackendClient implements KubernetesApi { private readonly discoveryApi: DiscoveryApi; diff --git a/plugins/kubernetes/src/api/types.ts b/plugins/kubernetes/src/api/types.ts index da1b36989a..a575aea4b8 100644 --- a/plugins/kubernetes/src/api/types.ts +++ b/plugins/kubernetes/src/api/types.ts @@ -18,7 +18,7 @@ import { createApiRef } from '@backstage/core'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/plugin-kubernetes-backend'; +} from '@backstage/kubernetes-common'; export const kubernetesApiRef = createApiRef({ id: 'plugin.kubernetes.service', diff --git a/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx b/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx index 650e6ddff1..2261cd5e3f 100644 --- a/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx +++ b/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { WarningPanel } from '@backstage/core'; import { Typography } from '@material-ui/core'; -import { ClusterObjects } from '@backstage/plugin-kubernetes-backend'; +import { ClusterObjects } from '@backstage/kubernetes-common'; const clustersWithErrorsToErrorMessage = ( clustersWithErrors: ClusterObjects[], diff --git a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx index cda8dd7e6b..5b30c62949 100644 --- a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx +++ b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx @@ -31,7 +31,7 @@ import { StatusOK, } from '@backstage/core'; import { Entity } from '@backstage/catalog-model'; -import { ClusterObjects } from '@backstage/plugin-kubernetes-backend'; +import { ClusterObjects } from '@backstage/kubernetes-common'; import { ErrorPanel } from './ErrorPanel'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { DeploymentsAccordions } from '../DeploymentsAccordions'; diff --git a/plugins/kubernetes/src/error-detection/error-detection.test.ts b/plugins/kubernetes/src/error-detection/error-detection.test.ts index 8a4575c8be..50cf81a522 100644 --- a/plugins/kubernetes/src/error-detection/error-detection.test.ts +++ b/plugins/kubernetes/src/error-detection/error-detection.test.ts @@ -30,7 +30,7 @@ import * as maxedOutHpa from './__fixtures__/hpa-maxed-out.json'; import { FetchResponse, ObjectsByEntityResponse, -} from '@backstage/plugin-kubernetes-backend'; +} from '@backstage/kubernetes-common'; const CLUSTER_NAME = 'cluster-a'; diff --git a/plugins/kubernetes/src/error-detection/error-detection.ts b/plugins/kubernetes/src/error-detection/error-detection.ts index a44747969d..5cffbc181f 100644 --- a/plugins/kubernetes/src/error-detection/error-detection.ts +++ b/plugins/kubernetes/src/error-detection/error-detection.ts @@ -15,7 +15,7 @@ */ import { DetectedError, DetectedErrorsByCluster } from './types'; -import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-backend'; +import { ObjectsByEntityResponse } from '@backstage/kubernetes-common'; import { groupResponses } from '../utils/response'; import { detectErrorsInPods } from './pods'; import { detectErrorsInDeployments } from './deployments'; diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts index 7c4de9ff1a..44434ec8f5 100644 --- a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts +++ b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts @@ -22,7 +22,7 @@ import { useEffect, useState } from 'react'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/plugin-kubernetes-backend'; +} from '@backstage/kubernetes-common'; export interface KubernetesObjects { kubernetesObjects: ObjectsByEntityResponse | undefined; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts index cab81f3622..cb14574bdc 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts @@ -15,7 +15,7 @@ */ import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-backend'; +import { KubernetesRequestBody } from '@backstage/kubernetes-common'; export class AwsKubernetesAuthProvider implements KubernetesAuthProvider { async decorateRequestBodyForAuth( diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts index 570806a1a4..649f0c14da 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts @@ -16,7 +16,7 @@ import { OAuthApi } from '@backstage/core'; import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-backend'; +import { KubernetesRequestBody } from '@backstage/kubernetes-common'; export class GoogleKubernetesAuthProvider implements KubernetesAuthProvider { authProvider: OAuthApi; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts b/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts index dc9d9b5e0d..bc74b2717f 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts @@ -15,7 +15,7 @@ */ import { OAuthApi } from '@backstage/core'; -import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-backend'; +import { KubernetesRequestBody } from '@backstage/kubernetes-common'; import { KubernetesAuthProvider, KubernetesAuthProvidersApi } from './types'; import { GoogleKubernetesAuthProvider } from './GoogleKubernetesAuthProvider'; import { ServiceAccountKubernetesAuthProvider } from './ServiceAccountKubernetesAuthProvider'; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts index 5d33521ae4..f54c51bf48 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts @@ -15,7 +15,7 @@ */ import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-backend'; +import { KubernetesRequestBody } from '@backstage/kubernetes-common'; export class ServiceAccountKubernetesAuthProvider implements KubernetesAuthProvider { diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts b/plugins/kubernetes/src/kubernetes-auth-provider/types.ts index 2bed2838b9..afb2615939 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/types.ts @@ -15,7 +15,7 @@ */ import { createApiRef } from '@backstage/core'; -import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-backend'; +import { KubernetesRequestBody } from '@backstage/kubernetes-common'; export interface KubernetesAuthProvider { decorateRequestBodyForAuth( diff --git a/plugins/kubernetes/src/utils/response.ts b/plugins/kubernetes/src/utils/response.ts index a9b10e7759..a38010ba74 100644 --- a/plugins/kubernetes/src/utils/response.ts +++ b/plugins/kubernetes/src/utils/response.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FetchResponse } from '@backstage/plugin-kubernetes-backend'; +import { FetchResponse } from '@backstage/kubernetes-common'; import { GroupedResponses } from '../types/types'; // TODO this could probably be a lodash groupBy From f53fba29f6559c4ca0560100e1bccdef424a6476 Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Wed, 14 Apr 2021 18:15:47 +0200 Subject: [PATCH 04/12] kubernetes-common: Adds changeset and fixes linting Signed-off-by: Juan Lulkin --- .changeset/silly-tables-build.md | 6 ++++++ packages/kubernetes-common/.eslintrc.js | 3 +++ packages/kubernetes-common/CHANGELOG.md | 2 +- packages/kubernetes-common/README.md | 2 +- packages/kubernetes-common/package.json | 1 + 5 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 .changeset/silly-tables-build.md diff --git a/.changeset/silly-tables-build.md b/.changeset/silly-tables-build.md new file mode 100644 index 0000000000..3f7b3182dd --- /dev/null +++ b/.changeset/silly-tables-build.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-kubernetes-backend': patch +--- + +Adds @backstage/kubernetes-common library to share types between kubernetes frontend and backend. diff --git a/packages/kubernetes-common/.eslintrc.js b/packages/kubernetes-common/.eslintrc.js index e69de29bb2..16a033dbc6 100644 --- a/packages/kubernetes-common/.eslintrc.js +++ b/packages/kubernetes-common/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: [require.resolve('@backstage/cli/config/eslint.backend')], +}; diff --git a/packages/kubernetes-common/CHANGELOG.md b/packages/kubernetes-common/CHANGELOG.md index 4b73dbafad..a10c37c7d1 100644 --- a/packages/kubernetes-common/CHANGELOG.md +++ b/packages/kubernetes-common/CHANGELOG.md @@ -4,4 +4,4 @@ ### Minor Changes -- Adds the following types to be shared by the backend and the front end: \ No newline at end of file +- Adds types to be shared by the backend and the front end. diff --git a/packages/kubernetes-common/README.md b/packages/kubernetes-common/README.md index db3989cdcb..0034efbbff 100644 --- a/packages/kubernetes-common/README.md +++ b/packages/kubernetes-common/README.md @@ -1,3 +1,3 @@ # @backstage/kubernetes-common -Common types and functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend. \ No newline at end of file +Common types and functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend. diff --git a/packages/kubernetes-common/package.json b/packages/kubernetes-common/package.json index ff541911ba..9494b29ed0 100644 --- a/packages/kubernetes-common/package.json +++ b/packages/kubernetes-common/package.json @@ -35,6 +35,7 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { + "@backstage/catalog-model": "^0.7.6", "@kubernetes/client-node": "^0.14.0" }, "devDependencies": { From 1cf63d00df1abc0d62f0f1f0f57e3750a46b86db Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 15 Apr 2021 10:21:25 +0200 Subject: [PATCH 05/12] plugin-kubernetes-common: Moves packages/kuberntes-common to plugins as per ADR11 Signed-off-by: Juan Lulkin --- plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-backend/src/types/types.ts | 2 +- {packages => plugins}/kubernetes-common/.eslintrc.js | 0 {packages => plugins}/kubernetes-common/CHANGELOG.md | 2 +- {packages => plugins}/kubernetes-common/README.md | 2 +- {packages => plugins}/kubernetes-common/package.json | 4 ++-- {packages => plugins}/kubernetes-common/src/index.ts | 0 {packages => plugins}/kubernetes-common/src/types.ts | 0 plugins/kubernetes/schema.d.ts | 2 +- plugins/kubernetes/src/api/KubernetesBackendClient.ts | 2 +- plugins/kubernetes/src/api/types.ts | 2 +- .../src/components/KubernetesContent/ErrorPanel.tsx | 2 +- .../src/components/KubernetesContent/KubernetesContent.tsx | 2 +- .../kubernetes/src/error-detection/error-detection.test.ts | 2 +- plugins/kubernetes/src/error-detection/error-detection.ts | 2 +- plugins/kubernetes/src/hooks/useKubernetesObjects.ts | 2 +- .../src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts | 2 +- .../kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts | 2 +- .../src/kubernetes-auth-provider/KubernetesAuthProviders.ts | 2 +- .../ServiceAccountKubernetesAuthProvider.ts | 2 +- plugins/kubernetes/src/kubernetes-auth-provider/types.ts | 2 +- plugins/kubernetes/src/utils/response.ts | 2 +- 22 files changed, 20 insertions(+), 20 deletions(-) rename {packages => plugins}/kubernetes-common/.eslintrc.js (100%) rename {packages => plugins}/kubernetes-common/CHANGELOG.md (70%) rename {packages => plugins}/kubernetes-common/README.md (73%) rename {packages => plugins}/kubernetes-common/package.json (92%) rename {packages => plugins}/kubernetes-common/src/index.ts (100%) rename {packages => plugins}/kubernetes-common/src/types.ts (100%) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 6c600f4d8b..3c8380b661 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -34,7 +34,7 @@ "@backstage/backend-common": "^0.6.3", "@backstage/catalog-model": "^0.7.7", "@backstage/config": "^0.1.4", - "@backstage/kubernetes-common": "^0.1.0", + "@backstage/plugin-kubernetes-common": "^0.1.0", "@google-cloud/container": "^2.2.0", "@kubernetes/client-node": "^0.14.0", "@types/express": "^4.17.6", diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 2316740af0..119ca0451e 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -28,4 +28,4 @@ export type { KubernetesServiceLocator, ObjectFetchParams, ServiceLocatorMethod, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; diff --git a/packages/kubernetes-common/.eslintrc.js b/plugins/kubernetes-common/.eslintrc.js similarity index 100% rename from packages/kubernetes-common/.eslintrc.js rename to plugins/kubernetes-common/.eslintrc.js diff --git a/packages/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md similarity index 70% rename from packages/kubernetes-common/CHANGELOG.md rename to plugins/kubernetes-common/CHANGELOG.md index a10c37c7d1..44c9066ada 100644 --- a/packages/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,4 +1,4 @@ -# @backstage/techdocs-common +# @backstage/plugin-kubernetes-common ## 0.1.0 diff --git a/packages/kubernetes-common/README.md b/plugins/kubernetes-common/README.md similarity index 73% rename from packages/kubernetes-common/README.md rename to plugins/kubernetes-common/README.md index 0034efbbff..c366d0493c 100644 --- a/packages/kubernetes-common/README.md +++ b/plugins/kubernetes-common/README.md @@ -1,3 +1,3 @@ -# @backstage/kubernetes-common +# @backstage/plugin-kubernetes-common Common types and functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend. diff --git a/packages/kubernetes-common/package.json b/plugins/kubernetes-common/package.json similarity index 92% rename from packages/kubernetes-common/package.json rename to plugins/kubernetes-common/package.json index 9494b29ed0..813b965c2c 100644 --- a/packages/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/kubernetes-common", + "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", "version": "0.1.0", "main": "src/index.ts", @@ -14,7 +14,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "packages/kubernetes-common" + "directory": "plugin/kubernetes-common" }, "keywords": [ "techdocs", diff --git a/packages/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts similarity index 100% rename from packages/kubernetes-common/src/index.ts rename to plugins/kubernetes-common/src/index.ts diff --git a/packages/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts similarity index 100% rename from packages/kubernetes-common/src/types.ts rename to plugins/kubernetes-common/src/types.ts diff --git a/plugins/kubernetes/schema.d.ts b/plugins/kubernetes/schema.d.ts index e421100760..9845fa4e47 100644 --- a/plugins/kubernetes/schema.d.ts +++ b/plugins/kubernetes/schema.d.ts @@ -17,7 +17,7 @@ import { ClusterLocatorMethod, CustomResource, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; export interface Config { kubernetes?: { diff --git a/plugins/kubernetes/src/api/KubernetesBackendClient.ts b/plugins/kubernetes/src/api/KubernetesBackendClient.ts index 0bbba7c8f7..19f1602143 100644 --- a/plugins/kubernetes/src/api/KubernetesBackendClient.ts +++ b/plugins/kubernetes/src/api/KubernetesBackendClient.ts @@ -19,7 +19,7 @@ import { KubernetesApi } from './types'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; export class KubernetesBackendClient implements KubernetesApi { private readonly discoveryApi: DiscoveryApi; diff --git a/plugins/kubernetes/src/api/types.ts b/plugins/kubernetes/src/api/types.ts index a575aea4b8..2e91783132 100644 --- a/plugins/kubernetes/src/api/types.ts +++ b/plugins/kubernetes/src/api/types.ts @@ -18,7 +18,7 @@ import { createApiRef } from '@backstage/core'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; export const kubernetesApiRef = createApiRef({ id: 'plugin.kubernetes.service', diff --git a/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx b/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx index 2261cd5e3f..ba0026ac47 100644 --- a/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx +++ b/plugins/kubernetes/src/components/KubernetesContent/ErrorPanel.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { WarningPanel } from '@backstage/core'; import { Typography } from '@material-ui/core'; -import { ClusterObjects } from '@backstage/kubernetes-common'; +import { ClusterObjects } from '@backstage/plugin-kubernetes-common'; const clustersWithErrorsToErrorMessage = ( clustersWithErrors: ClusterObjects[], diff --git a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx index 5b30c62949..1461f52112 100644 --- a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx +++ b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx @@ -31,7 +31,7 @@ import { StatusOK, } from '@backstage/core'; import { Entity } from '@backstage/catalog-model'; -import { ClusterObjects } from '@backstage/kubernetes-common'; +import { ClusterObjects } from '@backstage/plugin-kubernetes-common'; import { ErrorPanel } from './ErrorPanel'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { DeploymentsAccordions } from '../DeploymentsAccordions'; diff --git a/plugins/kubernetes/src/error-detection/error-detection.test.ts b/plugins/kubernetes/src/error-detection/error-detection.test.ts index 50cf81a522..5079ed9245 100644 --- a/plugins/kubernetes/src/error-detection/error-detection.test.ts +++ b/plugins/kubernetes/src/error-detection/error-detection.test.ts @@ -30,7 +30,7 @@ import * as maxedOutHpa from './__fixtures__/hpa-maxed-out.json'; import { FetchResponse, ObjectsByEntityResponse, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; const CLUSTER_NAME = 'cluster-a'; diff --git a/plugins/kubernetes/src/error-detection/error-detection.ts b/plugins/kubernetes/src/error-detection/error-detection.ts index 5cffbc181f..91544fe623 100644 --- a/plugins/kubernetes/src/error-detection/error-detection.ts +++ b/plugins/kubernetes/src/error-detection/error-detection.ts @@ -15,7 +15,7 @@ */ import { DetectedError, DetectedErrorsByCluster } from './types'; -import { ObjectsByEntityResponse } from '@backstage/kubernetes-common'; +import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import { groupResponses } from '../utils/response'; import { detectErrorsInPods } from './pods'; import { detectErrorsInDeployments } from './deployments'; diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts index 44434ec8f5..1dfe85fe38 100644 --- a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts +++ b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts @@ -22,7 +22,7 @@ import { useEffect, useState } from 'react'; import { KubernetesRequestBody, ObjectsByEntityResponse, -} from '@backstage/kubernetes-common'; +} from '@backstage/plugin-kubernetes-common'; export interface KubernetesObjects { kubernetesObjects: ObjectsByEntityResponse | undefined; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts index cb14574bdc..ef541b0173 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/AwsKubernetesAuthProvider.ts @@ -15,7 +15,7 @@ */ import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/kubernetes-common'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class AwsKubernetesAuthProvider implements KubernetesAuthProvider { async decorateRequestBodyForAuth( diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts index 649f0c14da..9c9db0b9fc 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts @@ -16,7 +16,7 @@ import { OAuthApi } from '@backstage/core'; import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/kubernetes-common'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class GoogleKubernetesAuthProvider implements KubernetesAuthProvider { authProvider: OAuthApi; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts b/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts index bc74b2717f..a96565f0c0 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts @@ -15,7 +15,7 @@ */ import { OAuthApi } from '@backstage/core'; -import { KubernetesRequestBody } from '@backstage/kubernetes-common'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesAuthProvider, KubernetesAuthProvidersApi } from './types'; import { GoogleKubernetesAuthProvider } from './GoogleKubernetesAuthProvider'; import { ServiceAccountKubernetesAuthProvider } from './ServiceAccountKubernetesAuthProvider'; diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts b/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts index f54c51bf48..b88fd7679e 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/ServiceAccountKubernetesAuthProvider.ts @@ -15,7 +15,7 @@ */ import { KubernetesAuthProvider } from './types'; -import { KubernetesRequestBody } from '@backstage/kubernetes-common'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class ServiceAccountKubernetesAuthProvider implements KubernetesAuthProvider { diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts b/plugins/kubernetes/src/kubernetes-auth-provider/types.ts index afb2615939..8d4cead11a 100644 --- a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts +++ b/plugins/kubernetes/src/kubernetes-auth-provider/types.ts @@ -15,7 +15,7 @@ */ import { createApiRef } from '@backstage/core'; -import { KubernetesRequestBody } from '@backstage/kubernetes-common'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export interface KubernetesAuthProvider { decorateRequestBodyForAuth( diff --git a/plugins/kubernetes/src/utils/response.ts b/plugins/kubernetes/src/utils/response.ts index a38010ba74..1d860ca226 100644 --- a/plugins/kubernetes/src/utils/response.ts +++ b/plugins/kubernetes/src/utils/response.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FetchResponse } from '@backstage/kubernetes-common'; +import { FetchResponse } from '@backstage/plugin-kubernetes-common'; import { GroupedResponses } from '../types/types'; // TODO this could probably be a lodash groupBy From a3b25f6c2e0bb1f17e3513567211f945b6fde5ac Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 15 Apr 2021 11:43:08 +0200 Subject: [PATCH 06/12] kubernetes: Removes schema.d.ts Signed-off-by: Juan Lulkin --- plugins/kubernetes/package.json | 4 +--- plugins/kubernetes/schema.d.ts | 42 --------------------------------- 2 files changed, 1 insertion(+), 45 deletions(-) delete mode 100644 plugins/kubernetes/schema.d.ts diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 7c607b1776..c808678922 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -19,7 +19,6 @@ "backstage", "kubernetes" ], - "configSchema": "schema.d.ts", "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", @@ -63,7 +62,6 @@ "msw": "^0.21.2" }, "files": [ - "dist", - "schema.d.ts" + "dist" ] } diff --git a/plugins/kubernetes/schema.d.ts b/plugins/kubernetes/schema.d.ts deleted file mode 100644 index 9845fa4e47..0000000000 --- a/plugins/kubernetes/schema.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - ClusterLocatorMethod, - CustomResource, -} from '@backstage/plugin-kubernetes-common'; - -export interface Config { - kubernetes?: { - /** - * @visibility frontend - */ - serviceLocatorMethod: { - /** - * @visibility frontend - */ - type: 'multiTenant'; - }; - /** - * @visibility frontend - */ - clusterLocatorMethods: ClusterLocatorMethod[]; - /** - * @visibility frontend - */ - customResources?: CustomResource[]; - }; -} From 219313b29db39fdface66981e5c7b8450f928761 Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 15 Apr 2021 11:48:01 +0200 Subject: [PATCH 07/12] kubernetes-backend: Moves backend specific types back from common Signed-off-by: Juan Lulkin --- plugins/kubernetes-backend/src/types/types.ts | 118 ++++++++++++++++-- plugins/kubernetes-common/src/types.ts | 111 +--------------- 2 files changed, 113 insertions(+), 116 deletions(-) diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 119ca0451e..b7822557c2 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -14,18 +14,116 @@ * limitations under the License. */ -export type { - ClusterDetails, - CustomResource, +import type { + FetchResponse, + KubernetesFetchError, +} from '@backstage/plugin-kubernetes-common'; + +export type { FetchResponse, - FetchResponseWrapper, - KubernetesClustersSupplier, KubernetesErrorTypes, KubernetesFetchError, - KubernetesFetcher, - KubernetesObjectTypes, KubernetesRequestBody, - KubernetesServiceLocator, - ObjectFetchParams, - ServiceLocatorMethod, } from '@backstage/plugin-kubernetes-common'; + +export type ClusterLocatorMethod = + | ConfigClusterLocatorMethod + | GKEClusterLocatorMethod; + +export interface ConfigClusterLocatorMethod { + /** + * @visibility frontend + */ + type: 'config'; + clusters: { + /** + * @visibility frontend + */ + url: string; + /** + * @visibility frontend + */ + name: string; + /** + * @visibility secret + */ + serviceAccountToken: string | undefined; + /** + * @visibility frontend + */ + authProvider: 'aws' | 'google' | 'serviceAccount'; + }[]; +} + +export interface GKEClusterLocatorMethod { + /** + * @visibility frontend + */ + type: 'gke'; + /** + * @visibility frontend + */ + projectId: string; + /** + * @visibility frontend + */ + region?: string; +} + +export interface CustomResource { + group: string; + apiVersion: string; + plural: string; +} + +export interface ObjectFetchParams { + serviceId: string; + clusterDetails: ClusterDetails; + objectTypesToFetch: Set; + labelSelector: string; + customResources: CustomResource[]; +} + +// Fetches information from a kubernetes cluster using the cluster details object +// to target a specific cluster +export interface KubernetesFetcher { + fetchObjectsForService( + params: ObjectFetchParams, + ): Promise; +} + +export interface FetchResponseWrapper { + errors: KubernetesFetchError[]; + responses: FetchResponse[]; +} + +// TODO fairly sure there's a easier way to do this + +export type KubernetesObjectTypes = + | 'pods' + | 'services' + | 'configmaps' + | 'deployments' + | 'replicasets' + | 'horizontalpodautoscalers' + | 'ingresses' + | 'customresources'; + +// Used to load cluster details from different sources +export interface KubernetesClustersSupplier { + getClusters(): Promise; +} + +// Used to locate which cluster(s) a service is running on +export interface KubernetesServiceLocator { + getClustersByServiceId(serviceId: string): Promise; +} + +export type ServiceLocatorMethod = 'multiTenant' | 'http'; // TODO implement http + +export interface ClusterDetails { + name: string; + url: string; + authProvider: string; + serviceAccountToken?: string | undefined; +} diff --git a/plugins/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts index 84ca08585b..23dc4f0f3c 100644 --- a/plugins/kubernetes-common/src/types.ts +++ b/plugins/kubernetes-common/src/types.ts @@ -25,13 +25,6 @@ import { } from '@kubernetes/client-node'; import { Entity } from '@backstage/catalog-model'; -export interface ClusterDetails { - name: string; - url: string; - authProvider: string; - serviceAccountToken?: string | undefined; -} - export interface KubernetesRequestBody { auth?: { google?: string; @@ -49,10 +42,7 @@ export interface ObjectsByEntityResponse { items: ClusterObjects[]; } -export interface FetchResponseWrapper { - errors: KubernetesFetchError[]; - responses: FetchResponse[]; -} +export type AuthProviderType = 'google' | 'serviceAccount' | 'aws'; export type FetchResponse = | PodFetchResponse @@ -64,18 +54,6 @@ export type FetchResponse = | IngressesFetchResponse | CustomResourceFetchResponse; -// TODO fairly sure there's a easier way to do this - -export type KubernetesObjectTypes = - | 'pods' - | 'services' - | 'configmaps' - | 'deployments' - | 'replicasets' - | 'horizontalpodautoscalers' - | 'ingresses' - | 'customresources'; - export interface PodFetchResponse { type: 'pods'; resources: Array; @@ -116,30 +94,10 @@ export interface CustomResourceFetchResponse { resources: Array; } -export interface ObjectFetchParams { - serviceId: string; - clusterDetails: ClusterDetails; - objectTypesToFetch: Set; - labelSelector: string; - customResources: CustomResource[]; -} - -// Fetches information from a kubernetes cluster using the cluster details object -// to target a specific cluster -export interface KubernetesFetcher { - fetchObjectsForService( - params: ObjectFetchParams, - ): Promise; -} - -// Used to locate which cluster(s) a service is running on -export interface KubernetesServiceLocator { - getClustersByServiceId(serviceId: string): Promise; -} - -// Used to load cluster details from different sources -export interface KubernetesClustersSupplier { - getClusters(): Promise; +export interface KubernetesFetchError { + errorType: KubernetesErrorTypes; + statusCode?: number; + resourcePath?: string; } export type KubernetesErrorTypes = @@ -147,62 +105,3 @@ export type KubernetesErrorTypes = | 'UNAUTHORIZED_ERROR' | 'SYSTEM_ERROR' | 'UNKNOWN_ERROR'; - -export interface KubernetesFetchError { - errorType: KubernetesErrorTypes; - statusCode?: number; - resourcePath?: string; -} - -export interface ConfigClusterLocatorMethod { - /** - * @visibility frontend - */ - type: 'config'; - clusters: { - /** - * @visibility frontend - */ - url: string; - /** - * @visibility frontend - */ - name: string; - /** - * @visibility secret - */ - serviceAccountToken: string | undefined; - /** - * @visibility frontend - */ - authProvider: 'aws' | 'google' | 'serviceAccount'; - }[]; -} - -export interface GKEClusterLocatorMethod { - /** - * @visibility frontend - */ - type: 'gke'; - /** - * @visibility frontend - */ - projectId: string; - /** - * @visibility frontend - */ - region?: string; -} - -export type ClusterLocatorMethod = - | ConfigClusterLocatorMethod - | GKEClusterLocatorMethod; - -export type ServiceLocatorMethod = 'multiTenant' | 'http'; // TODO implement http -export type AuthProviderType = 'google' | 'serviceAccount' | 'aws'; - -export interface CustomResource { - group: string; - apiVersion: string; - plural: string; -} From 99930d194c3cab71dd7bc0f54921ab586ce925f0 Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 15 Apr 2021 13:35:55 +0200 Subject: [PATCH 08/12] kubernetes-common: Exports types in a way that pleases the transpiler Signed-off-by: Juan Lulkin --- plugins/kubernetes-backend/src/types/types.ts | 9 +++++---- plugins/kubernetes-common/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index b7822557c2..344e265426 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -15,17 +15,18 @@ */ import type { - FetchResponse, - KubernetesFetchError, + FetchResponse as FetchResponseCommon, + KubernetesFetchError as KubernetesFetchErrorCommon, } from '@backstage/plugin-kubernetes-common'; export type { - FetchResponse, KubernetesErrorTypes, - KubernetesFetchError, KubernetesRequestBody, } from '@backstage/plugin-kubernetes-common'; +export type KubernetesFetchError = KubernetesFetchErrorCommon; +export type FetchResponse = FetchResponseCommon; + export type ClusterLocatorMethod = | ConfigClusterLocatorMethod | GKEClusterLocatorMethod; diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 813b965c2c..682223d92e 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -24,7 +24,7 @@ "dist" ], "scripts": { - "build": "backstage-cli build --outputs cjs,types", + "build": "backstage-cli build", "lint": "backstage-cli lint", "test": "backstage-cli test", "prepack": "backstage-cli prepack", From fb4ebd961edc3059c89c5f230c4371e29fa9ecaa Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 15 Apr 2021 14:11:20 +0200 Subject: [PATCH 09/12] plugin-kubernetes-common: Adds pass with no tests, since these are just types Signed-off-by: Juan Lulkin --- plugins/kubernetes-common/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 682223d92e..3551eb6413 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -26,7 +26,7 @@ "scripts": { "build": "backstage-cli build", "lint": "backstage-cli lint", - "test": "backstage-cli test", + "test": "backstage-cli test --passWithNoTests", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", "clean": "backstage-cli clean" From 37dc8d6e9c5dcdbe1b08b358b862e89fb84cddda Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 29 Apr 2021 14:26:11 +0200 Subject: [PATCH 10/12] kubernetes-backend: Adds skipTLSVerify to ClusterDetails Signed-off-by: Juan Lulkin --- plugins/kubernetes-backend/src/types/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 344e265426..d61c35e167 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -127,4 +127,5 @@ export interface ClusterDetails { url: string; authProvider: string; serviceAccountToken?: string | undefined; + skipTLSVerify?: boolean; } From e6715553b305fff00497be9e72c0aeb66c97d67a Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 29 Apr 2021 17:32:59 +0200 Subject: [PATCH 11/12] kubernetes-backend: Use imports directly from common Signed-off-by: Juan Lulkin --- .../GoogleKubernetesAuthTranslator.ts | 3 ++- .../ServiceAccountKubernetesAuthTranslator.ts | 3 ++- .../src/kubernetes-auth-translator/types.ts | 3 ++- .../src/service/KubernetesFanOutHandler.ts | 2 +- .../src/service/KubernetesFetcher.ts | 8 +++++--- plugins/kubernetes-backend/src/service/router.ts | 2 +- plugins/kubernetes-backend/src/types/types.ts | 12 ++---------- 7 files changed, 15 insertions(+), 18 deletions(-) diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts index 0dd2a4bcc2..9dc4519966 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts @@ -15,7 +15,8 @@ */ import { KubernetesAuthTranslator } from './types'; -import { KubernetesRequestBody, ClusterDetails } from '../types/types'; +import { ClusterDetails } from '../types/types'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class GoogleKubernetesAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts index 6433e41546..3610bd4d9f 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts @@ -15,7 +15,8 @@ */ import { KubernetesAuthTranslator } from './types'; -import { KubernetesRequestBody, ClusterDetails } from '../types/types'; +import { ClusterDetails } from '../types/types'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class ServiceAccountKubernetesAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts index c01a57889c..7a04e230c6 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts @@ -14,7 +14,8 @@ * limitations under the License. */ -import { KubernetesRequestBody, ClusterDetails } from '../types/types'; +import { ClusterDetails } from '../types/types'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export interface KubernetesAuthTranslator { decorateClusterDetailsWithAuth( diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 6db6e2ad4a..75e2f8233c 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -20,9 +20,9 @@ import { CustomResource, KubernetesFetcher, KubernetesObjectTypes, - KubernetesRequestBody, KubernetesServiceLocator, } from '../types/types'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types'; import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index 10e5640bab..6958bd3387 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -32,15 +32,17 @@ import lodash, { Dictionary } from 'lodash'; import { Logger } from 'winston'; import { ClusterDetails, - FetchResponse, FetchResponseWrapper, - KubernetesErrorTypes, KubernetesFetcher, - KubernetesFetchError, KubernetesObjectTypes, ObjectFetchParams, CustomResource, } from '../types/types'; +import { + FetchResponse, + KubernetesFetchError, + KubernetesErrorTypes, +} from '@backstage/plugin-kubernetes-common'; import { KubernetesClientProvider } from './KubernetesClientProvider'; export interface Clients { diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 189f2eb9c5..ab7bb5befa 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -23,11 +23,11 @@ import { MultiTenantServiceLocator } from '../service-locator/MultiTenantService import { ClusterDetails, KubernetesClustersSupplier, - KubernetesRequestBody, KubernetesServiceLocator, ServiceLocatorMethod, CustomResource, } from '../types/types'; +import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesClientProvider } from './KubernetesClientProvider'; import { KubernetesFanOutHandler } from './KubernetesFanOutHandler'; import { KubernetesClientBasedFetcher } from './KubernetesFetcher'; diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index d61c35e167..0be0b447af 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -15,18 +15,10 @@ */ import type { - FetchResponse as FetchResponseCommon, - KubernetesFetchError as KubernetesFetchErrorCommon, + FetchResponse, + KubernetesFetchError, } from '@backstage/plugin-kubernetes-common'; -export type { - KubernetesErrorTypes, - KubernetesRequestBody, -} from '@backstage/plugin-kubernetes-common'; - -export type KubernetesFetchError = KubernetesFetchErrorCommon; -export type FetchResponse = FetchResponseCommon; - export type ClusterLocatorMethod = | ConfigClusterLocatorMethod | GKEClusterLocatorMethod; From 5550c49028c945bd7320d6bc1ac3bf26c2ec4155 Mon Sep 17 00:00:00 2001 From: Juan Lulkin Date: Thu, 29 Apr 2021 17:33:42 +0200 Subject: [PATCH 12/12] plugin-kubernetes: Fixes common lib name Signed-off-by: Juan Lulkin --- .changeset/silly-tables-build.md | 2 +- plugins/kubernetes/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/silly-tables-build.md b/.changeset/silly-tables-build.md index 3f7b3182dd..cb2fd73950 100644 --- a/.changeset/silly-tables-build.md +++ b/.changeset/silly-tables-build.md @@ -3,4 +3,4 @@ '@backstage/plugin-kubernetes-backend': patch --- -Adds @backstage/kubernetes-common library to share types between kubernetes frontend and backend. +Adds @backstage/plugin-kubernetes-common library to share types between kubernetes frontend and backend. diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index c808678922..d305ea4b4b 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -33,7 +33,7 @@ "@backstage/catalog-model": "^0.7.4", "@backstage/config": "^0.1.4", "@backstage/core": "^0.7.6", - "@backstage/kubernetes-common": "^0.1.0", + "@backstage/plugin-kubernetes-common": "^0.1.0", "@backstage/plugin-catalog-react": "^0.1.3", "@backstage/theme": "^0.2.6", "@kubernetes/client-node": "^0.14.0",