Merge pull request #24975 from adawalli/awallis/msgraph
Adds ProviderTransformer to msgraph catalog plugin for dynamic config
This commit is contained in:
@@ -7,6 +7,7 @@ import { BackendFeatureCompat } from '@backstage/backend-plugin-api';
|
||||
import { ExtensionPoint } from '@backstage/backend-plugin-api';
|
||||
import { GroupTransformer } from '@backstage/plugin-catalog-backend-module-msgraph';
|
||||
import { OrganizationTransformer } from '@backstage/plugin-catalog-backend-module-msgraph';
|
||||
import { ProviderConfigTransformer } from '@backstage/plugin-catalog-backend-module-msgraph';
|
||||
import { UserTransformer } from '@backstage/plugin-catalog-backend-module-msgraph';
|
||||
|
||||
// @alpha
|
||||
@@ -26,6 +27,11 @@ export interface MicrosoftGraphOrgEntityProviderTransformsExtensionPoint {
|
||||
| OrganizationTransformer
|
||||
| Record<string, OrganizationTransformer>,
|
||||
): void;
|
||||
setProviderConfigTransformer(
|
||||
transformer:
|
||||
| ProviderConfigTransformer
|
||||
| Record<string, ProviderConfigTransformer>,
|
||||
): void;
|
||||
setUserTransformer(
|
||||
transformer: UserTransformer | Record<string, UserTransformer>,
|
||||
): void;
|
||||
|
||||
@@ -126,6 +126,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
|
||||
userTransformer?: UserTransformer;
|
||||
groupTransformer?: GroupTransformer;
|
||||
organizationTransformer?: OrganizationTransformer;
|
||||
providerConfigTransformer?: ProviderConfigTransformer;
|
||||
});
|
||||
// (undocumented)
|
||||
connect(connection: EntityProviderConnection): Promise<void>;
|
||||
@@ -145,6 +146,7 @@ export interface MicrosoftGraphOrgEntityProviderLegacyOptions {
|
||||
id: string;
|
||||
logger: LoggerService;
|
||||
organizationTransformer?: OrganizationTransformer;
|
||||
providerConfigTransformer?: ProviderConfigTransformer;
|
||||
schedule: 'manual' | TaskRunner;
|
||||
target: string;
|
||||
userTransformer?: UserTransformer;
|
||||
@@ -162,6 +164,9 @@ export type MicrosoftGraphOrgEntityProviderOptions =
|
||||
organizationTransformer?:
|
||||
| OrganizationTransformer
|
||||
| Record<string, OrganizationTransformer>;
|
||||
providerConfigTransformer?:
|
||||
| ProviderConfigTransformer
|
||||
| Record<string, ProviderConfigTransformer>;
|
||||
};
|
||||
|
||||
// @public @deprecated
|
||||
@@ -233,6 +238,11 @@ export type OrganizationTransformer = (
|
||||
organization: MicrosoftGraph.Organization,
|
||||
) => Promise<GroupEntity | undefined>;
|
||||
|
||||
// @public
|
||||
export type ProviderConfigTransformer = (
|
||||
provider: MicrosoftGraphProviderConfig,
|
||||
) => Promise<MicrosoftGraphProviderConfig>;
|
||||
|
||||
// @public @deprecated
|
||||
export function readMicrosoftGraphConfig(
|
||||
config: Config,
|
||||
|
||||
@@ -39,4 +39,5 @@ export type {
|
||||
GroupTransformer,
|
||||
OrganizationTransformer,
|
||||
UserTransformer,
|
||||
ProviderConfigTransformer,
|
||||
} from './types';
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
|
||||
import * as MicrosoftGraph from '@microsoft/microsoft-graph-types';
|
||||
|
||||
import { MicrosoftGraphProviderConfig } from './config';
|
||||
/**
|
||||
* Customize the ingested User entity
|
||||
*
|
||||
@@ -45,3 +45,15 @@ export type GroupTransformer = (
|
||||
group: MicrosoftGraph.Group,
|
||||
groupPhoto?: string,
|
||||
) => Promise<GroupEntity | undefined>;
|
||||
|
||||
/**
|
||||
* Customize the MSGraph Provider Config Dynamically
|
||||
*
|
||||
* Transforming fields that are not used for each scheduled ingestion (e.g., id, schedule)
|
||||
* will have no effect.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type ProviderConfigTransformer = (
|
||||
provider: MicrosoftGraphProviderConfig,
|
||||
) => Promise<MicrosoftGraphProviderConfig>;
|
||||
|
||||
+24
@@ -23,6 +23,7 @@ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/
|
||||
import {
|
||||
GroupTransformer,
|
||||
OrganizationTransformer,
|
||||
ProviderConfigTransformer,
|
||||
UserTransformer,
|
||||
} from '@backstage/plugin-catalog-backend-module-msgraph';
|
||||
import { MicrosoftGraphOrgEntityProvider } from '../processors';
|
||||
@@ -58,6 +59,18 @@ export interface MicrosoftGraphOrgEntityProviderTransformsExtensionPoint {
|
||||
| OrganizationTransformer
|
||||
| Record<string, OrganizationTransformer>,
|
||||
): void;
|
||||
|
||||
/**
|
||||
* Set the function that transforms provider config dynamically.
|
||||
* Optionally, you can pass separate transformers per provider ID.
|
||||
* Note: adjusting fields that are not used on each scheduled ingestion
|
||||
* (e.g., id, schedule) will have no effect.
|
||||
*/
|
||||
setProviderConfigTransformer(
|
||||
transformer:
|
||||
| ProviderConfigTransformer
|
||||
| Record<string, ProviderConfigTransformer>,
|
||||
): void;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,6 +107,10 @@ export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule(
|
||||
| OrganizationTransformer
|
||||
| Record<string, OrganizationTransformer>
|
||||
| undefined;
|
||||
let providerConfigTransformer:
|
||||
| ProviderConfigTransformer
|
||||
| Record<string, ProviderConfigTransformer>
|
||||
| undefined;
|
||||
|
||||
env.registerExtensionPoint(
|
||||
microsoftGraphOrgEntityProviderTransformExtensionPoint,
|
||||
@@ -116,6 +133,12 @@ export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule(
|
||||
}
|
||||
organizationTransformer = transformer;
|
||||
},
|
||||
setProviderConfigTransformer(transformer) {
|
||||
if (providerConfigTransformer) {
|
||||
throw new Error('Provider transformer may only be set once');
|
||||
}
|
||||
providerConfigTransformer = transformer;
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
@@ -134,6 +157,7 @@ export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule(
|
||||
userTransformer: userTransformer,
|
||||
groupTransformer: groupTransformer,
|
||||
organizationTransformer: organizationTransformer,
|
||||
providerConfigTransformer: providerConfigTransformer,
|
||||
}),
|
||||
);
|
||||
},
|
||||
|
||||
+22
-1
@@ -34,6 +34,7 @@ import {
|
||||
MICROSOFT_GRAPH_USER_ID_ANNOTATION,
|
||||
MicrosoftGraphClient,
|
||||
MicrosoftGraphProviderConfig,
|
||||
ProviderConfigTransformer,
|
||||
OrganizationTransformer,
|
||||
readMicrosoftGraphConfig,
|
||||
readMicrosoftGraphOrg,
|
||||
@@ -94,6 +95,13 @@ export type MicrosoftGraphOrgEntityProviderOptions =
|
||||
organizationTransformer?:
|
||||
| OrganizationTransformer
|
||||
| Record<string, OrganizationTransformer>;
|
||||
|
||||
/**
|
||||
* The function that transforms provider config dynamically.
|
||||
*/
|
||||
providerConfigTransformer?:
|
||||
| ProviderConfigTransformer
|
||||
| Record<string, ProviderConfigTransformer>;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -152,6 +160,11 @@ export interface MicrosoftGraphOrgEntityProviderLegacyOptions {
|
||||
* The function that transforms an organization entry in msgraph to an entity.
|
||||
*/
|
||||
organizationTransformer?: OrganizationTransformer;
|
||||
|
||||
/**
|
||||
* The function that transforms provider config dynamically.
|
||||
*/
|
||||
providerConfigTransformer?: ProviderConfigTransformer;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -216,6 +229,10 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
|
||||
providerConfig.id,
|
||||
options.organizationTransformer,
|
||||
),
|
||||
providerConfigTransformer: getTransformer(
|
||||
providerConfig.id,
|
||||
options.providerConfigTransformer,
|
||||
),
|
||||
});
|
||||
|
||||
if (taskRunner !== 'manual') {
|
||||
@@ -257,6 +274,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
|
||||
userTransformer: options.userTransformer,
|
||||
groupTransformer: options.groupTransformer,
|
||||
organizationTransformer: options.organizationTransformer,
|
||||
providerConfigTransformer: options.providerConfigTransformer,
|
||||
logger,
|
||||
provider,
|
||||
});
|
||||
@@ -276,6 +294,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
|
||||
userTransformer?: UserTransformer;
|
||||
groupTransformer?: GroupTransformer;
|
||||
organizationTransformer?: OrganizationTransformer;
|
||||
providerConfigTransformer?: ProviderConfigTransformer;
|
||||
},
|
||||
) {}
|
||||
|
||||
@@ -300,7 +319,9 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
|
||||
}
|
||||
|
||||
const logger = options?.logger ?? this.options.logger;
|
||||
const provider = this.options.provider;
|
||||
const provider = this.options.providerConfigTransformer
|
||||
? await this.options.providerConfigTransformer(this.options.provider)
|
||||
: this.options.provider;
|
||||
const { markReadComplete } = trackProgress(logger);
|
||||
const client = MicrosoftGraphClient.create(this.options.provider);
|
||||
const { users, groups } = await readMicrosoftGraphOrg(
|
||||
|
||||
Reference in New Issue
Block a user