UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

68 lines 11.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HostedZoneContextProviderPlugin = void 0; const cxapi = require("@aws-cdk/cx-api"); const credentials_1 = require("../api/aws-auth/credentials"); const logging_1 = require("../logging"); 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(`HostedZoneProvider requires domainName property to be set in ${args}`); } const domainName = args.domainName; (0, logging_1.debug)(`Reading hosted zone ${account}:${region}:${domainName}`); const options = { assumeRoleArn: args.lookupRoleArn }; const r53 = (await this.aws.forEnvironment(cxapi.EnvironmentUtils.make(account, region), credentials_1.Mode.ForReading, options)).sdk.route53(); const response = await r53.listHostedZonesByName({ DNSName: domainName }).promise(); if (!response.HostedZones) { throw new Error(`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(`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 }).promise(); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUF5QztBQUN6Qyw2REFBbUQ7QUFHbkQsd0NBQW1DO0FBRW5DLE1BQWEsK0JBQStCO0lBRTFDLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBcUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RjtRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBQSxlQUFLLEVBQUMsdUJBQXVCLE9BQU8sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLGtCQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xJLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFD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O1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQTRDO1FBQ3BFLE9BQVEsS0FBeUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQzdFLENBQUM7Q0FDRjtBQWpFRCwwRUFpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvY3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi9sb2dnaW5nJztcblxuZXhwb3J0IGNsYXNzIEhvc3RlZFpvbmVDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlcikge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IGN4c2NoZW1hLkhvc3RlZFpvbmVDb250ZXh0UXVlcnkpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG4gICAgY29uc3QgcmVnaW9uID0gYXJncy5yZWdpb247XG4gICAgaWYgKCF0aGlzLmlzSG9zdGVkWm9uZVF1ZXJ5KGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvc3RlZFpvbmVQcm92aWRlciByZXF1aXJlcyBkb21haW5OYW1lIHByb3BlcnR5IHRvIGJlIHNldCBpbiAke2FyZ3N9YCk7XG4gICAgfVxuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBhcmdzLmRvbWFpbk5hbWU7XG4gICAgZGVidWcoYFJlYWRpbmcgaG9zdGVkIHpvbmUgJHthY2NvdW50fToke3JlZ2lvbn06JHtkb21haW5OYW1lfWApO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGFzc3VtZVJvbGVBcm46IGFyZ3MubG9va3VwUm9sZUFybiB9O1xuICAgIGNvbnN0IHI1MyA9IChhd2FpdCB0aGlzLmF3cy5mb3JFbnZpcm9ubWVudChjeGFwaS5FbnZpcm9ubWVudFV0aWxzLm1ha2UoYWNjb3VudCwgcmVnaW9uKSwgTW9kZS5Gb3JSZWFkaW5nLCBvcHRpb25zKSkuc2RrLnJvdXRlNTMoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHI1My5saXN0SG9zdGVkWm9uZXNCeU5hbWUoeyBETlNOYW1lOiBkb21haW5OYW1lIH0pLnByb21pc2UoKTtcbiAgICBpZiAoIXJlc3BvbnNlLkhvc3RlZFpvbmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvc3RlZCBab25lIG5vdCBmb3VuZCBpbiBhY2NvdW50ICR7YWNjb3VudH0sIHJlZ2lvbiAke3JlZ2lvbn06ICR7ZG9tYWluTmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgY2FuZGlkYXRlWm9uZXMgPSBhd2FpdCB0aGlzLmZpbHRlclpvbmVzKHI1MywgcmVzcG9uc2UuSG9zdGVkWm9uZXMsIGFyZ3MpO1xuICAgIGlmIChjYW5kaWRhdGVab25lcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIGNvbnN0IGZpbHRlUHJvcHMgPSBgZG5zOiR7ZG9tYWluTmFtZX0sIHByaXZhdGVab25lOiR7YXJncy5wcml2YXRlWm9uZX0sIHZwY0lkOiR7YXJncy52cGNJZH1gO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCB6b25lczogJHtKU09OLnN0cmluZ2lmeShjYW5kaWRhdGVab25lcyl9IGZvciAke2ZpbHRlUHJvcHN9LCBidXQgd2FudGVkIGV4YWN0bHkgMSB6b25lYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIElkOiBjYW5kaWRhdGVab25lc1swXS5JZCxcbiAgICAgIE5hbWU6IGNhbmRpZGF0ZVpvbmVzWzBdLk5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyWm9uZXMoXG4gICAgcjUzOiBBV1MuUm91dGU1Mywgem9uZXM6IEFXUy5Sb3V0ZTUzLkhvc3RlZFpvbmVbXSxcbiAgICBwcm9wczogY3hzY2hlbWEuSG9zdGVkWm9uZUNvbnRleHRRdWVyeSk6IFByb21pc2U8QVdTLlJvdXRlNTMuSG9zdGVkWm9uZVtdPiB7XG5cbiAgICBsZXQgY2FuZGlkYXRlczogQVdTLlJvdXRlNTMuSG9zdGVkWm9uZVtdID0gW107XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHByb3BzLmRvbWFpbk5hbWUuZW5kc1dpdGgoJy4nKSA/IHByb3BzLmRvbWFpbk5hbWUgOiBgJHtwcm9wcy5kb21haW5OYW1lfS5gO1xuICAgIGRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIHpvbmVzICR7SlNPTi5zdHJpbmdpZnkoem9uZXMpfWApO1xuICAgIGNhbmRpZGF0ZXMgPSB6b25lcy5maWx0ZXIoIHpvbmUgPT4gem9uZS5OYW1lID09PSBkb21haW5OYW1lKTtcbiAgICBkZWJ1ZyhgRm91bmQgdGhlIGZvbGxvd2luZyBtYXRjaGVkIG5hbWUgem9uZXMgJHtKU09OLnN0cmluZ2lmeShjYW5kaWRhdGVzKX1gKTtcbiAgICBpZiAocHJvcHMucHJpdmF0ZVpvbmUpIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcih6b25lID0+IHpvbmUuQ29uZmlnICYmIHpvbmUuQ29uZmlnLlByaXZhdGVab25lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKHpvbmUgPT4gIXpvbmUuQ29uZmlnIHx8ICF6b25lLkNvbmZpZy5Qcml2YXRlWm9uZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcy52cGNJZCkge1xuICAgICAgY29uc3QgdnBjWm9uZXM6IEFXUy5Sb3V0ZTUzLkhvc3RlZFpvbmVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB6b25lIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHI1My5nZXRIb3N0ZWRab25lKHsgSWQ6IHpvbmUuIElkIH0pLnByb21pc2UoKTtcbiAgICAgICAgaWYgKCFkYXRhLlZQQ3MpIHtcbiAgICAgICAgICBkZWJ1ZyhgRXhwZWN0ZWQgVlBDIGZvciBwcml2YXRlIHpvbmUgYnV0IG5vIFZQQyBmb3VuZCAke3pvbmUuSWR9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuVlBDcy5tYXAodnBjID0+IHZwYy5WUENJZCkuaW5jbHVkZXMocHJvcHMudnBjSWQpKSB7XG4gICAgICAgICAgdnBjWm9uZXMucHVzaCh6b25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZwY1pvbmVzO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgaXNIb3N0ZWRab25lUXVlcnkocHJvcHM6IGN4c2NoZW1hLkhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfCBhbnkpOiBwcm9wcyBpcyBjeHNjaGVtYS5Ib3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgICByZXR1cm4gKHByb3BzIGFzIGN4c2NoZW1hLkhvc3RlZFpvbmVDb250ZXh0UXVlcnkpLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19