in source/lambda/lib/greengrass-handler.ts [579:666]
public async deleteConnectionFromGreengrassDefinitions(greengrassGroupVersion: Greengrass.GetGroupVersionResponse): Promise<GreengrassHandlerTypes.DeleteConnectionFromGreengrassDefinitionResponse> {
try {
logger.log(LoggingLevel.DEBUG, `Deleting connection from Greengrass definitionss: ${JSON.stringify(greengrassGroupVersion, null, 2)}`);
const newDefinitionVersionArns: { [key: string]: string | undefined } = {};
const lambdaFunctionNames: string[] = [];
const solutionGreengrassDefaultDefinitions = this.getSolutionGreengrassDefaultDefinitions({});
const defitionsToDelete: GreengrassHandlerTypes.GreengrassDefinitions[] = [
GreengrassHandlerTypes.GreengrassDefinitions.FUNCTION,
GreengrassHandlerTypes.GreengrassDefinitions.SUBSCRIPTION
];
for (let definition of defitionsToDelete) {
const latestDefinitionVersionArn = greengrassGroupVersion.Definition[`${definition}DefinitionVersionArn`];
const greengrassDefinition = await this.findGreengrassDefinition(latestDefinitionVersionArn, definition);
let greengrassDefinitionVersion = await this.getGreengrassDefinitionVersion(greengrassDefinition.Id, greengrassDefinition.LatestVersion, definition);
logger.log(LoggingLevel.DEBUG, `definition: ${definition}, latestDefinitionVersionArn: ${latestDefinitionVersionArn}`);
if (definition === GreengrassHandlerTypes.GreengrassDefinitions.FUNCTION) {
const lambdaFunctionIds = [
`Function-id-${this.connectionName}-collector`,
`Function-id-${this.connectionName}-publisher`
];
// Gets the Lambda function ARNs.
const lambdaFunctions = (<Greengrass.Function[]>greengrassDefinitionVersion)
.filter(func => lambdaFunctionIds.includes(func.Id));
for (let lambdaFunction of lambdaFunctions) {
/**
* Since Greengrass definition version has Lambda function alias ARN ending with the function name,
* the function ARN from the Greengrass definition version can't be used directly.
*/
lambdaFunctionNames.push(lambdaFunction.FunctionArn.split(':').pop());
}
// Removes the to-be-deleted funtions from the Greengrass definition version.
greengrassDefinitionVersion = (<Greengrass.Function[]>greengrassDefinitionVersion)
.filter(func => !(lambdaFunctionIds.includes(func.Id)));
} else {
const subscriptions = [
`${this.connectionName}-to-cloud`,
`${this.connectionName}-from-collector`,
`${this.connectionName}-from-publisher`
];
// Removes the to-be-deleted subscriptions from the Greengrass definition version.
greengrassDefinitionVersion = (<Greengrass.Subscription[]>greengrassDefinitionVersion)
.filter(subscription => !subscriptions.includes(subscription.Id));
}
// Combines the current version Greengrass definitions and the default Greengrass definitions.
let newDefinitions: any[] = solutionGreengrassDefaultDefinitions[definition];
this.combineDefinitions(definition, newDefinitions, greengrassDefinitionVersion);
// Only creates a definition when `m2c2-greengrass-${definition}Definition` does not exist.
let definitionId = greengrassDefinition.Id;
if (!greengrassDefinition.Name || greengrassDefinition.Name !== `m2c2-greengrass-${definition}Definition`) {
const newDefinition = await this.createGreengrassDefinition(definition);
definitionId = newDefinition.Id;
}
const newDefinitionVersion = await this.createGreengrassDefinitionVersion(definitionId, newDefinitions, definition);
newDefinitionVersionArns[`${definition}DefinitionVersionArn`] = newDefinitionVersion.Arn;
}
// Sets other definitions' ARN and creates a new Greengrass version
newDefinitionVersionArns.ConnectorDefinitionVersionArn = greengrassGroupVersion.Definition.ConnectorDefinitionVersionArn;
newDefinitionVersionArns.CoreDefinitionVersionArn = greengrassGroupVersion.Definition.CoreDefinitionVersionArn;
newDefinitionVersionArns.DeviceDefinitionVersionArn = greengrassGroupVersion.Definition.DeviceDefinitionVersionArn;
newDefinitionVersionArns.LoggerDefinitionVersionArn = greengrassGroupVersion.Definition.LoggerDefinitionVersionArn;
newDefinitionVersionArns.ResourceDefinitionVersionArn = greengrassGroupVersion.Definition.ResourceDefinitionVersionArn;
return {
newDefinitionVersionArns,
lambdaFunctionNames
};
} catch (error) {
logger.log(LoggingLevel.ERROR, '[deleteConnectionFromGreengrassDefinitions] Error: ', error);
throw new LambdaError({
message: error instanceof LambdaError ? error.message : 'Failed to delete a connection completely.',
name: error instanceof LambdaError ? error.name : GreengrassHandlerTypes.ErrorTypes.DELETE_CONNECTION_FROM_GREENGRASS_DEFINITIONS_ERROR
});
}
}