run prettier formatting
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
+11
-8
@@ -21,11 +21,13 @@ import { KubernetesAuthTranslator } from './types';
|
||||
const base64 = (str: string) =>
|
||||
Buffer.from(str.toString(), 'binary').toString('base64');
|
||||
const prepend = (prep: string) => (str: string) => prep + str;
|
||||
const replace = (search: string | RegExp, substitution: string) => (
|
||||
str: string,
|
||||
) => str.replace(search, substitution);
|
||||
const pipe = (fns: ReadonlyArray<any>) => (thing: string): string =>
|
||||
fns.reduce((val, fn) => fn(val), thing);
|
||||
const replace =
|
||||
(search: string | RegExp, substitution: string) => (str: string) =>
|
||||
str.replace(search, substitution);
|
||||
const pipe =
|
||||
(fns: ReadonlyArray<any>) =>
|
||||
(thing: string): string =>
|
||||
fns.reduce((val, fn) => fn(val), thing);
|
||||
const removePadding = replace(/=+$/, '');
|
||||
const makeUrlSafe = pipe([replace('+', '-'), replace('/', '_')]);
|
||||
|
||||
@@ -36,11 +38,12 @@ type SigningCreds = {
|
||||
};
|
||||
|
||||
export class AwsIamKubernetesAuthTranslator
|
||||
implements KubernetesAuthTranslator {
|
||||
implements KubernetesAuthTranslator
|
||||
{
|
||||
validCredentials(creds: SigningCreds): boolean {
|
||||
return ((creds?.accessKeyId &&
|
||||
return (creds?.accessKeyId &&
|
||||
creds?.secretAccessKey &&
|
||||
creds?.sessionToken) as unknown) as boolean;
|
||||
creds?.sessionToken) as unknown as boolean;
|
||||
}
|
||||
|
||||
awsGetCredentials = async (): Promise<Credentials> => {
|
||||
|
||||
+2
-1
@@ -19,7 +19,8 @@ import { GKEClusterDetails } from '../types/types';
|
||||
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
|
||||
|
||||
export class GoogleKubernetesAuthTranslator
|
||||
implements KubernetesAuthTranslator {
|
||||
implements KubernetesAuthTranslator
|
||||
{
|
||||
async decorateClusterDetailsWithAuth(
|
||||
clusterDetails: GKEClusterDetails,
|
||||
requestBody: KubernetesRequestBody,
|
||||
|
||||
+6
-9
@@ -24,23 +24,20 @@ describe('getKubernetesAuthTranslatorInstance', () => {
|
||||
const sut = KubernetesAuthTranslatorGenerator;
|
||||
|
||||
it('can return an auth translator for google auth', () => {
|
||||
const authTranslator: KubernetesAuthTranslator = sut.getKubernetesAuthTranslatorInstance(
|
||||
'google',
|
||||
);
|
||||
const authTranslator: KubernetesAuthTranslator =
|
||||
sut.getKubernetesAuthTranslatorInstance('google');
|
||||
expect(authTranslator instanceof GoogleKubernetesAuthTranslator).toBe(true);
|
||||
});
|
||||
|
||||
it('can return an auth translator for aws auth', () => {
|
||||
const authTranslator: KubernetesAuthTranslator = sut.getKubernetesAuthTranslatorInstance(
|
||||
'aws',
|
||||
);
|
||||
const authTranslator: KubernetesAuthTranslator =
|
||||
sut.getKubernetesAuthTranslatorInstance('aws');
|
||||
expect(authTranslator instanceof AwsIamKubernetesAuthTranslator).toBe(true);
|
||||
});
|
||||
|
||||
it('can return an auth translator for serviceAccount auth', () => {
|
||||
const authTranslator: KubernetesAuthTranslator = sut.getKubernetesAuthTranslatorInstance(
|
||||
'serviceAccount',
|
||||
);
|
||||
const authTranslator: KubernetesAuthTranslator =
|
||||
sut.getKubernetesAuthTranslatorInstance('serviceAccount');
|
||||
expect(
|
||||
authTranslator instanceof ServiceAccountKubernetesAuthTranslator,
|
||||
).toBe(true);
|
||||
|
||||
+2
-1
@@ -19,7 +19,8 @@ import { ServiceAccountClusterDetails } from '../types/types';
|
||||
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
|
||||
|
||||
export class ServiceAccountKubernetesAuthTranslator
|
||||
implements KubernetesAuthTranslator {
|
||||
implements KubernetesAuthTranslator
|
||||
{
|
||||
async decorateClusterDetailsWithAuth(
|
||||
clusterDetails: ServiceAccountClusterDetails,
|
||||
// To ignore TS6133 linting error where it detects 'requestBody' is declared but its value is never read.
|
||||
|
||||
@@ -71,15 +71,15 @@ export class KubernetesFanOutHandler {
|
||||
'backstage.io/kubernetes-id'
|
||||
] || requestBody.entity?.metadata?.name;
|
||||
|
||||
const clusterDetails: ClusterDetails[] = await this.serviceLocator.getClustersByServiceId(
|
||||
entityName,
|
||||
);
|
||||
const clusterDetails: ClusterDetails[] =
|
||||
await this.serviceLocator.getClustersByServiceId(entityName);
|
||||
|
||||
// Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them
|
||||
const promises: Promise<ClusterDetails>[] = clusterDetails.map(cd => {
|
||||
const kubernetesAuthTranslator: KubernetesAuthTranslator = KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance(
|
||||
cd.authProvider,
|
||||
);
|
||||
const kubernetesAuthTranslator: KubernetesAuthTranslator =
|
||||
KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance(
|
||||
cd.authProvider,
|
||||
);
|
||||
return kubernetesAuthTranslator.decorateClusterDetailsWithAuth(
|
||||
cd,
|
||||
requestBody,
|
||||
|
||||
@@ -167,10 +167,9 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher {
|
||||
labelSelector,
|
||||
).then(r => ({ type: type, resources: r }));
|
||||
case 'services':
|
||||
return this.fetchServicesForService(
|
||||
clusterDetails,
|
||||
labelSelector,
|
||||
).then(r => ({ type: type, resources: r }));
|
||||
return this.fetchServicesForService(clusterDetails, labelSelector).then(
|
||||
r => ({ type: type, resources: r }),
|
||||
);
|
||||
case 'horizontalpodautoscalers':
|
||||
return this.fetchHorizontalPodAutoscalersForService(
|
||||
clusterDetails,
|
||||
@@ -192,9 +191,8 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher {
|
||||
customResource: CustomResource,
|
||||
labelSelector: string,
|
||||
): Promise<FetchResponse> {
|
||||
const customObjects = this.kubernetesClientProvider.getCustomObjectsClient(
|
||||
clusterDetails,
|
||||
);
|
||||
const customObjects =
|
||||
this.kubernetesClientProvider.getCustomObjectsClient(clusterDetails);
|
||||
|
||||
return customObjects
|
||||
.listClusterCustomObject(
|
||||
@@ -217,18 +215,20 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher {
|
||||
client: Clients,
|
||||
) => Promise<{ body: { items: Array<T> }; response: http.IncomingMessage }>,
|
||||
): Promise<Array<T>> {
|
||||
const core = this.kubernetesClientProvider.getCoreClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const apps = this.kubernetesClientProvider.getAppsClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const autoscaling = this.kubernetesClientProvider.getAutoscalingClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const networkingBeta1 = this.kubernetesClientProvider.getNetworkingBeta1Client(
|
||||
clusterDetails,
|
||||
);
|
||||
const core =
|
||||
this.kubernetesClientProvider.getCoreClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const apps =
|
||||
this.kubernetesClientProvider.getAppsClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const autoscaling =
|
||||
this.kubernetesClientProvider.getAutoscalingClientByClusterDetails(
|
||||
clusterDetails,
|
||||
);
|
||||
const networkingBeta1 =
|
||||
this.kubernetesClientProvider.getNetworkingBeta1Client(clusterDetails);
|
||||
|
||||
this.logger.debug(`calling cluster=${clusterDetails.name}`);
|
||||
return fn({ core, apps, autoscaling, networkingBeta1 }).then(({ body }) => {
|
||||
|
||||
@@ -71,9 +71,8 @@ export const makeRouter = (
|
||||
const serviceId = req.params.serviceId;
|
||||
const requestBody: KubernetesRequestBody = req.body;
|
||||
try {
|
||||
const response = await kubernetesFanOutHandler.getKubernetesObjectsByEntity(
|
||||
requestBody,
|
||||
);
|
||||
const response =
|
||||
await kubernetesFanOutHandler.getKubernetesObjectsByEntity(requestBody);
|
||||
res.json(response);
|
||||
} catch (e) {
|
||||
logger.error(
|
||||
|
||||
Reference in New Issue
Block a user