migrate oidcTokenProvider to authMetadata

Signed-off-by: Jamie Klassen <jklassen@vmware.com>
This commit is contained in:
Jamie Klassen
2023-09-05 17:05:33 -04:00
parent 8dd179ac2f
commit 1449a035ce
8 changed files with 29 additions and 22 deletions
-2
View File
@@ -54,7 +54,6 @@ export class AzureIdentityKubernetesAuthTranslator
// @public (undocumented)
export interface ClusterDetails {
// (undocumented)
authMetadata?: Record<string, string>;
// (undocumented)
authProvider: string;
@@ -67,7 +66,6 @@ export interface ClusterDetails {
dashboardParameters?: JsonObject;
dashboardUrl?: string;
name: string;
oidcTokenProvider?: string | undefined;
skipMetricsLookup?: boolean;
// (undocumented)
skipTLSVerify?: boolean;
@@ -92,7 +92,7 @@ describe('CatalogClusterLocator', () => {
url: 'https://apiserver.com',
caData: 'caData',
authProvider: 'oidc',
oidcTokenProvider: 'google',
authMetadata: { oidcTokenProvider: 'google' },
skipMetricsLookup: true,
skipTLSVerify: true,
dashboardUrl: 'my-url',
@@ -114,8 +114,8 @@ describe('CatalogClusterLocator', () => {
authMetadata: {
assumeRole: 'my-role',
externalId: 'my-id',
oidcTokenProvider: 'google',
},
oidcTokenProvider: 'google',
skipMetricsLookup: false,
skipTLSVerify: false,
dashboardUrl: 'my-url',
@@ -57,6 +57,10 @@ export class CatalogClusterLocator implements KubernetesClustersSupplier {
filter: [filter],
});
return clusters.items.map(entity => {
const oidcTokenProvider =
entity.metadata.annotations?.[
ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER
];
const clusterDetails: ClusterDetails = {
name: entity.metadata.name,
url: entity.metadata.annotations![ANNOTATION_KUBERNETES_API_SERVER]!,
@@ -64,10 +68,7 @@ export class CatalogClusterLocator implements KubernetesClustersSupplier {
entity.metadata.annotations![ANNOTATION_KUBERNETES_API_SERVER_CA]!,
authProvider:
entity.metadata.annotations![ANNOTATION_KUBERNETES_AUTH_PROVIDER]!,
oidcTokenProvider:
entity.metadata.annotations![
ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER
]!,
...(oidcTokenProvider && { authMetadata: { oidcTokenProvider } }),
skipMetricsLookup:
entity.metadata.annotations![
ANNOTATION_KUBERNETES_SKIP_METRICS_LOOKUP
@@ -94,6 +95,7 @@ export class CatalogClusterLocator implements KubernetesClustersSupplier {
entity.metadata.annotations![
ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID
]!,
...clusterDetails.authMetadata,
},
};
}
@@ -88,7 +88,13 @@ export class ConfigClusterLocator implements KubernetesClustersSupplier {
case 'oidc': {
const oidcTokenProvider = c.getString('oidcTokenProvider');
return { oidcTokenProvider, ...clusterDetails };
return {
authMetadata: {
oidcTokenProvider,
...clusterDetails.authMetadata,
},
...clusterDetails,
};
}
case 'serviceAccount': {
return clusterDetails;
@@ -28,7 +28,7 @@ describe('OidcKubernetesAuthTranslator tests', () => {
it('returns cluster details with auth token', async () => {
const details = await at.decorateClusterDetailsWithAuth(
{
oidcTokenProvider: 'okta',
authMetadata: { oidcTokenProvider: 'okta' },
...baseClusterDetails,
},
{
@@ -50,7 +50,7 @@ describe('OidcKubernetesAuthTranslator tests', () => {
it('returns error when token is not included in request body', async () => {
await expect(
at.decorateClusterDetailsWithAuth(
{ oidcTokenProvider: 'okta', ...baseClusterDetails },
{ authMetadata: { oidcTokenProvider: 'okta' }, ...baseClusterDetails },
{},
),
).rejects.toThrow('Auth token not found under oidc.okta in request body');
@@ -32,7 +32,7 @@ export class OidcKubernetesAuthTranslator implements KubernetesAuthTranslator {
clusterDetails,
);
const { oidcTokenProvider } = clusterDetails;
const oidcTokenProvider = clusterDetails.authMetadata?.oidcTokenProvider;
if (!oidcTokenProvider || oidcTokenProvider === '') {
throw new Error(
@@ -339,12 +339,15 @@ export class KubernetesBuilder {
router.get('/clusters', async (_, res) => {
const clusterDetails = await this.fetchClusterDetails(clusterSupplier);
res.json({
items: clusterDetails.map(cd => ({
name: cd.name,
dashboardUrl: cd.dashboardUrl,
authProvider: cd.authProvider,
oidcTokenProvider: cd.oidcTokenProvider,
})),
items: clusterDetails.map(cd => {
const oidcTokenProvider = cd.authMetadata?.oidcTokenProvider;
return {
name: cd.name,
dashboardUrl: cd.dashboardUrl,
authProvider: cd.authProvider,
...(oidcTokenProvider && { oidcTokenProvider }),
};
}),
});
});
@@ -156,9 +156,9 @@ export interface ClusterDetails {
url: string;
authProvider: string;
/**
* oidc provider used to get id tokens to authenticate against kubernetes
* Provider-specific authentication configuration
*/
oidcTokenProvider?: string | undefined;
authMetadata?: Record<string, string>;
skipTLSVerify?: boolean;
/**
* Whether to skip the lookup to the metrics server to retrieve pod resource usage.
@@ -204,8 +204,6 @@ export interface ClusterDetails {
* Kubernetes resources.
*/
customResources?: CustomResourceMatcher[];
authMetadata?: Record<string, string>;
}
/**