@goldstack/infra-aws
Version:
Utilities to work with AWS infrastructure via the cli.
124 lines • 5.29 kB
JavaScript
;
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