@linkedmink/node-route53-dynamic-dns
Version:
Background process that updates AWS Route 53 DNS address records whenever the public IP of the hosting environment changes
33 lines • 1.67 kB
JavaScript
import chalk from "chalk";
import { Command } from "commander";
import { ConfigKey } from "../constants/config.mjs";
import { PACKAGE_VERSION } from "../constants/version.mjs";
import { initializeLogging } from "../environment/logger.mjs";
import { createRoute53PolicyForZones } from "../functions/aws-iam-policy.mjs";
import { validateNormalizeDnsRecord } from "../functions/validate.mjs";
import { Route53UpdateClient } from "../services/route53-update-client.mjs";
/**
* @todo Add subcommands to write IAM policy to file or create user via AWS SDK
*/
export default (config) => {
const main = async () => {
const logger = initializeLogging(config);
const route53Client = new Route53UpdateClient();
logger.verbose("Get accessible DNS zone's");
const inputHostnames = config.getJson(ConfigKey.HostnamesToUpdate);
const dnsRecords = inputHostnames.map(validateNormalizeDnsRecord);
const zoneIds = await route53Client.getZonesForDnsRecords(dnsRecords);
if (zoneIds.size <= 0) {
throw new Error(`No zones were found matching the input record: ${dnsRecords.toString()}`);
}
logger.verbose(`Found zone ID's matching hostnames: ${JSON.stringify(Array.from(zoneIds), null, 2)}`);
const policyObject = createRoute53PolicyForZones(zoneIds);
console.log(chalk.underline.green("Output JSON:"));
console.log(JSON.stringify(policyObject, null, 2));
};
return new Command("iam-policy")
.version(PACKAGE_VERSION)
.description("Generates an IAM policy for the configured hosted zones")
.action(main);
};
//# sourceMappingURL=iam-policy.mjs.map