UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

50 lines 7.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AmiContextProviderPlugin = void 0; const sdk_provider_1 = require("../api/aws-auth/sdk-provider"); const logging_1 = require("../logging"); const error_1 = require("../toolkit/error"); /** * Plugin to search AMIs for the current account */ class AmiContextProviderPlugin { constructor(aws) { this.aws = aws; } async getValue(args) { const region = args.region; const account = args.account; // Normally we'd do this only as 'debug', but searching AMIs typically takes dozens // of seconds, so be little more verbose about it so users know what is going on. (0, logging_1.info)(`Searching for AMI in ${account}:${region}`); (0, logging_1.debug)(`AMI search parameters: ${JSON.stringify(args)}`); const ec2 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ec2(); const response = await ec2.describeImages({ Owners: args.owners, Filters: Object.entries(args.filters).map(([key, values]) => ({ Name: key, Values: values, })), }); const images = [...(response.Images || [])].filter((i) => i.ImageId !== undefined); if (images.length === 0) { throw new error_1.ContextProviderError('No AMI found that matched the search criteria'); } // Return the most recent one // Note: Date.parse() is not going to respect the timezone of the string, // but since we only care about the relative values that is okay. images.sort(descending((i) => Date.parse(i.CreationDate || '1970'))); (0, logging_1.debug)(`Selected image '${images[0].ImageId}' created at '${images[0].CreationDate}'`); return images[0].ImageId; } } exports.AmiContextProviderPlugin = AmiContextProviderPlugin; /** * Make a comparator that sorts in descending order given a sort key extractor */ function descending(valueOf) { return (a, b) => { return valueOf(b) - valueOf(a); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYW1pLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtEQUF3RjtBQUV4Rix3Q0FBeUM7QUFDekMsNENBQXdEO0FBRXhEOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDbkMsWUFBNkIsR0FBZ0I7UUFBaEIsUUFBRyxHQUFILEdBQUcsQ0FBYTtJQUFHLENBQUM7SUFFMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFxQjtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFN0IsbUZBQW1GO1FBQ25GLGlGQUFpRjtRQUNqRixJQUFBLGNBQUksRUFBQyx3QkFBd0IsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBQSxlQUFLLEVBQUMsMEJBQTBCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLHFDQUFzQixFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsTUFBTSxFQUFFLE1BQU07YUFDZixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRW5GLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksNEJBQW9CLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBQSxlQUFLLEVBQUMsbUJBQW1CLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLGlCQUFpQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0RixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFRLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBbkNELDREQW1DQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUksT0FBeUI7SUFDOUMsT0FBTyxDQUFDLENBQUksRUFBRSxDQUFJLEVBQUUsRUFBRTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW1pQ29udGV4dFF1ZXJ5IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IHR5cGUgU2RrUHJvdmlkZXIsIGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgZGVidWcsIGluZm8gfSBmcm9tICcuLi9sb2dnaW5nJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHNlYXJjaCBBTUlzIGZvciB0aGUgY3VycmVudCBhY2NvdW50XG4gKi9cbmV4cG9ydCBjbGFzcyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHt9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IEFtaUNvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG5cbiAgICAvLyBOb3JtYWxseSB3ZSdkIGRvIHRoaXMgb25seSBhcyAnZGVidWcnLCBidXQgc2VhcmNoaW5nIEFNSXMgdHlwaWNhbGx5IHRha2VzIGRvemVuc1xuICAgIC8vIG9mIHNlY29uZHMsIHNvIGJlIGxpdHRsZSBtb3JlIHZlcmJvc2UgYWJvdXQgaXQgc28gdXNlcnMga25vdyB3aGF0IGlzIGdvaW5nIG9uLlxuICAgIGluZm8oYFNlYXJjaGluZyBmb3IgQU1JIGluICR7YWNjb3VudH06JHtyZWdpb259YCk7XG4gICAgZGVidWcoYEFNSSBzZWFyY2ggcGFyYW1ldGVyczogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcblxuICAgIGNvbnN0IGVjMiA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuZWMyKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlYzIuZGVzY3JpYmVJbWFnZXMoe1xuICAgICAgT3duZXJzOiBhcmdzLm93bmVycyxcbiAgICAgIEZpbHRlcnM6IE9iamVjdC5lbnRyaWVzKGFyZ3MuZmlsdGVycykubWFwKChba2V5LCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgICBOYW1lOiBrZXksXG4gICAgICAgIFZhbHVlczogdmFsdWVzLFxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW1hZ2VzID0gWy4uLihyZXNwb25zZS5JbWFnZXMgfHwgW10pXS5maWx0ZXIoKGkpID0+IGkuSW1hZ2VJZCAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGlmIChpbWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoJ05vIEFNSSBmb3VuZCB0aGF0IG1hdGNoZWQgdGhlIHNlYXJjaCBjcml0ZXJpYScpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGUgbW9zdCByZWNlbnQgb25lXG4gICAgLy8gTm90ZTogRGF0ZS5wYXJzZSgpIGlzIG5vdCBnb2luZyB0byByZXNwZWN0IHRoZSB0aW1lem9uZSBvZiB0aGUgc3RyaW5nLFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHJlbGF0aXZlIHZhbHVlcyB0aGF0IGlzIG9rYXkuXG4gICAgaW1hZ2VzLnNvcnQoZGVzY2VuZGluZygoaSkgPT4gRGF0ZS5wYXJzZShpLkNyZWF0aW9uRGF0ZSB8fCAnMTk3MCcpKSk7XG5cbiAgICBkZWJ1ZyhgU2VsZWN0ZWQgaW1hZ2UgJyR7aW1hZ2VzWzBdLkltYWdlSWR9JyBjcmVhdGVkIGF0ICcke2ltYWdlc1swXS5DcmVhdGlvbkRhdGV9J2ApO1xuICAgIHJldHVybiBpbWFnZXNbMF0uSW1hZ2VJZCE7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGEgY29tcGFyYXRvciB0aGF0IHNvcnRzIGluIGRlc2NlbmRpbmcgb3JkZXIgZ2l2ZW4gYSBzb3J0IGtleSBleHRyYWN0b3JcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZzxBPih2YWx1ZU9mOiAoeDogQSkgPT4gbnVtYmVyKSB7XG4gIHJldHVybiAoYTogQSwgYjogQSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZU9mKGIpIC0gdmFsdWVPZihhKTtcbiAgfTtcbn1cbiJdfQ==