UNPKG

deep-package-manager

Version:
290 lines (221 loc) 8.02 kB
/** * Created by AlexanderC on 11/26/15. */ /*eslint max-statements: 0*/ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProvisioningDumpFileMatcher = undefined; var _AbstractMatcher = require('./AbstractMatcher'); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _MissingProvisioningConfig = require('./Exception/MissingProvisioningConfig'); var _Undeploy = require('../Undeploy'); var _CloudWatchLogsDriver = require('../ListingDriver/CloudWatchLogsDriver'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class ProvisioningDumpFileMatcher extends _AbstractMatcher.AbstractMatcher { /** * @param {Property|Object} property * @param {*} args */ constructor(property, ...args) { super(...args); this._property = property; this._deployConfig = ProvisioningDumpFileMatcher._createDeployConfigObj(); } /** * @returns {Property|Object} */ get property() { return this._property; } /** * @returns {Object} */ get deployConfig() { return this._deployConfig; } /** * @param {String} type * @param {String} resourceId * @returns {Boolean} */ match(type, resourceId) { return this._deployConfig[type].indexOf(resourceId) !== -1; } /** * @param {Function} cb * @param {String} cfgBucket * @returns {ProvisioningDumpFileMatcher} */ read(cb, cfgBucket = null) { this._property.configObj.tryLoadConfig(() => { try { this._fillFromConfig(); cb(null); } catch (e) { cb(e); } }, cfgBucket); return this; } /** * @private */ _fillFromConfig() { let config = this._property.config; if (this._property.configObj.configExists) { let deployProvisioning = config.provisioning; if (deployProvisioning.apigateway && deployProvisioning.apigateway.api) { this._deployConfig.APIGateway.push(deployProvisioning.apigateway.api.id); if (deployProvisioning.apigateway.api.role) { this._deployConfig.IAM.push(deployProvisioning.apigateway.api.role.RoleName); } if (deployProvisioning.apigateway.api.usagePlan) { this._deployConfig.APIGatewayPlan.push(deployProvisioning.apigateway.api.usagePlan.id); } } if (deployProvisioning.dynamodb && deployProvisioning.dynamodb.tablesNames) { this._deployConfig.DynamoDB = ProvisioningDumpFileMatcher._objectValues(deployProvisioning.dynamodb.tablesNames); } if (deployProvisioning['cognito-identity'] && deployProvisioning['cognito-identity'].identityPool && deployProvisioning['cognito-identity'].identityPool.IdentityPoolId) { this._deployConfig.CognitoIdentity.push(deployProvisioning['cognito-identity'].identityPool.IdentityPoolId); } if (deployProvisioning['cognito-idp'] && deployProvisioning['cognito-idp'].userPool && deployProvisioning['cognito-idp'].userPool.Id) { this._deployConfig.CognitoIdentityProvider.push(deployProvisioning['cognito-idp'].userPool.Id); } if (deployProvisioning.cloudfront && deployProvisioning.cloudfront.id) { this._deployConfig.CloudFront.push(deployProvisioning.cloudfront.id); } if (deployProvisioning.s3 && deployProvisioning.s3.buckets) { let s3Objects = ProvisioningDumpFileMatcher._objectValues(deployProvisioning.s3.buckets); for (let i in s3Objects) { if (!s3Objects.hasOwnProperty(i)) { continue; } let s3BucketName = s3Objects[i].name; this._deployConfig.S3.push(s3BucketName); } } if (deployProvisioning.sqs && deployProvisioning.sqs.queues) { let queues = deployProvisioning.sqs.queues; for (let key in queues) { if (!queues.hasOwnProperty(key)) { continue; } let queue = queues[key]; this._deployConfig.SQS.push(queue.url); } } if (deployProvisioning['cognito-identity'] && deployProvisioning['cognito-identity'].roles) { let identityPoolRoles = deployProvisioning['cognito-identity'].roles; this._deployConfig.IAM.push(identityPoolRoles.authenticated.RoleName); this._deployConfig.IAM.push(identityPoolRoles.unauthenticated.RoleName); } if (deployProvisioning.lambda && deployProvisioning.lambda.executionRoles) { let lambdaExecRolesVector = ProvisioningDumpFileMatcher._objectValues(deployProvisioning.lambda.executionRoles); for (let lambdaExecRole of lambdaExecRolesVector) { this._deployConfig.IAM.push(lambdaExecRole.RoleName); } } if (deployProvisioning.lambda && deployProvisioning.lambda.names) { let lambdaNamesVector = ProvisioningDumpFileMatcher._objectValues(deployProvisioning.lambda.names); for (let i in lambdaNamesVector) { if (!lambdaNamesVector.hasOwnProperty(i)) { continue; } let lambdaNamesChunk = ProvisioningDumpFileMatcher._objectValues(lambdaNamesVector[i]); this._deployConfig.Lambda = this._deployConfig.Lambda.concat(lambdaNamesChunk); // @todo: separate this? this._deployConfig.CloudWatchEvents = [].concat(this._deployConfig.Lambda); } } if (deployProvisioning.elasticache && deployProvisioning.elasticache.clusterId) { this._deployConfig.ElastiCache.push(deployProvisioning.elasticache.clusterId); } this._deployConfig.CloudWatchLogs = this._deployConfig.Lambda.map(lambdaName => { return `${_CloudWatchLogsDriver.CloudWatchLogsDriver.LAMBDA_LOG_GROUP_PREFIX}${lambdaName}`; }); if (deployProvisioning.apigateway && deployProvisioning.apigateway.api && deployProvisioning.apigateway.api.logGroupName) { this._deployConfig.CloudWatchLogs.push(deployProvisioning.apigateway.api.logGroupName); } if (deployProvisioning.es && deployProvisioning.es.domains) { let domains = deployProvisioning.es.domains; for (let key in domains) { if (!domains.hasOwnProperty(key)) { continue; } let domain = domains[key]; this._deployConfig.ES.push(domain.DomainName); } } if (deployProvisioning.iam && deployProvisioning.iam.identityProvider) { let identityProvider = deployProvisioning.iam.identityProvider; this._deployConfig.IAM.push(identityProvider.OpenIDConnectProviderArn); } } else { throw new _MissingProvisioningConfig.MissingProvisioningConfig(this.fileName, 'provisioning'); } } /** * @param {Object} obj * @returns {Array} * @private */ static _objectValues(obj) { let keys = Object.keys(obj); let vector = []; for (let i in keys) { if (!keys.hasOwnProperty(i)) { continue; } let val = obj[keys[i]]; vector.push(val); } return vector; } /** * @param {Function} cb */ bckConfigFile(cb) { _fsExtra2.default.move(this.fileName, this.fileNameBck, { overwrite: true }, error => { cb(error); }); } /** * @returns {String} */ get fileName() { return this._property.configObj.configFile; } /** * @returns {String} */ get fileNameBck() { return `${this.fileName}.bck`; } /** * @param {String[]} services * @returns {Object} * @private */ static _createDeployConfigObj(services = ProvisioningDumpFileMatcher.SERVICES) { let result = {}; for (let i in services) { if (!services.hasOwnProperty(i)) { continue; } let serviceName = services[i]; result[serviceName] = []; } return result; } /** * @returns {String[]} */ static get SERVICES() { return _Undeploy.Undeploy.SERVICES; } } exports.ProvisioningDumpFileMatcher = ProvisioningDumpFileMatcher;