in source/lambda/lib/greengrass-handler.ts [279:334]
public async updateGreengrassGroupDefinitions(input: GreengrassHandlerTypes.UpdateGreengrassDefinitionsRequest): Promise<{ [key: string]: string | undefined }> {
try {
logger.log(LoggingLevel.DEBUG, `Updating Greengrass group definitions: ${JSON.stringify(input, null, 2)}`);
const newDefinitionVersionArns: { [key: string]: string | undefined } = {};
const { greengrassGroupVersion, publisherLambdaFunctionAliasArn, collectorLambdaFunctionAliasArn } = input;
const solutionGreengrassDefaultDefinitions = this.getSolutionGreengrassDefaultDefinitions({
collectorLambdaFunctionAliasArn,
publisherLambdaFunctionAliasArn
});
const definitions = Array.from(Object.values(GreengrassHandlerTypes.GreengrassDefinitions));
for (let definition of definitions) {
const latestDefinitionVersionArn = greengrassGroupVersion.Definition[`${definition}DefinitionVersionArn`];
let greengrassDefinitionVersion: GreengrassDefinitionVersion = [];
let definitionId: string | undefined;
let definitionName: string | undefined;
logger.log(LoggingLevel.DEBUG, `definition: ${definition}, latestDefinitionVersionArn: ${latestDefinitionVersionArn}`);
if (latestDefinitionVersionArn) {
const greengrassDefinition = await this.findGreengrassDefinition(latestDefinitionVersionArn, definition);
definitionId = greengrassDefinition.Id;
definitionName = greengrassDefinition.Name;
logger.log(LoggingLevel.DEBUG, `definitionId: ${definitionId}, definitionName: ${definitionName}`);
if (definitionId) {
greengrassDefinitionVersion = await this.getGreengrassDefinitionVersion(greengrassDefinition.Id, greengrassDefinition.LatestVersion, definition);
}
}
// Combines the current version Greengrass definitions and the default Greengrass definitions.
let newDefinitions: any[] = solutionGreengrassDefaultDefinitions[definition];
this.combineDefinitions(definition as GreengrassHandlerTypes.GreengrassDefinitions, newDefinitions, greengrassDefinitionVersion);
// Only creates a definition when `m2c2-greengrass-${definition}Definition` does not exist.
if (!definitionName || definitionName !== `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;
}
return newDefinitionVersionArns;
} catch (error) {
logger.log(LoggingLevel.ERROR, '[updateGreengrassGroupDefinitions] Error: ', error);
throw new LambdaError({
message: error instanceof LambdaError ? error.message : 'Failed to update Greengrass group definitions',
name: error instanceof LambdaError ? error.name : GreengrassHandlerTypes.ErrorTypes.UPDATE_GREENGRASS_GROUP_DEFINITION_ERROR
});
}
}