UNPKG

@goldstack/infra-aws

Version:

Utilities to work with AWS infrastructure via the cli.

124 lines 5.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAWSUser = exports.resetAWSUser = exports.createDefaultConfig = exports.writeConfig = exports.readConfig = exports.hasConfig = exports.writeTerraformConfig = exports.assertTerraformConfig = exports.readDeploymentFromPackageConfig = exports.getAWSCredentials = void 0; const fs_1 = __importDefault(require("fs")); const utils_config_1 = require("@goldstack/utils-config"); const utils_package_1 = require("@goldstack/utils-package"); const utils_sh_1 = require("@goldstack/utils-sh"); const accountConfigSchema_json_1 = __importDefault(require("./schemas/accountConfigSchema.json")); const deploymentConfigSchema_json_1 = __importDefault(require("./schemas/deploymentConfigSchema.json")); const awsTerraformStateSchema_json_1 = __importDefault(require("./schemas/awsTerraformStateSchema.json")); const awsUserUtils_1 = require("./awsUserUtils"); var awsAuthUtils_1 = require("./awsAuthUtils"); Object.defineProperty(exports, "getAWSCredentials", { enumerable: true, get: function () { return awsAuthUtils_1.getAWSCredentials; } }); // deactivate warning message while v3 upgrade in process process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE = '1'; const readDeploymentFromPackageConfig = (deploymentName, path) => { const packageConfig = (0, utils_package_1.readPackageConfig)(path); const deployment = packageConfig.deployments.find((d) => d.name === deploymentName); if (!deployment) { throw new Error('Cannot find deployment with name: ' + deploymentName); } (0, utils_config_1.validateConfig)(deployment, deploymentConfigSchema_json_1.default, { errorMessage: `Invalid AWS deployment ${deploymentName}`, }); return deployment; }; exports.readDeploymentFromPackageConfig = readDeploymentFromPackageConfig; const assertTerraformConfig = (user, path) => { if (!path) { path = (0, utils_config_1.getAwsTerraformConfigPath)('./../../'); } let res; if (fs_1.default.existsSync(path)) { res = (0, utils_config_1.parseConfig)((0, utils_sh_1.read)(path), awsTerraformStateSchema_json_1.default, { errorMessage: `Cannot load AWS Terraform configuration from ${path}`, }); } else { res = { remoteState: [], }; } if (!res.remoteState.find((el) => el.user === user)) { res.remoteState.push({ user: user, }); } return res; }; exports.assertTerraformConfig = assertTerraformConfig; const writeTerraformConfig = (config, path) => { if (!path) { path = (0, utils_config_1.getAwsTerraformConfigPath)('./../../'); } (0, utils_sh_1.write)(JSON.stringify(config, null, 2), path); }; exports.writeTerraformConfig = writeTerraformConfig; const hasConfig = (path) => { if (!path) { path = (0, utils_config_1.getAwsConfigPath)('./../../'); } // otherwise check default config file location return fs_1.default.existsSync(path); }; exports.hasConfig = hasConfig; const readConfig = (path) => { if (!path) { path = (0, utils_config_1.getAwsConfigPath)('./../../'); } // otherwise check default config file location if (!fs_1.default.existsSync(path)) { throw new Error(`AWS configuration file does not exist: ${path}.`); } return (0, utils_config_1.parseConfig)((0, utils_sh_1.read)(path), accountConfigSchema_json_1.default, { errorMessage: `Cannot load AWS configuration from ${path}`, }); }; exports.readConfig = readConfig; const writeConfig = (config, path) => { if (!path) { path = (0, utils_config_1.getAwsConfigPath)('./../../'); } (0, utils_sh_1.write)(JSON.stringify(config, null, 2), path); }; exports.writeConfig = writeConfig; const createDefaultConfig = () => { return { users: [], }; }; exports.createDefaultConfig = createDefaultConfig; /** * Resets the environment variables set after obtaining AWS user. */ const resetAWSUser = () => { delete process.env.AWS_ACCESS_KEY_ID; delete process.env.AWS_SECRET_ACCESS_KEY; }; exports.resetAWSUser = resetAWSUser; /** * Obtains AWS user credentials from config file or environment variables. */ const getAWSUser = async (userName, configPath) => { // Load from ECS environment if running in ECS if (process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI) { return await (0, awsUserUtils_1.getAWSUserFromContainerEnvironment)(); } // Load credentials from environment variables if available if (process.env.AWS_ACCESS_KEY_ID) { return await (0, awsUserUtils_1.getAWSUserFromEnvironmentVariables)(); } // Try loading default local user if no config file provided if (!(0, exports.hasConfig)(configPath)) { return await (0, awsUserUtils_1.getAWSUserFromDefaultLocalProfile)(); } // Load users as configured in Goldstack configuration const config = (0, exports.readConfig)(configPath); return await (0, awsUserUtils_1.getAWSUserFromGoldstackConfig)(config, userName); }; exports.getAWSUser = getAWSUser; //# sourceMappingURL=infraAws.js.map