From 8902c2e39d9aef48c13fc43d58c8791e113e3dda Mon Sep 17 00:00:00 2001 From: Carlos Esteban Lopez Jaramillo Date: Fri, 2 Sep 2022 12:34:58 -0500 Subject: [PATCH] chore: Exporting KubernetesClientProvider as requested in issue #10457 (#13225) * chore: Exporting KubernetesClientProvider as requested in issue #10457 Signed-off-by: Carlos Esteban Lopez * chore: Adding changeset Signed-off-by: Carlos Esteban Lopez * chore: Updating API reports Signed-off-by: Carlos Esteban Lopez * chore: Export auth translator contents & updating API reports Signed-off-by: Carlos Esteban Lopez * chore: Fix API reports warnings Signed-off-by: Carlos Esteban Lopez Signed-off-by: Carlos Esteban Lopez Co-authored-by: Carlos Esteban Lopez --- .changeset/brave-steaks-lay.md | 5 + plugins/kubernetes-backend/api-report.md | 121 +++++++++++++++++- plugins/kubernetes-backend/src/index.ts | 11 ++ .../AwsIamKubernetesAuthTranslator.ts | 10 +- .../AzureIdentityKubernetesAuthTranslator.ts | 4 + .../GoogleKubernetesAuthTranslator.ts | 4 + .../GoogleServiceAccountAuthProvider.ts | 4 + .../KubernetesAuthTranslatorGenerator.ts | 4 + .../NoopKubernetesAuthTranslator.ts | 4 + .../OidcKubernetesAuthTranslator.ts | 4 + .../src/kubernetes-auth-translator/types.ts | 4 + .../src/service/KubernetesClientProvider.ts | 4 + 12 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 .changeset/brave-steaks-lay.md diff --git a/.changeset/brave-steaks-lay.md b/.changeset/brave-steaks-lay.md new file mode 100644 index 0000000000..a36fa5c80b --- /dev/null +++ b/.changeset/brave-steaks-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +chore: Exporting KubernetesClientProvider and everything in kubernetes-auth-translator as requested in issue #10457 diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index d98d80ddb1..f97a0fd032 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -5,18 +5,24 @@ ```ts import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; +import { CoreV1Api } from '@kubernetes/client-node'; +import { Credentials } from 'aws-sdk'; +import { CustomObjectsApi } from '@kubernetes/client-node'; import { Duration } from 'luxon'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; import type { FetchResponse } from '@backstage/plugin-kubernetes-common'; import type { JsonObject } from '@backstage/types'; +import { KubeConfig } from '@kubernetes/client-node'; import type { KubernetesFetchError } from '@backstage/plugin-kubernetes-common'; -import type { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; import type { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { Logger } from 'winston'; +import { Metrics } from '@kubernetes/client-node'; import type { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PodStatus } from '@kubernetes/client-node/dist/top'; +import { TokenCredential } from '@azure/identity'; // @alpha (undocumented) export interface AWSClusterDetails extends ClusterDetails { @@ -26,9 +32,45 @@ export interface AWSClusterDetails extends ClusterDetails { externalId?: string; } +// @alpha (undocumented) +export class AwsIamKubernetesAuthTranslator + implements KubernetesAuthTranslator +{ + // (undocumented) + awsGetCredentials: () => Promise; + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: AWSClusterDetails, + ): Promise; + // (undocumented) + getBearerToken( + clusterName: string, + assumeRole?: string, + externalId?: string, + ): Promise; + // (undocumented) + getCredentials( + assumeRole?: string, + externalId?: string, + ): Promise; + // (undocumented) + validCredentials(creds: SigningCreds): boolean; +} + // @alpha (undocumented) export interface AzureClusterDetails extends ClusterDetails {} +// @alpha (undocumented) +export class AzureIdentityKubernetesAuthTranslator + implements KubernetesAuthTranslator +{ + constructor(logger: Logger, tokenCredential?: TokenCredential); + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: AzureClusterDetails, + ): Promise; +} + // @alpha (undocumented) export interface ClusterDetails { // (undocumented) @@ -82,6 +124,47 @@ export interface FetchResponseWrapper { // @alpha (undocumented) export interface GKEClusterDetails extends ClusterDetails {} +// @alpha (undocumented) +export class GoogleKubernetesAuthTranslator + implements KubernetesAuthTranslator +{ + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: GKEClusterDetails, + authConfig: KubernetesRequestAuth, + ): Promise; +} + +// @alpha (undocumented) +export class GoogleServiceAccountAuthTranslator + implements KubernetesAuthTranslator +{ + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: GKEClusterDetails, + ): Promise; +} + +// @alpha (undocumented) +export interface KubernetesAuthTranslator { + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: ClusterDetails, + authConfig: KubernetesRequestAuth, + ): Promise; +} + +// @alpha (undocumented) +export class KubernetesAuthTranslatorGenerator { + // (undocumented) + static getKubernetesAuthTranslatorInstance( + authProvider: string, + options: { + logger: Logger; + }, + ): KubernetesAuthTranslator; +} + // @alpha (undocumented) export class KubernetesBuilder { constructor(env: KubernetesEnvironment); @@ -152,6 +235,18 @@ export type KubernetesBuilderReturn = Promise<{ serviceLocator: KubernetesServiceLocator; }>; +// @alpha (undocumented) +export class KubernetesClientProvider { + // (undocumented) + getCoreClientByClusterDetails(clusterDetails: ClusterDetails): CoreV1Api; + // (undocumented) + getCustomObjectsClient(clusterDetails: ClusterDetails): CustomObjectsApi; + // (undocumented) + getKubeConfig(clusterDetails: ClusterDetails): KubeConfig; + // (undocumented) + getMetricsClient(clusterDetails: ClusterDetails): Metrics; +} + // @alpha export interface KubernetesClustersSupplier { getClusters(): Promise; @@ -238,6 +333,14 @@ export interface KubernetesServiceLocator { }>; } +// @alpha (undocumented) +export class NoopKubernetesAuthTranslator implements KubernetesAuthTranslator { + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: ServiceAccountClusterDetails, + ): Promise; +} + // @alpha (undocumented) export interface ObjectFetchParams { // (undocumented) @@ -273,6 +376,15 @@ export interface ObjectToFetch { plural: string; } +// @alpha (undocumented) +export class OidcKubernetesAuthTranslator implements KubernetesAuthTranslator { + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: ClusterDetails, + authConfig: KubernetesRequestAuth, + ): Promise; +} + // @alpha (undocumented) export interface RouterOptions { // (undocumented) @@ -292,4 +404,11 @@ export interface ServiceAccountClusterDetails extends ClusterDetails {} // @alpha (undocumented) export type ServiceLocatorMethod = 'multiTenant' | 'http'; + +// @alpha (undocumented) +export type SigningCreds = { + accessKeyId: string | undefined; + secretAccessKey: string | undefined; + sessionToken: string | undefined; +}; ``` diff --git a/plugins/kubernetes-backend/src/index.ts b/plugins/kubernetes-backend/src/index.ts index ac514db104..e2eee3f24e 100644 --- a/plugins/kubernetes-backend/src/index.ts +++ b/plugins/kubernetes-backend/src/index.ts @@ -20,8 +20,19 @@ * @packageDocumentation */ +export * from './kubernetes-auth-translator/AwsIamKubernetesAuthTranslator'; +export * from './kubernetes-auth-translator/AzureIdentityKubernetesAuthTranslator'; +export * from './kubernetes-auth-translator/GoogleKubernetesAuthTranslator'; +export * from './kubernetes-auth-translator/GoogleServiceAccountAuthProvider'; +export * from './kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; +export * from './kubernetes-auth-translator/NoopKubernetesAuthTranslator'; +export * from './kubernetes-auth-translator/OidcKubernetesAuthTranslator'; +export * from './kubernetes-auth-translator/types'; + export * from './service/router'; export * from './service/KubernetesBuilder'; +export * from './service/KubernetesClientProvider'; + export * from './types/types'; export { DEFAULT_OBJECTS } from './service/KubernetesFanOutHandler'; diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts index 9f1353ca5c..ccb0f28109 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts @@ -18,12 +18,20 @@ import { sign } from 'aws4'; import { AWSClusterDetails } from '../types/types'; import { KubernetesAuthTranslator } from './types'; -type SigningCreds = { +/** + * + * @alpha + */ +export type SigningCreds = { accessKeyId: string | undefined; secretAccessKey: string | undefined; sessionToken: string | undefined; }; +/** + * + * @alpha + */ export class AwsIamKubernetesAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AzureIdentityKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AzureIdentityKubernetesAuthTranslator.ts index 5b8a709270..6b1f2281c4 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AzureIdentityKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AzureIdentityKubernetesAuthTranslator.ts @@ -25,6 +25,10 @@ import { const aksScope = '6dae42f8-4368-4678-94ff-3960e28e3630/.default'; // This scope is the same for all Azure Managed Kubernetes +/** + * + * @alpha + */ export class AzureIdentityKubernetesAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts index 741e6b2533..cabf66b40b 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts @@ -18,6 +18,10 @@ import { KubernetesAuthTranslator } from './types'; import { GKEClusterDetails } from '../types/types'; import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +/** + * + * @alpha + */ export class GoogleKubernetesAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleServiceAccountAuthProvider.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleServiceAccountAuthProvider.ts index e3e591065b..1eca62b363 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleServiceAccountAuthProvider.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleServiceAccountAuthProvider.ts @@ -17,6 +17,10 @@ import { KubernetesAuthTranslator } from './types'; import { GKEClusterDetails } from '../types/types'; import * as container from '@google-cloud/container'; +/** + * + * @alpha + */ export class GoogleServiceAccountAuthTranslator implements KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts index 24de85d7b7..d4eed29653 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts @@ -23,6 +23,10 @@ import { GoogleServiceAccountAuthTranslator } from './GoogleServiceAccountAuthPr import { AzureIdentityKubernetesAuthTranslator } from './AzureIdentityKubernetesAuthTranslator'; import { OidcKubernetesAuthTranslator } from './OidcKubernetesAuthTranslator'; +/** + * + * @alpha + */ export class KubernetesAuthTranslatorGenerator { static getKubernetesAuthTranslatorInstance( authProvider: string, diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/NoopKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/NoopKubernetesAuthTranslator.ts index d68b1a4365..2ef78495a1 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/NoopKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/NoopKubernetesAuthTranslator.ts @@ -17,6 +17,10 @@ import { KubernetesAuthTranslator } from './types'; import { ServiceAccountClusterDetails } from '../types/types'; +/** + * + * @alpha + */ export class NoopKubernetesAuthTranslator implements KubernetesAuthTranslator { async decorateClusterDetailsWithAuth( clusterDetails: ServiceAccountClusterDetails, diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/OidcKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/OidcKubernetesAuthTranslator.ts index 8ca546a25b..e5450b2fe1 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/OidcKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/OidcKubernetesAuthTranslator.ts @@ -18,6 +18,10 @@ import { KubernetesAuthTranslator } from './types'; import { ClusterDetails } from '../types/types'; import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +/** + * + * @alpha + */ export class OidcKubernetesAuthTranslator implements KubernetesAuthTranslator { async decorateClusterDetailsWithAuth( clusterDetails: ClusterDetails, diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts index 640a20303e..f8417f8468 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/types.ts @@ -17,6 +17,10 @@ import { ClusterDetails } from '../types/types'; import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +/** + * + * @alpha + */ export interface KubernetesAuthTranslator { decorateClusterDetailsWithAuth( clusterDetails: ClusterDetails, diff --git a/plugins/kubernetes-backend/src/service/KubernetesClientProvider.ts b/plugins/kubernetes-backend/src/service/KubernetesClientProvider.ts index bd06016f78..522925beb5 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesClientProvider.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesClientProvider.ts @@ -22,6 +22,10 @@ import { } from '@kubernetes/client-node'; import { ClusterDetails } from '../types/types'; +/** + * + * @alpha + */ export class KubernetesClientProvider { // visible for testing getKubeConfig(clusterDetails: ClusterDetails) {