diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 95aff769e9..ebaae3dfa8 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -30,14 +30,6 @@ export class AksKubernetesAuthTranslator { ): Promise; } -// @public (undocumented) -export interface AWSClusterDetails extends ClusterDetails { - // (undocumented) - assumeRole?: string; - // (undocumented) - externalId?: string; -} - // @public (undocumented) export class AwsIamKubernetesAuthTranslator implements KubernetesAuthTranslator @@ -45,8 +37,8 @@ export class AwsIamKubernetesAuthTranslator constructor(opts: { config: Config }); // (undocumented) decorateClusterDetailsWithAuth( - clusterDetails: AWSClusterDetails, - ): Promise; + clusterDetails: ClusterDetails, + ): Promise; } // @public (undocumented) @@ -406,7 +398,7 @@ export class NoopKubernetesAuthTranslator implements KubernetesAuthTranslator { // @public (undocumented) export interface ObjectFetchParams { // (undocumented) - clusterDetails: AWSClusterDetails | GKEClusterDetails | ClusterDetails; + clusterDetails: GKEClusterDetails | ClusterDetails; // (undocumented) customResources: CustomResource[]; // (undocumented) diff --git a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts index 6fb337975e..86776f4d02 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts @@ -111,8 +111,10 @@ describe('CatalogClusterLocator', () => { url: 'https://apiserver.com', caData: 'caData', authProvider: 'aws', - assumeRole: 'my-role', - externalId: 'my-id', + authMetadata: { + assumeRole: 'my-role', + externalId: 'my-id', + }, oidcTokenProvider: 'google', skipMetricsLookup: false, skipTLSVerify: false, diff --git a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.ts b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.ts index c48cc99eb6..9d81785a28 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.ts @@ -14,11 +14,7 @@ * limitations under the License. */ -import { - AWSClusterDetails, - ClusterDetails, - KubernetesClustersSupplier, -} from '../types/types'; +import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; import { CATALOG_FILTER_EXISTS, CatalogApi } from '@backstage/catalog-client'; import { ANNOTATION_KUBERNETES_API_SERVER, @@ -89,15 +85,17 @@ export class CatalogClusterLocator implements KubernetesClustersSupplier { if (clusterDetails.authProvider === 'aws') { return { ...clusterDetails, - assumeRole: - entity.metadata.annotations![ - ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE - ]!, - externalId: - entity.metadata.annotations![ - ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID - ]!, - } as AWSClusterDetails; + authMetadata: { + assumeRole: + entity.metadata.annotations![ + ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE + ]!, + externalId: + entity.metadata.annotations![ + ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID + ]!, + }, + }; } return clusterDetails; diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts index f5d056f355..037a226476 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts @@ -17,7 +17,7 @@ import '@backstage/backend-common'; import { ConfigReader, Config } from '@backstage/config'; import { ConfigClusterLocator } from './ConfigClusterLocator'; -import { AWSClusterDetails, ClusterDetails } from '../types/types'; +import { ClusterDetails } from '../types/types'; describe('ConfigClusterLocator', () => { it('empty clusters returns empty cluster details', async () => { @@ -142,36 +142,39 @@ describe('ConfigClusterLocator', () => { const result = await sut.getClusters(); - expect(result).toStrictEqual([ + expect(result).toStrictEqual([ { - assumeRole: undefined, name: 'cluster1', - externalId: undefined, url: 'http://localhost:8080', authProvider: 'aws', - authMetadata: { serviceAccountToken: 'token' }, + authMetadata: { + serviceAccountToken: 'token', + }, skipTLSVerify: false, skipMetricsLookup: false, caData: undefined, caFile: undefined, }, { - assumeRole: 'SomeRole', name: 'cluster2', - externalId: undefined, url: 'http://localhost:8081', authProvider: 'aws', + authMetadata: { + assumeRole: 'SomeRole', + }, skipTLSVerify: true, skipMetricsLookup: false, caData: undefined, caFile: undefined, }, { - assumeRole: 'SomeRole', name: 'cluster2', - externalId: 'SomeExternalId', url: 'http://localhost:8081', authProvider: 'aws', + authMetadata: { + assumeRole: 'SomeRole', + externalId: 'SomeExternalId', + }, skipTLSVerify: true, skipMetricsLookup: false, caData: undefined, diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts index e83bd763c4..161988d35b 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts @@ -73,7 +73,14 @@ export class ConfigClusterLocator implements KubernetesClustersSupplier { const assumeRole = c.getOptionalString('assumeRole'); const externalId = c.getOptionalString('externalId'); - return { assumeRole, externalId, ...clusterDetails }; + return { + authMetadata: { + ...(assumeRole && { assumeRole }), + ...(externalId && { externalId }), + ...clusterDetails.authMetadata, + }, + ...clusterDetails, + }; } case 'azure': { return clusterDetails; diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts index 30bb240a9f..8ba77491ab 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts @@ -70,10 +70,10 @@ describe('AwsIamKubernetesAuthTranslator tests', () => { const authTranslator = new AwsIamKubernetesAuthTranslator({ config }); const authPromise = authTranslator.decorateClusterDetailsWithAuth({ - assumeRole: 'SomeRole', name: 'test-cluster', url: '', authProvider: 'aws', + authMetadata: { assumeRole: 'SomeRole' }, }); expect((await authPromise).authMetadata!.serviceAccountToken).toEqual( 'k8s-aws-v1.aHR0cHM6Ly9odHRwczovL2V4YW1wbGUuY29tL2FzZGY_', @@ -96,11 +96,13 @@ describe('AwsIamKubernetesAuthTranslator tests', () => { const authTranslator = new AwsIamKubernetesAuthTranslator({ config }); const authPromise = authTranslator.decorateClusterDetailsWithAuth({ - assumeRole: 'SomeRole', - externalId: 'external-id', name: 'test-cluster', url: '', authProvider: 'aws', + authMetadata: { + assumeRole: 'SomeRole', + externalId: 'external-id', + }, }); expect((await authPromise).authMetadata!.serviceAccountToken).toEqual( 'k8s-aws-v1.aHR0cHM6Ly9odHRwczovL2V4YW1wbGUuY29tL2FzZGY_', diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts index c30cfd5bfd..1a1fb02fe3 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { AWSClusterDetails } from '../types/types'; +import { ClusterDetails } from '../types/types'; import { KubernetesAuthTranslator } from './types'; import { fromTemporaryCredentials } from '@aws-sdk/credential-providers'; import { SignatureV4 } from '@aws-sdk/signature-v4'; @@ -110,9 +110,9 @@ export class AwsIamKubernetesAuthTranslator } async decorateClusterDetailsWithAuth( - clusterDetails: AWSClusterDetails, - ): Promise { - const clusterDetailsWithAuthToken: AWSClusterDetails = Object.assign( + clusterDetails: ClusterDetails, + ): Promise { + const clusterDetailsWithAuthToken: ClusterDetails = Object.assign( {}, clusterDetails, ); @@ -120,8 +120,8 @@ export class AwsIamKubernetesAuthTranslator clusterDetailsWithAuthToken.authMetadata = { serviceAccountToken: await this.getBearerToken( clusterDetails.name, - clusterDetails.assumeRole, - clusterDetails.externalId, + clusterDetails.authMetadata?.assumeRole, + clusterDetails.authMetadata?.externalId, ), ...clusterDetailsWithAuthToken.authMetadata, }; diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 6711462916..6d53ac350b 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -33,7 +33,7 @@ import { Config } from '@backstage/config'; */ export interface ObjectFetchParams { serviceId: string; - clusterDetails: AWSClusterDetails | GKEClusterDetails | ClusterDetails; + clusterDetails: GKEClusterDetails | ClusterDetails; objectTypesToFetch: Set; labelSelector: string; customResources: CustomResource[]; @@ -220,15 +220,6 @@ export interface GKEClusterDetails extends ClusterDetails {} */ export interface AzureClusterDetails extends ClusterDetails {} -/** - * - * @public - */ -export interface AWSClusterDetails extends ClusterDetails { - assumeRole?: string; - externalId?: string; -} - /** * * @public