UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

67 lines 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HostedZoneContextProviderPlugin = void 0; const sdk_provider_1 = require("../api/aws-auth/sdk-provider"); const logging_1 = require("../logging"); const error_1 = require("../toolkit/error"); class HostedZoneContextProviderPlugin { constructor(aws) { this.aws = aws; } async getValue(args) { const account = args.account; const region = args.region; if (!this.isHostedZoneQuery(args)) { throw new error_1.ContextProviderError(`HostedZoneProvider requires domainName property to be set in ${args}`); } const domainName = args.domainName; (0, logging_1.debug)(`Reading hosted zone ${account}:${region}:${domainName}`); const r53 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).route53(); const response = await r53.listHostedZonesByName({ DNSName: domainName }); if (!response.HostedZones) { throw new error_1.ContextProviderError(`Hosted Zone not found in account ${account}, region ${region}: ${domainName}`); } const candidateZones = await this.filterZones(r53, response.HostedZones, args); if (candidateZones.length !== 1) { const filteProps = `dns:${domainName}, privateZone:${args.privateZone}, vpcId:${args.vpcId}`; throw new error_1.ContextProviderError(`Found zones: ${JSON.stringify(candidateZones)} for ${filteProps}, but wanted exactly 1 zone`); } return { Id: candidateZones[0].Id, Name: candidateZones[0].Name, }; } async filterZones(r53, zones, props) { let candidates = []; const domainName = props.domainName.endsWith('.') ? props.domainName : `${props.domainName}.`; (0, logging_1.debug)(`Found the following zones ${JSON.stringify(zones)}`); candidates = zones.filter((zone) => zone.Name === domainName); (0, logging_1.debug)(`Found the following matched name zones ${JSON.stringify(candidates)}`); if (props.privateZone) { candidates = candidates.filter((zone) => zone.Config && zone.Config.PrivateZone); } else { candidates = candidates.filter((zone) => !zone.Config || !zone.Config.PrivateZone); } if (props.vpcId) { const vpcZones = []; for (const zone of candidates) { const data = await r53.getHostedZone({ Id: zone.Id }); if (!data.VPCs) { (0, logging_1.debug)(`Expected VPC for private zone but no VPC found ${zone.Id}`); continue; } if (data.VPCs.map((vpc) => vpc.VPCId).includes(props.vpcId)) { vpcZones.push(zone); } } return vpcZones; } return candidates; } isHostedZoneQuery(props) { return props.domainName !== undefined; } } exports.HostedZoneContextProviderPlugin = HostedZoneContextProviderPlugin; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLCtEQUF3RjtBQUV4Rix3Q0FBbUM7QUFDbkMsNENBQXdEO0FBRXhELE1BQWEsK0JBQStCO0lBQzFDLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFBRyxDQUFDO0lBRTFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBNEI7UUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksNEJBQW9CLENBQUMsZ0VBQWdFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBQSxlQUFLLEVBQUMsdUJBQXVCLE9BQU8sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxxQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSw0QkFBb0IsQ0FBQyxvQ0FBb0MsT0FBTyxZQUFZLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxN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O1FBQzNELE9BQVEsS0FBZ0MsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQ3BFLENBQUM7Q0FDRjtBQS9ERCwwRUErREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgSG9zdGVkWm9uZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yb3V0ZS01Myc7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZTUzQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IHR5cGUgU2RrUHJvdmlkZXIsIGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi9sb2dnaW5nJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBhY2NvdW50ID0gYXJncy5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGlmICghdGhpcy5pc0hvc3RlZFpvbmVRdWVyeShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBIb3N0ZWRab25lUHJvdmlkZXIgcmVxdWlyZXMgZG9tYWluTmFtZSBwcm9wZXJ0eSB0byBiZSBzZXQgaW4gJHthcmdzfWApO1xuICAgIH1cbiAgICBjb25zdCBkb21haW5OYW1lID0gYXJncy5kb21haW5OYW1lO1xuICAgIGRlYnVnKGBSZWFkaW5nIGhvc3RlZCB6b25lICR7YWNjb3VudH06JHtyZWdpb259OiR7ZG9tYWluTmFtZX1gKTtcbiAgICBjb25zdCByNTMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLnJvdXRlNTMoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHI1My5saXN0SG9zdGVkWm9uZXNCeU5hbWUoeyBETlNOYW1lOiBkb21haW5OYW1lIH0pO1xuICAgIGlmICghcmVzcG9uc2UuSG9zdGVkWm9uZXMpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkIFpvbmUgbm90IGZvdW5kIGluIGFjY291bnQgJHthY2NvdW50fSwgcmVnaW9uICR7cmVnaW9ufTogJHtkb21haW5OYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGVab25lcyA9IGF3YWl0IHRoaXMuZmlsdGVyWm9uZXMocjUzLCByZXNwb25zZS5Ib3N0ZWRab25lcywgYXJncyk7XG4gICAgaWYgKGNhbmRpZGF0ZVpvbmVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3QgZmlsdGVQcm9wcyA9IGBkbnM6JHtkb21haW5OYW1lfSwgcHJpdmF0ZVpvbmU6JHthcmdzLnByaXZhdGVab25lfSwgdnBjSWQ6JHthcmdzLnZwY0lkfWA7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kIHpvbmVzOiAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZVpvbmVzKX0gZm9yICR7ZmlsdGVQcm9wc30sIGJ1dCB3YW50ZWQgZXhhY3RseSAxIHpvbmVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSWQ6IGNhbmRpZGF0ZVpvbmVzWzBdLklkLFxuICAgICAgTmFtZTogY2FuZGlkYXRlWm9uZXNbMF0uTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJab25lcyhcbiAgICByNTM6IElSb3V0ZTUzQ2xpZW50LFxuICAgIHpvbmVzOiBIb3N0ZWRab25lW10sXG4gICAgcHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnksXG4gICk6IFByb21pc2U8SG9zdGVkWm9uZVtdPiB7XG4gICAgbGV0IGNhbmRpZGF0ZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBwcm9wcy5kb21haW5OYW1lLmVuZHNXaXRoKCcuJykgPyBwcm9wcy5kb21haW5OYW1lIDogYCR7cHJvcHMuZG9tYWluTmFtZX0uYDtcbiAgICBkZWJ1ZyhgRm91bmQgdGhlIGZvbGxvd2luZyB6b25lcyAke0pTT04uc3RyaW5naWZ5KHpvbmVzKX1gKTtcbiAgICBjYW5kaWRhdGVzID0gem9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLk5hbWUgPT09IGRvbWFpbk5hbWUpO1xuICAgIGRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIG1hdGNoZWQgbmFtZSB6b25lcyAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZXMpfWApO1xuICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZSkge1xuICAgICAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLkNvbmZpZyAmJiB6b25lLkNvbmZpZy5Qcml2YXRlWm9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoem9uZSkgPT4gIXpvbmUuQ29uZmlnIHx8ICF6b25lLkNvbmZpZy5Qcml2YXRlWm9uZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcy52cGNJZCkge1xuICAgICAgY29uc3QgdnBjWm9uZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB6b25lIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHI1My5nZXRIb3N0ZWRab25lKHsgSWQ6IHpvbmUuSWQgfSk7XG4gICAgICAgIGlmICghZGF0YS5WUENzKSB7XG4gICAgICAgICAgZGVidWcoYEV4cGVjdGVkIFZQQyBmb3IgcHJpdmF0ZSB6b25lIGJ1dCBubyBWUEMgZm91bmQgJHt6b25lLklkfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLlZQQ3MubWFwKCh2cGMpID0+IHZwYy5WUENJZCkuaW5jbHVkZXMocHJvcHMudnBjSWQpKSB7XG4gICAgICAgICAgdnBjWm9uZXMucHVzaCh6b25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZwY1pvbmVzO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgaXNIb3N0ZWRab25lUXVlcnkocHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfCBhbnkpOiBwcm9wcyBpcyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgICByZXR1cm4gKHByb3BzIGFzIEhvc3RlZFpvbmVDb250ZXh0UXVlcnkpLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19