@brunwig/mup-aws-beanstalk 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/command-handlers.js +1 -1
- package/lib/command-handlers.js.map +1 -1
- package/lib/utils.js +6 -10
- package/lib/utils.js.map +1 -1
- package/lib/validate.js +2 -1
- package/lib/validate.js.map +1 -1
- package/package.json +1 -1
package/lib/command-handlers.js
CHANGED
|
@@ -397,7 +397,7 @@ async function reconfig(api) {
|
|
|
397
397
|
await (0, _upload.uploadEnvFile)(bucket, 1, envContent);
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
-
const platformArn = await (0, _utils.selectPlatformArn)();
|
|
400
|
+
const platformArn = await (0, _utils.selectPlatformArn)(api.getConfig().app.awsPlatformBranchName);
|
|
401
401
|
const [version] = await (0, _versions.ebVersions)(api);
|
|
402
402
|
await _aws.beanstalk.createEnvironment({
|
|
403
403
|
ApplicationName: app,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/command-handlers.js"],"names":["setup","api","config","getConfig","appConfig","app","bucket","bucketName","appName","instanceProfile","serviceRole","serviceRoleName","trailBucketPrefix","trailName","deregisterRuleName","environment","environmentName","eventTargetRole","eventTargetRoleName","eventTargetPolicyName","eventTargetPassRoleName","automationDocument","Buckets","s3","listBuckets","promise","beanstalkBucketCreated","region","console","log","rolePolicy","gracefulShutdown","accountId","policy","passPolicy","Applications","beanstalk","describeApplications","find","ApplicationName","params","Description","name","createApplication","existingBucket","trailBucketName","Name","trailBucketCreated","trailNameList","trailList","cloudTrail","describeTrails","length","createParams","S3BucketName","createTrail","createdDocument","createdRule","DeregisterEvent","target","createdTarget","deploy","runCommand","bundlePrefix","version","nextVersion","buildOptions","buildLocation","path","bundlePath","resolvePath","willBuild","getOptions","key","createApplicationVersion","VersionLabel","toString","SourceBundle","S3Bucket","S3Key","toRemove","toUpdate","verbose","dir","updateEnvironment","EnvironmentName","OptionSettings","OptionsToRemove","Environments","describeEnvironments","EnvironmentNames","finalEnvironments","chalk","green","CNAME","red","process","exitCode","logs","logsContent","forEach","instance","data","logsNginx","logsEb","start","EnvironmentResources","describeEnvironmentResources","autoScalingGroup","AutoScalingGroups","minInstances","maxInstances","autoScaling","updateAutoScalingGroup","AutoScalingGroupName","MaxSize","MinSize","DesiredCapacity","stop","restart","restartAppServer","clean","versions","envVersions","promises","i","push","deleteApplicationVersion","DeleteSourceBundle","deleteObject","Bucket","Key","Promise","all","reconfig","deploying","commandHistory","entry","env","Status","desiredEbConfig","getSettings","longEnvVars","envContent","platformArn","createEnvironment","PlatformArn","ConfigurationSettings","describeConfigurationSettings","events","Events","envEvents","describeEvents","map","ev","EventDate","Message","join","status","result","describeEnvironmentHealth","AttributeNames","e","message","includes","InstanceHealthList","describeInstancesHealth","RequestCount","Duration","StatusCodes","Latency","ApplicationMetrics","Color","HealthStatus","Causes","cause","Status2xx","Status3xx","Status4xx","Status5xx","P999","P99","P95","P90","P85","P75","P50","P10","InstanceId","ssl","sslDomains","domains","CertificateSummaryList","acm","listCertificates","found","DomainName","CertificateArn","Certificate","describeCertificate","SubjectAlternativeNames","certificateArn","requestCertificate","shift","emailsProvided","checks","certificate","validationOptions","DomainValidationOptions","ValidationEmails","resolve","setTimeout","ValidationDomain","ValidationStatus","yellow","email","shell","selected","description","getArgs","sshOptions","removeSSHAccess","conn","Client","on","exec","pty","err","stream","end","exit","stdin","setRawMode","pipe","stdout","stderr","setWindow","rows","columns","connect","debug","output","server","pem","sshKey","privateKey","loggedConnection","forwardPort","localAddress","localPort","remoteAddress","remotePort","onError","error","onReady","onConnection"],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { Client } from 'ssh2';\nimport {\n acm,\n s3,\n beanstalk,\n autoScaling,\n cloudTrail\n} from './aws';\nimport updateSSLConfig from './certificates';\nimport {\n rolePolicy,\n trailBucketPolicy,\n DeregisterEvent,\n deregisterEventTarget,\n serviceRole,\n eventTargetRolePolicy,\n eventTargetRole,\n gracefulShutdownAutomationDocument,\n passRolePolicy\n} from './policies';\nimport upload, { uploadEnvFile } from './upload';\nimport {\n archiveApp,\n injectFiles\n} from './prepare-bundle';\nimport {\n coloredStatusText,\n ensureBucketExists,\n ensureInstanceProfileExists,\n ensureRoleExists,\n ensureRoleAdded,\n ensurePoliciesAttached,\n ensureBucketPolicyAttached,\n getAccountId,\n getLogs,\n logStep,\n names,\n tmpBuildPath,\n shouldRebuild,\n ensureCloudWatchRule,\n ensureRuleTargetExists,\n ensureInlinePolicyAttached,\n findBucketWithPrefix,\n createUniqueName,\n createVersionDescription,\n ensureSsmDocument,\n selectPlatformArn,\n pickInstance,\n connectToInstance,\n executeSSHCommand\n} from './utils';\nimport {\n largestVersion,\n ebVersions,\n oldVersions,\n oldEnvVersions\n} from './versions';\nimport { createEnvFile } from './env-settings';\nimport {\n createDesiredConfig,\n prepareUpdateEnvironment,\n scalingConfig,\n scalingConfigChanged\n} from './eb-config';\n\nimport {\n waitForEnvReady,\n waitForHealth\n} from './env-ready';\n\nexport async function setup(api) {\n const config = api.getConfig();\n const appConfig = config.app;\n\n const {\n bucket: bucketName,\n app: appName,\n instanceProfile,\n serviceRole: serviceRoleName,\n trailBucketPrefix,\n trailName,\n deregisterRuleName,\n environment: environmentName,\n eventTargetRole: eventTargetRoleName,\n eventTargetPolicyName,\n eventTargetPassRoleName,\n automationDocument\n } = names(config);\n\n logStep('=> @Brunwig/mup-aws-beanstalk');\n logStep('=> Setting up');\n\n // Create bucket if needed\n const {\n Buckets\n } = await s3.listBuckets().promise();\n\n const beanstalkBucketCreated = await ensureBucketExists(Buckets, bucketName, appConfig.region);\n\n if (beanstalkBucketCreated) {\n console.log(' Created Bucket');\n }\n\n logStep('=> Ensuring IAM Roles and Instance Profiles are setup');\n\n // Create role and instance profile\n await ensureRoleExists(instanceProfile, rolePolicy);\n await ensureInstanceProfileExists(config, instanceProfile);\n await ensurePoliciesAttached(config, instanceProfile, [\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier',\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker',\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier',\n ...appConfig.gracefulShutdown ? ['arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM'] : []\n ]);\n await ensureRoleAdded(config, instanceProfile, instanceProfile);\n\n // Create role used by enhanced health\n await ensureRoleExists(serviceRoleName, serviceRole);\n await ensurePoliciesAttached(config, serviceRoleName, [\n 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth',\n 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkService'\n ]);\n\n if (appConfig.gracefulShutdown) {\n const accountId = await getAccountId();\n const policy = eventTargetRolePolicy(accountId, environmentName, appConfig.region || 'us-east-1');\n const passPolicy = passRolePolicy(accountId, eventTargetRoleName);\n\n await ensureRoleExists(eventTargetRoleName, eventTargetRole, true);\n await ensureInlinePolicyAttached(eventTargetRoleName, eventTargetPolicyName, policy);\n await ensureInlinePolicyAttached(eventTargetRoleName, eventTargetPassRoleName, passPolicy);\n }\n\n // Create beanstalk application if needed\n const {\n Applications\n } = await beanstalk.describeApplications().promise();\n\n if (!Applications.find(app => app.ApplicationName === appName)) {\n const params = {\n ApplicationName: appName,\n Description: `App \"${appConfig.name}\" managed by Meteor Up`\n };\n\n await beanstalk.createApplication(params).promise();\n console.log(' Created Beanstalk application');\n }\n\n if (appConfig.gracefulShutdown) {\n logStep('=> Ensuring Graceful Shutdown is setup');\n\n const existingBucket = findBucketWithPrefix(Buckets, trailBucketPrefix);\n const trailBucketName = existingBucket ?\n existingBucket.Name :\n createUniqueName(trailBucketPrefix);\n const region = appConfig.region || 'us-east-1';\n const accountId = await getAccountId();\n const policy = trailBucketPolicy(accountId, trailBucketName);\n\n const trailBucketCreated = await ensureBucketExists(Buckets, trailBucketName, appConfig.region);\n await ensureBucketPolicyAttached(trailBucketName, policy);\n\n if (trailBucketCreated) {\n console.log(' Created bucket for Cloud Trail');\n }\n\n const params = {\n trailNameList: [\n trailName\n ]\n };\n\n const {\n trailList\n } = await cloudTrail.describeTrails(params).promise();\n\n if (trailList.length === 0) {\n const createParams = {\n Name: trailName,\n S3BucketName: trailBucketName\n };\n\n await cloudTrail.createTrail(createParams).promise();\n\n console.log(' Created CloudTrail trail');\n }\n\n const createdDocument = await ensureSsmDocument(\n automationDocument,\n gracefulShutdownAutomationDocument()\n );\n if (createdDocument) {\n console.log(' Created SSM Automation Document');\n }\n\n const createdRule = await ensureCloudWatchRule(deregisterRuleName, 'Used by Meteor Up for graceful shutdown', DeregisterEvent);\n\n if (createdRule) {\n console.log(' Created Cloud Watch rule');\n }\n\n const target = deregisterEventTarget(environmentName, eventTargetRoleName, accountId, region);\n const createdTarget = await ensureRuleTargetExists(deregisterRuleName, target, accountId);\n\n if (createdTarget) {\n console.log(' Created target for Cloud Watch rule');\n }\n }\n}\n\nexport async function deploy(api) {\n await api.runCommand('beanstalk.setup');\n\n const config = api.getConfig();\n const {\n app,\n bucket,\n bundlePrefix,\n environment\n } = names(config);\n\n\n const version = await largestVersion(api);\n const nextVersion = version + 1;\n\n // Mutates the config, so the meteor.build command will have the correct build location\n config.app.buildOptions.buildLocation = config.app.buildOptions.buildLocation ||\n tmpBuildPath(config.app.path, api);\n\n const bundlePath = api.resolvePath(config.app.buildOptions.buildLocation, 'bundle.zip');\n const willBuild = shouldRebuild(bundlePath, api.getOptions()['cached-build']);\n\n if (willBuild) {\n await api.runCommand('meteor.build');\n injectFiles(\n api,\n app,\n nextVersion,\n config.app\n );\n await archiveApp(config.app.buildOptions.buildLocation, api);\n }\n\n logStep('=> Uploading bundle');\n\n const key = `${bundlePrefix}${nextVersion}`;\n await upload(config.app, bucket, `${bundlePrefix}${nextVersion}`, bundlePath);\n\n logStep('=> Creating version');\n\n await beanstalk.createApplicationVersion({\n ApplicationName: app,\n VersionLabel: nextVersion.toString(),\n Description: createVersionDescription(api, config.app),\n SourceBundle: {\n S3Bucket: bucket,\n S3Key: key\n }\n }).promise();\n\n await api.runCommand('beanstalk.reconfig');\n await waitForEnvReady(config, true);\n\n logStep('=> Deploying new version');\n\n const {\n toRemove,\n toUpdate\n } = await prepareUpdateEnvironment(api);\n\n if (api.verbose) {\n console.log('EB Config changes:');\n console.dir({\n toRemove,\n toUpdate\n });\n }\n\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n VersionLabel: nextVersion.toString(),\n OptionSettings: toUpdate,\n OptionsToRemove: toRemove\n }).promise();\n\n await waitForEnvReady(config, true);\n\n const {\n Environments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n await api.runCommand('beanstalk.clean');\n\n await api.runCommand('beanstalk.ssl');\n\n // Check if deploy succeeded\n const {\n Environments: finalEnvironments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n if (nextVersion.toString() === finalEnvironments[0].VersionLabel) {\n console.log(chalk.green(`App is running at ${Environments[0].CNAME}`));\n } else {\n console.log(chalk.red`Deploy Failed. Visit the Aws Elastic Beanstalk console to view the logs from the failed deploy.`);\n process.exitCode = 1;\n }\n}\n\nexport async function logs(api) {\n const logsContent = await getLogs(api, ['web.stdout.log', 'nodejs/nodejs.log']);\n\n logsContent.forEach(({\n instance,\n data\n }) => {\n console.log(`${instance} `, data[0] || data[1]);\n });\n}\n\nexport async function logsNginx(api) {\n const logsContent = await getLogs(api, ['nginx/error.log', 'nginx/access.log']);\n\n logsContent.forEach(({\n instance,\n data\n }) => {\n console.log(`${instance} `, data[0]);\n console.log(`${instance} `, data[1]);\n });\n}\n\nexport async function logsEb(api) {\n const logsContent = await getLogs(api, ['eb-engine.log', 'eb-activity.log']);\n\n logsContent.forEach(({\n data,\n instance\n }) => {\n console.log(`${instance} `, data[0] || data[1]);\n });\n}\n\nexport async function start(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Starting App');\n\n const {\n EnvironmentResources\n } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n\n const autoScalingGroup = EnvironmentResources.AutoScalingGroups[0].Name;\n\n const {\n minInstances,\n maxInstances\n } = config.app;\n\n await autoScaling.updateAutoScalingGroup({\n AutoScalingGroupName: autoScalingGroup,\n MaxSize: maxInstances,\n MinSize: minInstances,\n DesiredCapacity: minInstances\n }).promise();\n\n await waitForHealth(config);\n}\n\nexport async function stop(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Stopping App');\n\n const {\n EnvironmentResources\n } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n\n const autoScalingGroup = EnvironmentResources.AutoScalingGroups[0].Name;\n\n await autoScaling.updateAutoScalingGroup({\n AutoScalingGroupName: autoScalingGroup,\n MaxSize: 0,\n MinSize: 0,\n DesiredCapacity: 0\n }).promise();\n\n await waitForHealth(config, 'Grey');\n}\n\nexport async function restart(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Restarting App');\n\n await beanstalk.restartAppServer({\n EnvironmentName: environment\n }).promise();\n\n await waitForEnvReady(config, false);\n}\n\nexport async function clean(api) {\n const config = api.getConfig();\n const {\n app,\n bucket\n } = names(config);\n\n logStep('=> Finding old versions');\n const {\n versions\n } = await oldVersions(api);\n const envVersions = await oldEnvVersions(api);\n\n logStep('=> Removing old versions');\n\n const promises = [];\n for (let i = 0; i < versions.length; i++) {\n promises.push(beanstalk.deleteApplicationVersion({\n ApplicationName: app,\n VersionLabel: versions[i].toString(),\n DeleteSourceBundle: true\n }).promise());\n }\n\n for (let i = 0; i < envVersions.length; i++) {\n promises.push(s3.deleteObject({\n Bucket: bucket,\n Key: `env/${envVersions[i]}.txt`\n }).promise());\n }\n\n // TODO: remove bundles\n\n await Promise.all(promises);\n}\n\nexport async function reconfig(api) {\n const config = api.getConfig();\n const {\n app,\n environment,\n bucket\n } = names(config);\n const deploying = !!api.commandHistory.find(entry => entry.name === 'beanstalk.deploy');\n\n logStep('=> Configuring Beanstalk environment');\n\n // check if env exists\n const {\n Environments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n if (!Environments.find(env => env.Status !== 'Terminated')) {\n const desiredEbConfig = createDesiredConfig(\n api.getConfig(),\n api.getSettings(),\n config.app.longEnvVars ? 1 : false\n );\n\n if (config.app.longEnvVars) {\n const envContent = createEnvFile(config.app.env, api.getSettings());\n\n await uploadEnvFile(bucket, 1, envContent);\n }\n\n const platformArn = await selectPlatformArn();\n\n const [version] = await ebVersions(api);\n await beanstalk.createEnvironment({\n ApplicationName: app,\n EnvironmentName: environment,\n Description: `Environment for ${config.app.name}, managed by Meteor Up`,\n VersionLabel: version.toString(),\n PlatformArn: platformArn,\n OptionSettings: desiredEbConfig.OptionSettings\n }).promise();\n\n console.log(' Created Environment');\n await waitForEnvReady(config, false);\n } else if (!deploying) {\n // If we are deploying, the environment will be updated\n // at the same time we update the environment version\n const {\n toRemove,\n toUpdate\n } = await prepareUpdateEnvironment(api);\n\n if (api.verbose) {\n console.log('EB Config changes:');\n console.dir({\n toRemove,\n toUpdate\n });\n }\n\n if (toRemove.length > 0 || toUpdate.length > 0) {\n await waitForEnvReady(config, true);\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n OptionSettings: toUpdate,\n OptionsToRemove: toRemove\n }).promise();\n console.log(' Updated Environment');\n await waitForEnvReady(config, true);\n }\n }\n\n const {\n ConfigurationSettings\n } = await beanstalk.describeConfigurationSettings({\n EnvironmentName: environment,\n ApplicationName: app\n }).promise();\n\n if (scalingConfigChanged(ConfigurationSettings[0].OptionSettings, config)) {\n logStep('=> Configuring scaling');\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n OptionSettings: scalingConfig(config.app).OptionSettings\n }).promise();\n await waitForEnvReady(config, true);\n }\n}\n\nexport async function events(api) {\n const {\n environment\n } = names(api.getConfig());\n\n const {\n Events: envEvents\n } = await beanstalk.describeEvents({\n EnvironmentName: environment\n }).promise();\n\n console.log(envEvents.map(ev => `${ev.EventDate}: ${ev.Message}`).join('\\n'));\n}\n\nexport async function status(api) {\n const {\n environment\n } = names(api.getConfig());\n\n let result;\n\n try {\n result = await beanstalk.describeEnvironmentHealth({\n AttributeNames: [\n 'All'\n ],\n EnvironmentName: environment\n }).promise();\n } catch (e) {\n if (e.message.includes('No Environment found for EnvironmentName')) {\n console.log(' AWS Beanstalk environment does not exist');\n return;\n }\n\n throw e;\n }\n\n const {\n InstanceHealthList\n } = await beanstalk.describeInstancesHealth({\n AttributeNames: [\n 'All'\n ],\n EnvironmentName: environment\n }).promise();\n\n const {\n RequestCount,\n Duration,\n StatusCodes,\n Latency\n } = result.ApplicationMetrics;\n\n console.log(`Environment Status: ${result.Status}`);\n console.log(`Health Status: ${coloredStatusText(result.Color, result.HealthStatus)}`);\n if (result.Causes.length > 0) {\n console.log('Causes: ');\n result.Causes.forEach(cause => console.log(` ${cause}`));\n }\n console.log('');\n console.log(`=== Metrics For Last ${Duration || 'Unknown'} Minutes ===`);\n console.log(` Requests: ${RequestCount}`);\n if (StatusCodes) {\n console.log(' Status Codes');\n console.log(` 2xx: ${StatusCodes.Status2xx}`);\n console.log(` 3xx: ${StatusCodes.Status3xx}`);\n console.log(` 4xx: ${StatusCodes.Status4xx}`);\n console.log(` 5xx: ${StatusCodes.Status5xx}`);\n }\n if (Latency) {\n console.log(' Latency');\n console.log(` 99.9%: ${Latency.P999}`);\n console.log(` 99% : ${Latency.P99}`);\n console.log(` 95% : ${Latency.P95}`);\n console.log(` 90% : ${Latency.P90}`);\n console.log(` 85% : ${Latency.P85}`);\n console.log(` 75% : ${Latency.P75}`);\n console.log(` 50% : ${Latency.P50}`);\n console.log(` 10% : ${Latency.P10}`);\n }\n console.log('');\n console.log('=== Instances ===');\n InstanceHealthList.forEach((instance) => {\n console.log(` ${instance.InstanceId}: ${coloredStatusText(instance.Color, instance.HealthStatus)}`);\n });\n if (InstanceHealthList.length === 0) {\n console.log(' 0 Instances');\n }\n}\n\nexport async function ssl(api) {\n const config = api.getConfig();\n\n await waitForEnvReady(config, true);\n\n if (!config.app || !config.app.sslDomains) {\n logStep('=> Updating Beanstalk SSL Config');\n await updateSSLConfig(config);\n return;\n }\n\n logStep('=> Checking Certificate Status');\n\n const domains = config.app.sslDomains;\n const {\n CertificateSummaryList\n } = await acm.listCertificates().promise();\n let found = null;\n\n for (let i = 0; i < CertificateSummaryList.length; i++) {\n const {\n DomainName,\n CertificateArn\n } = CertificateSummaryList[i];\n\n if (DomainName === domains[0]) {\n const {\n Certificate\n } = await acm.describeCertificate({ // eslint-disable-line no-await-in-loop\n CertificateArn\n }).promise();\n\n if (domains.join(',') === Certificate.SubjectAlternativeNames.join(',')) {\n found = CertificateSummaryList[i];\n }\n }\n }\n\n let certificateArn;\n\n if (!found) {\n logStep('=> Requesting Certificate');\n\n const result = await acm.requestCertificate({\n DomainName: domains.shift(),\n SubjectAlternativeNames: domains.length > 0 ? domains : null\n }).promise();\n\n certificateArn = result.CertificateArn;\n }\n\n if (found) {\n certificateArn = found.CertificateArn;\n }\n\n let emailsProvided = false;\n let checks = 0;\n let certificate;\n\n /* eslint-disable no-await-in-loop */\n while (!emailsProvided && checks < 5) {\n const {\n Certificate\n } = await acm.describeCertificate({\n CertificateArn: certificateArn\n }).promise();\n const validationOptions = Certificate.DomainValidationOptions[0];\n\n if (typeof validationOptions.ValidationEmails === 'undefined') {\n emailsProvided = true;\n certificate = Certificate;\n } else if (validationOptions.ValidationEmails.length > 0 || checks === 6) {\n emailsProvided = true;\n certificate = Certificate;\n } else {\n checks += 1;\n\n await new Promise((resolve) => {\n setTimeout(resolve, 1000 * 10);\n });\n }\n }\n\n if (certificate.Status === 'PENDING_VALIDATION') {\n console.log('Certificate is pending validation.');\n certificate.DomainValidationOptions.forEach(({\n DomainName,\n ValidationEmails,\n ValidationDomain,\n ValidationStatus\n }) => {\n if (ValidationStatus === 'SUCCESS') {\n console.log(chalk.green(`${ValidationDomain || DomainName} has been verified`));\n return;\n }\n\n console.log(chalk.yellow(`${ValidationDomain || DomainName} is pending validation`));\n\n if (ValidationEmails) {\n console.log('Emails with instructions have been sent to:');\n\n ValidationEmails.forEach((email) => {\n console.log(` ${email}`);\n });\n }\n\n console.log('Run \"mup beanstalk ssl\" after you have verified the domains, or to check the verification status');\n });\n } else if (certificate.Status === 'ISSUED') {\n console.log(chalk.green('Certificate has been issued'));\n logStep('=> Updating Beanstalk SSL config');\n await updateSSLConfig(config, certificateArn);\n }\n}\n\nexport async function shell(api) {\n const {\n selected,\n description\n } = await pickInstance(api.getConfig(), api.getArgs()[2]);\n\n if (!selected) {\n console.log(description);\n console.log('Run \"mup beanstalk shell <instance id>\"');\n process.exitCode = 1;\n\n return;\n }\n\n const {\n sshOptions,\n removeSSHAccess\n } = await connectToInstance(api, selected, 'mup beanstalk shell');\n const conn = new Client();\n conn.on('ready', () => {\n conn.exec('sudo node /home/webapp/meteor-shell.js', {\n pty: true\n }, (err, stream) => {\n if (err) {\n throw err;\n }\n stream.on('close', async () => {\n conn.end();\n await removeSSHAccess();\n process.exit();\n });\n\n process.stdin.setRawMode(true);\n process.stdin.pipe(stream);\n\n stream.pipe(process.stdout);\n stream.stderr.pipe(process.stderr);\n stream.setWindow(process.stdout.rows, process.stdout.columns);\n\n process.stdout.on('resize', () => {\n stream.setWindow(process.stdout.rows, process.stdout.columns);\n });\n });\n }).connect(sshOptions);\n}\n\nexport async function debug(api) {\n const config = api.getConfig();\n const {\n selected,\n description\n } = await pickInstance(config, api.getArgs()[2]);\n\n if (!selected) {\n console.log(description);\n console.log('Run \"mup beanstalk debug <instance id>\"');\n process.exitCode = 1;\n\n return;\n }\n\n const {\n sshOptions,\n removeSSHAccess\n } = await connectToInstance(api, selected, 'mup beanstalk debug');\n\n const conn = new Client();\n conn.on('ready', async () => {\n const result = await executeSSHCommand(\n conn,\n 'sudo pkill -USR1 -u webapp -n node || sudo pkill -USR1 -u nodejs -n node'\n );\n\n if (api.verbose) {\n console.log(result.output);\n }\n\n const server = {\n ...sshOptions,\n pem: api.resolvePath(config.app.sshKey.privateKey)\n };\n\n let loggedConnection = false;\n\n api.forwardPort({\n server,\n localAddress: '0.0.0.0',\n localPort: 9229,\n remoteAddress: '127.0.0.1',\n remotePort: 9229,\n onError(error) {\n console.error(error);\n },\n onReady() {\n console.log('Connected to server');\n console.log('');\n console.log('Debugger listening on ws://127.0.0.1:9229');\n console.log('');\n console.log('To debug:');\n console.log('1. Open chrome://inspect in Chrome');\n console.log('2. Select \"Open dedicated DevTools for Node\"');\n console.log('3. Wait a minute while it connects and loads the app.');\n console.log(' When it is ready, the app\\'s files will appear in the Sources tab');\n console.log('');\n console.log('Warning: Do not use breakpoints when debugging a production server.');\n console.log('They will pause your server when hit, causing it to not handle methods or subscriptions.');\n console.log('Use logpoints or something else that does not pause the server');\n console.log('');\n console.log('The debugger will be enabled until the next time the app is restarted,');\n console.log('though only accessible while this command is running');\n },\n onConnection() {\n if (!loggedConnection) {\n // It isn't guaranteed the debugger is connected, but not many\n // other tools will try to connect to port 9229.\n console.log('');\n console.log('Detected by debugger');\n loggedConnection = true;\n }\n }\n });\n }).connect(sshOptions);\n\n process.on('SIGINT', async () => {\n await removeSSHAccess();\n process.exit();\n });\n}\n"],"file":"command-handlers.js"}
|
|
1
|
+
{"version":3,"sources":["../src/command-handlers.js"],"names":["setup","api","config","getConfig","appConfig","app","bucket","bucketName","appName","instanceProfile","serviceRole","serviceRoleName","trailBucketPrefix","trailName","deregisterRuleName","environment","environmentName","eventTargetRole","eventTargetRoleName","eventTargetPolicyName","eventTargetPassRoleName","automationDocument","Buckets","s3","listBuckets","promise","beanstalkBucketCreated","region","console","log","rolePolicy","gracefulShutdown","accountId","policy","passPolicy","Applications","beanstalk","describeApplications","find","ApplicationName","params","Description","name","createApplication","existingBucket","trailBucketName","Name","trailBucketCreated","trailNameList","trailList","cloudTrail","describeTrails","length","createParams","S3BucketName","createTrail","createdDocument","createdRule","DeregisterEvent","target","createdTarget","deploy","runCommand","bundlePrefix","version","nextVersion","buildOptions","buildLocation","path","bundlePath","resolvePath","willBuild","getOptions","key","createApplicationVersion","VersionLabel","toString","SourceBundle","S3Bucket","S3Key","toRemove","toUpdate","verbose","dir","updateEnvironment","EnvironmentName","OptionSettings","OptionsToRemove","Environments","describeEnvironments","EnvironmentNames","finalEnvironments","chalk","green","CNAME","red","process","exitCode","logs","logsContent","forEach","instance","data","logsNginx","logsEb","start","EnvironmentResources","describeEnvironmentResources","autoScalingGroup","AutoScalingGroups","minInstances","maxInstances","autoScaling","updateAutoScalingGroup","AutoScalingGroupName","MaxSize","MinSize","DesiredCapacity","stop","restart","restartAppServer","clean","versions","envVersions","promises","i","push","deleteApplicationVersion","DeleteSourceBundle","deleteObject","Bucket","Key","Promise","all","reconfig","deploying","commandHistory","entry","env","Status","desiredEbConfig","getSettings","longEnvVars","envContent","platformArn","awsPlatformBranchName","createEnvironment","PlatformArn","ConfigurationSettings","describeConfigurationSettings","events","Events","envEvents","describeEvents","map","ev","EventDate","Message","join","status","result","describeEnvironmentHealth","AttributeNames","e","message","includes","InstanceHealthList","describeInstancesHealth","RequestCount","Duration","StatusCodes","Latency","ApplicationMetrics","Color","HealthStatus","Causes","cause","Status2xx","Status3xx","Status4xx","Status5xx","P999","P99","P95","P90","P85","P75","P50","P10","InstanceId","ssl","sslDomains","domains","CertificateSummaryList","acm","listCertificates","found","DomainName","CertificateArn","Certificate","describeCertificate","SubjectAlternativeNames","certificateArn","requestCertificate","shift","emailsProvided","checks","certificate","validationOptions","DomainValidationOptions","ValidationEmails","resolve","setTimeout","ValidationDomain","ValidationStatus","yellow","email","shell","selected","description","getArgs","sshOptions","removeSSHAccess","conn","Client","on","exec","pty","err","stream","end","exit","stdin","setRawMode","pipe","stdout","stderr","setWindow","rows","columns","connect","debug","output","server","pem","sshKey","privateKey","loggedConnection","forwardPort","localAddress","localPort","remoteAddress","remotePort","onError","error","onReady","onConnection"],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { Client } from 'ssh2';\nimport {\n acm,\n s3,\n beanstalk,\n autoScaling,\n cloudTrail\n} from './aws';\nimport updateSSLConfig from './certificates';\nimport {\n rolePolicy,\n trailBucketPolicy,\n DeregisterEvent,\n deregisterEventTarget,\n serviceRole,\n eventTargetRolePolicy,\n eventTargetRole,\n gracefulShutdownAutomationDocument,\n passRolePolicy\n} from './policies';\nimport upload, { uploadEnvFile } from './upload';\nimport {\n archiveApp,\n injectFiles\n} from './prepare-bundle';\nimport {\n coloredStatusText,\n ensureBucketExists,\n ensureInstanceProfileExists,\n ensureRoleExists,\n ensureRoleAdded,\n ensurePoliciesAttached,\n ensureBucketPolicyAttached,\n getAccountId,\n getLogs,\n logStep,\n names,\n tmpBuildPath,\n shouldRebuild,\n ensureCloudWatchRule,\n ensureRuleTargetExists,\n ensureInlinePolicyAttached,\n findBucketWithPrefix,\n createUniqueName,\n createVersionDescription,\n ensureSsmDocument,\n selectPlatformArn,\n pickInstance,\n connectToInstance,\n executeSSHCommand\n} from './utils';\nimport {\n largestVersion,\n ebVersions,\n oldVersions,\n oldEnvVersions\n} from './versions';\nimport { createEnvFile } from './env-settings';\nimport {\n createDesiredConfig,\n prepareUpdateEnvironment,\n scalingConfig,\n scalingConfigChanged\n} from './eb-config';\n\nimport {\n waitForEnvReady,\n waitForHealth\n} from './env-ready';\n\nexport async function setup(api) {\n const config = api.getConfig();\n const appConfig = config.app;\n\n const {\n bucket: bucketName,\n app: appName,\n instanceProfile,\n serviceRole: serviceRoleName,\n trailBucketPrefix,\n trailName,\n deregisterRuleName,\n environment: environmentName,\n eventTargetRole: eventTargetRoleName,\n eventTargetPolicyName,\n eventTargetPassRoleName,\n automationDocument\n } = names(config);\n\n logStep('=> @Brunwig/mup-aws-beanstalk');\n logStep('=> Setting up');\n\n // Create bucket if needed\n const {\n Buckets\n } = await s3.listBuckets().promise();\n\n const beanstalkBucketCreated = await ensureBucketExists(Buckets, bucketName, appConfig.region);\n\n if (beanstalkBucketCreated) {\n console.log(' Created Bucket');\n }\n\n logStep('=> Ensuring IAM Roles and Instance Profiles are setup');\n\n // Create role and instance profile\n await ensureRoleExists(instanceProfile, rolePolicy);\n await ensureInstanceProfileExists(config, instanceProfile);\n await ensurePoliciesAttached(config, instanceProfile, [\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier',\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker',\n 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier',\n ...appConfig.gracefulShutdown ? ['arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM'] : []\n ]);\n await ensureRoleAdded(config, instanceProfile, instanceProfile);\n\n // Create role used by enhanced health\n await ensureRoleExists(serviceRoleName, serviceRole);\n await ensurePoliciesAttached(config, serviceRoleName, [\n 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth',\n 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkService'\n ]);\n\n if (appConfig.gracefulShutdown) {\n const accountId = await getAccountId();\n const policy = eventTargetRolePolicy(accountId, environmentName, appConfig.region || 'us-east-1');\n const passPolicy = passRolePolicy(accountId, eventTargetRoleName);\n\n await ensureRoleExists(eventTargetRoleName, eventTargetRole, true);\n await ensureInlinePolicyAttached(eventTargetRoleName, eventTargetPolicyName, policy);\n await ensureInlinePolicyAttached(eventTargetRoleName, eventTargetPassRoleName, passPolicy);\n }\n\n // Create beanstalk application if needed\n const {\n Applications\n } = await beanstalk.describeApplications().promise();\n\n if (!Applications.find(app => app.ApplicationName === appName)) {\n const params = {\n ApplicationName: appName,\n Description: `App \"${appConfig.name}\" managed by Meteor Up`\n };\n\n await beanstalk.createApplication(params).promise();\n console.log(' Created Beanstalk application');\n }\n\n if (appConfig.gracefulShutdown) {\n logStep('=> Ensuring Graceful Shutdown is setup');\n\n const existingBucket = findBucketWithPrefix(Buckets, trailBucketPrefix);\n const trailBucketName = existingBucket ?\n existingBucket.Name :\n createUniqueName(trailBucketPrefix);\n const region = appConfig.region || 'us-east-1';\n const accountId = await getAccountId();\n const policy = trailBucketPolicy(accountId, trailBucketName);\n\n const trailBucketCreated = await ensureBucketExists(Buckets, trailBucketName, appConfig.region);\n await ensureBucketPolicyAttached(trailBucketName, policy);\n\n if (trailBucketCreated) {\n console.log(' Created bucket for Cloud Trail');\n }\n\n const params = {\n trailNameList: [\n trailName\n ]\n };\n\n const {\n trailList\n } = await cloudTrail.describeTrails(params).promise();\n\n if (trailList.length === 0) {\n const createParams = {\n Name: trailName,\n S3BucketName: trailBucketName\n };\n\n await cloudTrail.createTrail(createParams).promise();\n\n console.log(' Created CloudTrail trail');\n }\n\n const createdDocument = await ensureSsmDocument(\n automationDocument,\n gracefulShutdownAutomationDocument()\n );\n if (createdDocument) {\n console.log(' Created SSM Automation Document');\n }\n\n const createdRule = await ensureCloudWatchRule(deregisterRuleName, 'Used by Meteor Up for graceful shutdown', DeregisterEvent);\n\n if (createdRule) {\n console.log(' Created Cloud Watch rule');\n }\n\n const target = deregisterEventTarget(environmentName, eventTargetRoleName, accountId, region);\n const createdTarget = await ensureRuleTargetExists(deregisterRuleName, target, accountId);\n\n if (createdTarget) {\n console.log(' Created target for Cloud Watch rule');\n }\n }\n}\n\nexport async function deploy(api) {\n await api.runCommand('beanstalk.setup');\n\n const config = api.getConfig();\n const {\n app,\n bucket,\n bundlePrefix,\n environment\n } = names(config);\n\n\n const version = await largestVersion(api);\n const nextVersion = version + 1;\n\n // Mutates the config, so the meteor.build command will have the correct build location\n config.app.buildOptions.buildLocation = config.app.buildOptions.buildLocation ||\n tmpBuildPath(config.app.path, api);\n\n const bundlePath = api.resolvePath(config.app.buildOptions.buildLocation, 'bundle.zip');\n const willBuild = shouldRebuild(bundlePath, api.getOptions()['cached-build']);\n\n if (willBuild) {\n await api.runCommand('meteor.build');\n injectFiles(\n api,\n app,\n nextVersion,\n config.app\n );\n await archiveApp(config.app.buildOptions.buildLocation, api);\n }\n\n logStep('=> Uploading bundle');\n\n const key = `${bundlePrefix}${nextVersion}`;\n await upload(config.app, bucket, `${bundlePrefix}${nextVersion}`, bundlePath);\n\n logStep('=> Creating version');\n\n await beanstalk.createApplicationVersion({\n ApplicationName: app,\n VersionLabel: nextVersion.toString(),\n Description: createVersionDescription(api, config.app),\n SourceBundle: {\n S3Bucket: bucket,\n S3Key: key\n }\n }).promise();\n\n await api.runCommand('beanstalk.reconfig');\n await waitForEnvReady(config, true);\n\n logStep('=> Deploying new version');\n\n const {\n toRemove,\n toUpdate\n } = await prepareUpdateEnvironment(api);\n\n if (api.verbose) {\n console.log('EB Config changes:');\n console.dir({\n toRemove,\n toUpdate\n });\n }\n\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n VersionLabel: nextVersion.toString(),\n OptionSettings: toUpdate,\n OptionsToRemove: toRemove\n }).promise();\n\n await waitForEnvReady(config, true);\n\n const {\n Environments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n await api.runCommand('beanstalk.clean');\n\n await api.runCommand('beanstalk.ssl');\n\n // Check if deploy succeeded\n const {\n Environments: finalEnvironments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n if (nextVersion.toString() === finalEnvironments[0].VersionLabel) {\n console.log(chalk.green(`App is running at ${Environments[0].CNAME}`));\n } else {\n console.log(chalk.red`Deploy Failed. Visit the Aws Elastic Beanstalk console to view the logs from the failed deploy.`);\n process.exitCode = 1;\n }\n}\n\nexport async function logs(api) {\n const logsContent = await getLogs(api, ['web.stdout.log', 'nodejs/nodejs.log']);\n\n logsContent.forEach(({\n instance,\n data\n }) => {\n console.log(`${instance} `, data[0] || data[1]);\n });\n}\n\nexport async function logsNginx(api) {\n const logsContent = await getLogs(api, ['nginx/error.log', 'nginx/access.log']);\n\n logsContent.forEach(({\n instance,\n data\n }) => {\n console.log(`${instance} `, data[0]);\n console.log(`${instance} `, data[1]);\n });\n}\n\nexport async function logsEb(api) {\n const logsContent = await getLogs(api, ['eb-engine.log', 'eb-activity.log']);\n\n logsContent.forEach(({\n data,\n instance\n }) => {\n console.log(`${instance} `, data[0] || data[1]);\n });\n}\n\nexport async function start(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Starting App');\n\n const {\n EnvironmentResources\n } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n\n const autoScalingGroup = EnvironmentResources.AutoScalingGroups[0].Name;\n\n const {\n minInstances,\n maxInstances\n } = config.app;\n\n await autoScaling.updateAutoScalingGroup({\n AutoScalingGroupName: autoScalingGroup,\n MaxSize: maxInstances,\n MinSize: minInstances,\n DesiredCapacity: minInstances\n }).promise();\n\n await waitForHealth(config);\n}\n\nexport async function stop(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Stopping App');\n\n const {\n EnvironmentResources\n } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n\n const autoScalingGroup = EnvironmentResources.AutoScalingGroups[0].Name;\n\n await autoScaling.updateAutoScalingGroup({\n AutoScalingGroupName: autoScalingGroup,\n MaxSize: 0,\n MinSize: 0,\n DesiredCapacity: 0\n }).promise();\n\n await waitForHealth(config, 'Grey');\n}\n\nexport async function restart(api) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n logStep('=> Restarting App');\n\n await beanstalk.restartAppServer({\n EnvironmentName: environment\n }).promise();\n\n await waitForEnvReady(config, false);\n}\n\nexport async function clean(api) {\n const config = api.getConfig();\n const {\n app,\n bucket\n } = names(config);\n\n logStep('=> Finding old versions');\n const {\n versions\n } = await oldVersions(api);\n const envVersions = await oldEnvVersions(api);\n\n logStep('=> Removing old versions');\n\n const promises = [];\n for (let i = 0; i < versions.length; i++) {\n promises.push(beanstalk.deleteApplicationVersion({\n ApplicationName: app,\n VersionLabel: versions[i].toString(),\n DeleteSourceBundle: true\n }).promise());\n }\n\n for (let i = 0; i < envVersions.length; i++) {\n promises.push(s3.deleteObject({\n Bucket: bucket,\n Key: `env/${envVersions[i]}.txt`\n }).promise());\n }\n\n // TODO: remove bundles\n\n await Promise.all(promises);\n}\n\nexport async function reconfig(api) {\n const config = api.getConfig();\n const {\n app,\n environment,\n bucket\n } = names(config);\n const deploying = !!api.commandHistory.find(entry => entry.name === 'beanstalk.deploy');\n\n logStep('=> Configuring Beanstalk environment');\n\n // check if env exists\n const {\n Environments\n } = await beanstalk.describeEnvironments({\n ApplicationName: app,\n EnvironmentNames: [environment]\n }).promise();\n\n if (!Environments.find(env => env.Status !== 'Terminated')) {\n const desiredEbConfig = createDesiredConfig(\n api.getConfig(),\n api.getSettings(),\n config.app.longEnvVars ? 1 : false\n );\n\n if (config.app.longEnvVars) {\n const envContent = createEnvFile(config.app.env, api.getSettings());\n\n await uploadEnvFile(bucket, 1, envContent);\n }\n\n const platformArn = await selectPlatformArn(api.getConfig().app.awsPlatformBranchName);\n\n const [version] = await ebVersions(api);\n await beanstalk.createEnvironment({\n ApplicationName: app,\n EnvironmentName: environment,\n Description: `Environment for ${config.app.name}, managed by Meteor Up`,\n VersionLabel: version.toString(),\n PlatformArn: platformArn,\n OptionSettings: desiredEbConfig.OptionSettings\n }).promise();\n\n console.log(' Created Environment');\n await waitForEnvReady(config, false);\n } else if (!deploying) {\n // If we are deploying, the environment will be updated\n // at the same time we update the environment version\n const {\n toRemove,\n toUpdate\n } = await prepareUpdateEnvironment(api);\n\n if (api.verbose) {\n console.log('EB Config changes:');\n console.dir({\n toRemove,\n toUpdate\n });\n }\n\n if (toRemove.length > 0 || toUpdate.length > 0) {\n await waitForEnvReady(config, true);\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n OptionSettings: toUpdate,\n OptionsToRemove: toRemove\n }).promise();\n console.log(' Updated Environment');\n await waitForEnvReady(config, true);\n }\n }\n\n const {\n ConfigurationSettings\n } = await beanstalk.describeConfigurationSettings({\n EnvironmentName: environment,\n ApplicationName: app\n }).promise();\n\n if (scalingConfigChanged(ConfigurationSettings[0].OptionSettings, config)) {\n logStep('=> Configuring scaling');\n await beanstalk.updateEnvironment({\n EnvironmentName: environment,\n OptionSettings: scalingConfig(config.app).OptionSettings\n }).promise();\n await waitForEnvReady(config, true);\n }\n}\n\nexport async function events(api) {\n const {\n environment\n } = names(api.getConfig());\n\n const {\n Events: envEvents\n } = await beanstalk.describeEvents({\n EnvironmentName: environment\n }).promise();\n\n console.log(envEvents.map(ev => `${ev.EventDate}: ${ev.Message}`).join('\\n'));\n}\n\nexport async function status(api) {\n const {\n environment\n } = names(api.getConfig());\n\n let result;\n\n try {\n result = await beanstalk.describeEnvironmentHealth({\n AttributeNames: [\n 'All'\n ],\n EnvironmentName: environment\n }).promise();\n } catch (e) {\n if (e.message.includes('No Environment found for EnvironmentName')) {\n console.log(' AWS Beanstalk environment does not exist');\n return;\n }\n\n throw e;\n }\n\n const {\n InstanceHealthList\n } = await beanstalk.describeInstancesHealth({\n AttributeNames: [\n 'All'\n ],\n EnvironmentName: environment\n }).promise();\n\n const {\n RequestCount,\n Duration,\n StatusCodes,\n Latency\n } = result.ApplicationMetrics;\n\n console.log(`Environment Status: ${result.Status}`);\n console.log(`Health Status: ${coloredStatusText(result.Color, result.HealthStatus)}`);\n if (result.Causes.length > 0) {\n console.log('Causes: ');\n result.Causes.forEach(cause => console.log(` ${cause}`));\n }\n console.log('');\n console.log(`=== Metrics For Last ${Duration || 'Unknown'} Minutes ===`);\n console.log(` Requests: ${RequestCount}`);\n if (StatusCodes) {\n console.log(' Status Codes');\n console.log(` 2xx: ${StatusCodes.Status2xx}`);\n console.log(` 3xx: ${StatusCodes.Status3xx}`);\n console.log(` 4xx: ${StatusCodes.Status4xx}`);\n console.log(` 5xx: ${StatusCodes.Status5xx}`);\n }\n if (Latency) {\n console.log(' Latency');\n console.log(` 99.9%: ${Latency.P999}`);\n console.log(` 99% : ${Latency.P99}`);\n console.log(` 95% : ${Latency.P95}`);\n console.log(` 90% : ${Latency.P90}`);\n console.log(` 85% : ${Latency.P85}`);\n console.log(` 75% : ${Latency.P75}`);\n console.log(` 50% : ${Latency.P50}`);\n console.log(` 10% : ${Latency.P10}`);\n }\n console.log('');\n console.log('=== Instances ===');\n InstanceHealthList.forEach((instance) => {\n console.log(` ${instance.InstanceId}: ${coloredStatusText(instance.Color, instance.HealthStatus)}`);\n });\n if (InstanceHealthList.length === 0) {\n console.log(' 0 Instances');\n }\n}\n\nexport async function ssl(api) {\n const config = api.getConfig();\n\n await waitForEnvReady(config, true);\n\n if (!config.app || !config.app.sslDomains) {\n logStep('=> Updating Beanstalk SSL Config');\n await updateSSLConfig(config);\n return;\n }\n\n logStep('=> Checking Certificate Status');\n\n const domains = config.app.sslDomains;\n const {\n CertificateSummaryList\n } = await acm.listCertificates().promise();\n let found = null;\n\n for (let i = 0; i < CertificateSummaryList.length; i++) {\n const {\n DomainName,\n CertificateArn\n } = CertificateSummaryList[i];\n\n if (DomainName === domains[0]) {\n const {\n Certificate\n } = await acm.describeCertificate({ // eslint-disable-line no-await-in-loop\n CertificateArn\n }).promise();\n\n if (domains.join(',') === Certificate.SubjectAlternativeNames.join(',')) {\n found = CertificateSummaryList[i];\n }\n }\n }\n\n let certificateArn;\n\n if (!found) {\n logStep('=> Requesting Certificate');\n\n const result = await acm.requestCertificate({\n DomainName: domains.shift(),\n SubjectAlternativeNames: domains.length > 0 ? domains : null\n }).promise();\n\n certificateArn = result.CertificateArn;\n }\n\n if (found) {\n certificateArn = found.CertificateArn;\n }\n\n let emailsProvided = false;\n let checks = 0;\n let certificate;\n\n /* eslint-disable no-await-in-loop */\n while (!emailsProvided && checks < 5) {\n const {\n Certificate\n } = await acm.describeCertificate({\n CertificateArn: certificateArn\n }).promise();\n const validationOptions = Certificate.DomainValidationOptions[0];\n\n if (typeof validationOptions.ValidationEmails === 'undefined') {\n emailsProvided = true;\n certificate = Certificate;\n } else if (validationOptions.ValidationEmails.length > 0 || checks === 6) {\n emailsProvided = true;\n certificate = Certificate;\n } else {\n checks += 1;\n\n await new Promise((resolve) => {\n setTimeout(resolve, 1000 * 10);\n });\n }\n }\n\n if (certificate.Status === 'PENDING_VALIDATION') {\n console.log('Certificate is pending validation.');\n certificate.DomainValidationOptions.forEach(({\n DomainName,\n ValidationEmails,\n ValidationDomain,\n ValidationStatus\n }) => {\n if (ValidationStatus === 'SUCCESS') {\n console.log(chalk.green(`${ValidationDomain || DomainName} has been verified`));\n return;\n }\n\n console.log(chalk.yellow(`${ValidationDomain || DomainName} is pending validation`));\n\n if (ValidationEmails) {\n console.log('Emails with instructions have been sent to:');\n\n ValidationEmails.forEach((email) => {\n console.log(` ${email}`);\n });\n }\n\n console.log('Run \"mup beanstalk ssl\" after you have verified the domains, or to check the verification status');\n });\n } else if (certificate.Status === 'ISSUED') {\n console.log(chalk.green('Certificate has been issued'));\n logStep('=> Updating Beanstalk SSL config');\n await updateSSLConfig(config, certificateArn);\n }\n}\n\nexport async function shell(api) {\n const {\n selected,\n description\n } = await pickInstance(api.getConfig(), api.getArgs()[2]);\n\n if (!selected) {\n console.log(description);\n console.log('Run \"mup beanstalk shell <instance id>\"');\n process.exitCode = 1;\n\n return;\n }\n\n const {\n sshOptions,\n removeSSHAccess\n } = await connectToInstance(api, selected, 'mup beanstalk shell');\n const conn = new Client();\n conn.on('ready', () => {\n conn.exec('sudo node /home/webapp/meteor-shell.js', {\n pty: true\n }, (err, stream) => {\n if (err) {\n throw err;\n }\n stream.on('close', async () => {\n conn.end();\n await removeSSHAccess();\n process.exit();\n });\n\n process.stdin.setRawMode(true);\n process.stdin.pipe(stream);\n\n stream.pipe(process.stdout);\n stream.stderr.pipe(process.stderr);\n stream.setWindow(process.stdout.rows, process.stdout.columns);\n\n process.stdout.on('resize', () => {\n stream.setWindow(process.stdout.rows, process.stdout.columns);\n });\n });\n }).connect(sshOptions);\n}\n\nexport async function debug(api) {\n const config = api.getConfig();\n const {\n selected,\n description\n } = await pickInstance(config, api.getArgs()[2]);\n\n if (!selected) {\n console.log(description);\n console.log('Run \"mup beanstalk debug <instance id>\"');\n process.exitCode = 1;\n\n return;\n }\n\n const {\n sshOptions,\n removeSSHAccess\n } = await connectToInstance(api, selected, 'mup beanstalk debug');\n\n const conn = new Client();\n conn.on('ready', async () => {\n const result = await executeSSHCommand(\n conn,\n 'sudo pkill -USR1 -u webapp -n node || sudo pkill -USR1 -u nodejs -n node'\n );\n\n if (api.verbose) {\n console.log(result.output);\n }\n\n const server = {\n ...sshOptions,\n pem: api.resolvePath(config.app.sshKey.privateKey)\n };\n\n let loggedConnection = false;\n\n api.forwardPort({\n server,\n localAddress: '0.0.0.0',\n localPort: 9229,\n remoteAddress: '127.0.0.1',\n remotePort: 9229,\n onError(error) {\n console.error(error);\n },\n onReady() {\n console.log('Connected to server');\n console.log('');\n console.log('Debugger listening on ws://127.0.0.1:9229');\n console.log('');\n console.log('To debug:');\n console.log('1. Open chrome://inspect in Chrome');\n console.log('2. Select \"Open dedicated DevTools for Node\"');\n console.log('3. Wait a minute while it connects and loads the app.');\n console.log(' When it is ready, the app\\'s files will appear in the Sources tab');\n console.log('');\n console.log('Warning: Do not use breakpoints when debugging a production server.');\n console.log('They will pause your server when hit, causing it to not handle methods or subscriptions.');\n console.log('Use logpoints or something else that does not pause the server');\n console.log('');\n console.log('The debugger will be enabled until the next time the app is restarted,');\n console.log('though only accessible while this command is running');\n },\n onConnection() {\n if (!loggedConnection) {\n // It isn't guaranteed the debugger is connected, but not many\n // other tools will try to connect to port 9229.\n console.log('');\n console.log('Detected by debugger');\n loggedConnection = true;\n }\n }\n });\n }).connect(sshOptions);\n\n process.on('SIGINT', async () => {\n await removeSSHAccess();\n process.exit();\n });\n}\n"],"file":"command-handlers.js"}
|
package/lib/utils.js
CHANGED
|
@@ -203,16 +203,12 @@ function getNodeVersion(api, bundlePath) {
|
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
async function selectPlatformArn() {
|
|
206
|
+
async function selectPlatformArn(awsPlatformBranchName) {
|
|
207
|
+
console.log('----> Amazon BranchName:', awsPlatformBranchName);
|
|
207
208
|
const {
|
|
208
209
|
PlatformBranchSummaryList
|
|
209
210
|
} = await _aws.beanstalk.listPlatformBranches({
|
|
210
|
-
Filters: [
|
|
211
|
-
// Attribute: 'LifecycleState',
|
|
212
|
-
// Operator: '=',
|
|
213
|
-
// Values: ['supported']
|
|
214
|
-
// },
|
|
215
|
-
{
|
|
211
|
+
Filters: [{
|
|
216
212
|
Attribute: 'PlatformName',
|
|
217
213
|
Operator: '=',
|
|
218
214
|
Values: ['Node.js']
|
|
@@ -223,7 +219,7 @@ async function selectPlatformArn() {
|
|
|
223
219
|
}, {
|
|
224
220
|
Attribute: 'BranchName',
|
|
225
221
|
Operator: 'begins_with',
|
|
226
|
-
Values: [
|
|
222
|
+
Values: [awsPlatformBranchName]
|
|
227
223
|
}]
|
|
228
224
|
}).promise();
|
|
229
225
|
|
|
@@ -232,7 +228,7 @@ async function selectPlatformArn() {
|
|
|
232
228
|
}
|
|
233
229
|
|
|
234
230
|
const branchName = PlatformBranchSummaryList[0].BranchName;
|
|
235
|
-
console.log('---->', branchName);
|
|
231
|
+
console.log('----> Amazon Platform:', branchName);
|
|
236
232
|
const {
|
|
237
233
|
PlatformSummaryList
|
|
238
234
|
} = await _aws.beanstalk.listPlatformVersions({
|
|
@@ -247,7 +243,7 @@ async function selectPlatformArn() {
|
|
|
247
243
|
}]
|
|
248
244
|
}).promise();
|
|
249
245
|
const arn = PlatformSummaryList[0].PlatformArn;
|
|
250
|
-
console.log('---->', arn);
|
|
246
|
+
console.log('----> Amazon ARN:', arn);
|
|
251
247
|
return arn;
|
|
252
248
|
}
|
|
253
249
|
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["logStep","message","console","log","chalk","blue","shouldRebuild","bundlePath","useCachedBuild","fs","existsSync","tmpBuildPath","appPath","api","rand","random","create","uuidNumbers","i","push","resolvePath","os","tmpdir","uuid","v4","names","config","name","app","toLowerCase","bucket","environment","envName","bundlePrefix","instanceProfile","serviceRole","trailBucketPrefix","trailName","deregisterRuleName","eventTargetRole","eventTargetPolicyName","eventTargetPassRoleName","automationDocument","createUniqueName","prefix","randomNumbers","Math","floor","Date","now","retrieveEnvironmentInfo","count","getConfig","EnvironmentInfo","beanstalk","EnvironmentName","InfoType","promise","length","Error","Promise","resolve","reject","setTimeout","then","catch","getLogs","logNames","requestEnvironmentInfo","logsForServer","reduce","result","info","Ec2InstanceId","Message","all","Object","keys","map","key","axios","get","data","parts","split","find","part","trim","startsWith","instance","getNodeVersion","star","readFileSync","toString","nodeVersionTxt","JSON","parse","npmVersion","nodeVersion","substr","selectPlatformArn","PlatformBranchSummaryList","listPlatformBranches","Filters","Attribute","Operator","Values","branchName","BranchName","PlatformSummaryList","listPlatformVersions","Type","arn","PlatformArn","attachPolicies","roleName","policies","promises","forEach","policy","iam","attachRolePolicy","RoleName","PolicyArn","getAccountId","sts","getCallerIdentity","Account","ensureRoleExists","assumeRolePolicyDocument","ensureAssumeRolePolicy","exists","updateAssumeRolePolicy","Role","getRole","currentAssumeRolePolicy","decodeURIComponent","AssumeRolePolicyDocument","stringify","e","createRole","PolicyDocument","ensureInstanceProfileExists","getInstanceProfile","InstanceProfileName","createInstanceProfile","ensureRoleAdded","role","added","InstanceProfile","Roles","addRoleToInstanceProfile","ensurePoliciesAttached","AttachedPolicies","listAttachedRolePolicies","unattachedPolicies","indexOf","ensureInlinePolicyAttached","policyName","policyDocument","needsUpdating","getRolePolicy","PolicyName","currentPolicyDocument","putRolePolicy","ensureBucketExists","buckets","bucketName","region","Name","s3","createBucket","Bucket","CreateBucketConfiguration","LocationConstraint","findBucketWithPrefix","ensureBucketPolicyAttached","error","currentPolicy","Policy","getBucketPolicy","params","putBucketPolicy","ensureCloudWatchRule","description","eventPattern","cloudWatchEvents","describeRule","putRule","Description","EventPattern","ensureRuleTargetExists","ruleName","target","Targets","listTargetsByRule","Rule","_target","putTargets","coloredStatusText","envColor","text","green","yellow","red","createVersionDescription","appConfig","getBasePath","path","cwd","stdio","toUTCString","slice","ensureSsmDocument","content","ssm","getDocument","DocumentVersion","currentContent","Content","replace","createDocument","DocumentType","updateDocument","code","updateDocumentDefaultVersion","pickInstance","EnvironmentResources","describeEnvironmentResources","instanceIds","Instances","Id","id","join","selected","includes","connectToInstance","instanceId","commandLabel","sshKey","solution","Reservations","ec2","describeInstances","InstanceIds","availabilityZone","Placement","AvailabilityZone","securityGroups","SecurityGroups","g","GroupId","ipAddress","warn","ruleIds","SecurityGroupRules","authorizeSecurityGroupIngress","IpPermissions","FromPort","IpProtocol","IpRanges","CidrIp","ToPort","rule","SecurityGroupRuleId","ec2InstanceConnect","sendSSHPublicKey","InstanceId","InstanceOSUser","SSHPublicKey","publicKey","sshOptions","host","PublicDnsName","port","username","privateKey","removeSSHAccess","revokeSecurityGroupIngress","SecurityGroupRuleIds","executeSSHCommand","conn","command","exec","err","outputStream","end","output","on","stderr","once"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEO,SAASA,OAAT,CAAiBC,OAAjB,EAA0B;AAC/BC,EAAAA,OAAO,CAACC,GAAR,CAAYC,eAAMC,IAAN,CAAWJ,OAAX,CAAZ;AACD;;AAEM,SAASK,aAAT,CAAuBC,UAAvB,EAAmCC,cAAnC,EAAmD;AACxD,MAAIC,YAAGC,UAAH,CAAcH,UAAd,KAA6BC,cAAjC,EAAiD;AAC/C,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD;;AAEM,SAASG,YAAT,CAAsBC,OAAtB,EAA+BC,GAA/B,EAAoC;AACzC,QAAMC,IAAI,GAAGC,oBAAOC,MAAP,CAAcJ,OAAd,CAAb;;AACA,QAAMK,WAAW,GAAG,EAApB;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,EAAzB,EAA6B;AAC3BD,IAAAA,WAAW,CAACE,IAAZ,CAAiBL,IAAI,CAAC,GAAD,CAArB;AACD;;AAED,SAAOD,GAAG,CAACO,WAAJ,CACLC,YAAGC,MAAH,EADK,EAEJ,cAAaC,cAAKC,EAAL,CAAQ;AAAET,IAAAA,MAAM,EAAEE;AAAV,GAAR,CAAiC,EAF1C,CAAP;AAID;;AAEM,SAASQ,KAAT,CAAeC,MAAf,EAAuB;AAC5B,QAAMC,IAAI,GAAGD,MAAM,CAACE,GAAP,CAAWD,IAAX,CAAgBE,WAAhB,EAAb;AAEA,SAAO;AACLC,IAAAA,MAAM,EAAG,OAAMH,IAAK,EADf;AAELI,IAAAA,WAAW,EAAEL,MAAM,CAACE,GAAP,CAAWI,OAAX,IAAuB,WAAUL,IAAK,EAF9C;AAGLC,IAAAA,GAAG,EAAG,OAAMD,IAAK,EAHZ;AAILM,IAAAA,YAAY,EAAG,eAAcN,IAAK,GAJ7B;AAKLO,IAAAA,eAAe,EAAE,+BALZ;AAMLC,IAAAA,WAAW,EAAE,mCANR;AAOLC,IAAAA,iBAAiB,EAAE,6BAPd;AAQLC,IAAAA,SAAS,EAAE,6BARN;AASLC,IAAAA,kBAAkB,EAAE,uBATf;AAULC,IAAAA,eAAe,EAAG,0BAAyBZ,IAAK,EAV3C;AAWLa,IAAAA,qBAAqB,EAAE,oBAXlB;AAYLC,IAAAA,uBAAuB,EAAE,WAZpB;AAaLC,IAAAA,kBAAkB,EAAE;AAbf,GAAP;AAeD;;AAEM,SAASC,gBAAT,CAA0BC,MAAM,GAAG,EAAnC,EAAuC;AAC5C,QAAMC,aAAa,GAAGC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC/B,MAAL,KAAgB,KAA3B,CAAtB;AAEA,SAAQ,GAAE6B,MAAO,IAAGI,IAAI,CAACC,GAAL,EAAW,IAAGJ,aAAc,EAAhD;AACD;;AAED,eAAeK,uBAAf,CAAuCrC,GAAvC,EAA4CsC,KAA5C,EAAmD;AACjD,QAAMzB,MAAM,GAAGb,GAAG,CAACuC,SAAJ,EAAf;AACA,QAAM;AACJrB,IAAAA;AADI,MAEFN,KAAK,CAACC,MAAD,CAFT;AAIA,QAAM;AACJ2B,IAAAA;AADI,MAEF,MAAMC,eAAUJ,uBAAV,CAAkC;AAC1CK,IAAAA,eAAe,EAAExB,WADyB;AAE1CyB,IAAAA,QAAQ,EAAE;AAFgC,GAAlC,EAGPC,OAHO,EAFV;;AAOA,MAAIJ,eAAe,CAACK,MAAhB,GAAyB,CAA7B,EAAgC;AAC9B,WAAOL,eAAP;AACD,GAFD,MAEO,IAAIF,KAAK,GAAG,CAAZ,EAAe;AACpB,UAAM,IAAIQ,KAAJ,CAAU,SAAV,CAAN;AACD;;AAED,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtCC,IAAAA,UAAU,CAAC,MAAM;AACf;AACA;AACAb,MAAAA,uBAAuB,CAACrC,GAAD,EAAMsC,KAAK,GAAG,CAAd,CAAvB,CACGa,IADH,CACQH,OADR,EAEGI,KAFH,CAESH,MAFT;AAGD,KANS,EAMP,kCANO,CAAV;AAOD,GARM,CAAP;AASD;;AAEM,eAAeI,OAAf,CAAuBrD,GAAvB,EAA4BsD,QAA5B,EAAsC;AAC3C,QAAMzC,MAAM,GAAGb,GAAG,CAACuC,SAAJ,EAAf;AACA,QAAM;AACJrB,IAAAA;AADI,MAEFN,KAAK,CAACC,MAAD,CAFT;AAIA,QAAM,+BAAgBA,MAAhB,EAAwB,KAAxB,CAAN;AAEA1B,EAAAA,OAAO,CAAC,oBAAD,CAAP;AAEA,QAAMsD,eAAUc,sBAAV,CAAiC;AACrCb,IAAAA,eAAe,EAAExB,WADoB;AAErCyB,IAAAA,QAAQ,EAAE;AAF2B,GAAjC,EAGHC,OAHG,EAAN;AAKA,QAAMJ,eAAe,GAAG,MAAMH,uBAAuB,CAACrC,GAAD,EAAM,CAAN,CAArD;AAEAb,EAAAA,OAAO,CAAC,qBAAD,CAAP;AAEA,QAAMqE,aAAa,GAAGhB,eAAe,CAACiB,MAAhB,CAAuB,CAACC,MAAD,EAASC,IAAT,KAAkB;AAC7DD,IAAAA,MAAM,CAACC,IAAI,CAACC,aAAN,CAAN,GAA6BD,IAAI,CAACE,OAAlC;AAEA,WAAOH,MAAP;AACD,GAJqB,EAInB,EAJmB,CAAtB;AAMA,SAAOX,OAAO,CAACe,GAAR,CAAYC,MAAM,CAACC,IAAP,CAAYR,aAAZ,EAA2BS,GAA3B,CAA+BC,GAAG,IACnD,IAAInB,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC/BkB,mBAAMC,GAAN,CAAUZ,aAAa,CAACU,GAAD,CAAvB,EAA8Bf,IAA9B,CAAmC,CAAC;AAAEkB,MAAAA;AAAF,KAAD,KAAc;AAC/C;AACA,UAAIC,KAAK,GAAGD,IAAI,CAACE,KAAL,CAAW,qDAAX,CAAZ;;AACA,UAAID,KAAK,CAACzB,MAAN,KAAiB,CAArB,EAAwB;AACtByB,QAAAA,KAAK,GAAGD,IAAI,CAACE,KAAL,CAAW,kDAAX,CAAR;AACD;;AAEDF,MAAAA,IAAI,GAAGf,QAAQ,CAACW,GAAT,CAAanD,IAAI,IACtBwD,KAAK,CAACE,IAAN,CAAWC,IAAI,IAAIA,IAAI,CAACC,IAAL,GAAYC,UAAZ,CAAuB7D,IAAvB,CAAnB,CADK,CAAP;AAGAkC,MAAAA,OAAO,CAAC;AACNqB,QAAAA,IADM;AAENO,QAAAA,QAAQ,EAAEV;AAFJ,OAAD,CAAP;AAID,KAdD,EAcGd,KAdH,CAcSH,MAdT;AAeD,GAhBD,CADiB,CAAZ,CAAP;AAkBD;;AAEM,SAAS4B,cAAT,CAAwB7E,GAAxB,EAA6BN,UAA7B,EAAyC;AAC9C,MAAIoF,IAAI,GAAGlF,YAAGmF,YAAH,CAAgB/E,GAAG,CAACO,WAAJ,CAAgBb,UAAhB,EAA4B,kBAA5B,CAAhB,EAAiEsF,QAAjE,EAAX;;AACA,QAAMC,cAAc,GAAGrF,YAAGmF,YAAH,CAAgB/E,GAAG,CAACO,WAAJ,CAAgBb,UAAhB,EAA4B,0BAA5B,CAAhB,EAAyEsF,QAAzE,EAAvB;;AAEAF,EAAAA,IAAI,GAAGI,IAAI,CAACC,KAAL,CAAWL,IAAX,CAAP;;AAEA,MAAIA,IAAI,CAACM,UAAT,EAAqB;AACnB,WAAO;AACLC,MAAAA,WAAW,EAAEP,IAAI,CAACO,WADb;AAELD,MAAAA,UAAU,EAAEN,IAAI,CAACM;AAFZ,KAAP;AAID;;AAED,QAAMC,WAAW,GAAGJ,cAAc,CAACK,MAAf,CAAsB,CAAtB,CAApB;;AAEA,MAAID,WAAW,CAACV,UAAZ,CAAuB,GAAvB,CAAJ,EAAiC;AAC/B,WAAO;AACLU,MAAAA,WADK;AAELD,MAAAA,UAAU,EAAE;AAFP,KAAP;AAID;;AAED,SAAO;AACLC,IAAAA,WADK;AAELD,IAAAA,UAAU,EAAE;AAFP,GAAP;AAID;;AAEM,eAAeG,iBAAf,GAAmC;AACxC,QAAM;AACJC,IAAAA;AADI,MAEF,MAAM/C,eAAUgD,oBAAV,CAA+B;AACvCC,IAAAA,OAAO,EAAE,CACT;AACA;AACA;AACA;AACA;AACE;AACEC,MAAAA,SAAS,EAAE,cADb;AAEEC,MAAAA,QAAQ,EAAE,GAFZ;AAGEC,MAAAA,MAAM,EAAE,CAAC,SAAD;AAHV,KANO,EAUJ;AACDF,MAAAA,SAAS,EAAE,UADV;AAEDC,MAAAA,QAAQ,EAAE,GAFT;AAGDC,MAAAA,MAAM,EAAE,CAAC,oBAAD;AAHP,KAVI,EAcJ;AACDF,MAAAA,SAAS,EAAE,YADV;AAEDC,MAAAA,QAAQ,EAAE,aAFT;AAGDC,MAAAA,MAAM,EAAE,CAAC,YAAD;AAHP,KAdI;AAD8B,GAA/B,EAoBPjD,OApBO,EAFV;;AAwBA,MAAI4C,yBAAyB,CAAC3C,MAA1B,KAAqC,CAAzC,EAA4C;AAC1C,UAAM,IAAIC,KAAJ,CAAU,2CAAV,CAAN;AACD;;AAED,QAAMgD,UAAU,GAAGN,yBAAyB,CAAC,CAAD,CAAzB,CAA6BO,UAAhD;AACA1G,EAAAA,OAAO,CAACC,GAAR,CAAY,OAAZ,EAAqBwG,UAArB;AAEA,QAAM;AACJE,IAAAA;AADI,MAEF,MAAMvD,eAAUwD,oBAAV,CAA+B;AACvCP,IAAAA,OAAO,EAAE,CACP;AACEQ,MAAAA,IAAI,EAAE,oBADR;AAEEN,MAAAA,QAAQ,EAAE,GAFZ;AAGEC,MAAAA,MAAM,EAAE,CAACC,UAAD;AAHV,KADO,EAMP;AACEI,MAAAA,IAAI,EAAE,gBADR;AAEEN,MAAAA,QAAQ,EAAE,GAFZ;AAGEC,MAAAA,MAAM,EAAE,CAAC,OAAD;AAHV,KANO;AAD8B,GAA/B,EAaPjD,OAbO,EAFV;AAiBA,QAAMuD,GAAG,GAAGH,mBAAmB,CAAC,CAAD,CAAnB,CAAuBI,WAAnC;AACA/G,EAAAA,OAAO,CAACC,GAAR,CAAY,OAAZ,EAAqB6G,GAArB;AAEA,SAAOA,GAAP;AACD;;AAEM,eAAeE,cAAf,CAA8BxF,MAA9B,EAAsCyF,QAAtC,EAAgDC,QAAhD,EAA0D;AAC/D,QAAMC,QAAQ,GAAG,EAAjB;AAEAD,EAAAA,QAAQ,CAACE,OAAT,CAAkBC,MAAD,IAAY;AAC3B,UAAM9D,OAAO,GAAG+D,SAAIC,gBAAJ,CAAqB;AACnCC,MAAAA,QAAQ,EAAEP,QADyB;AAEnCQ,MAAAA,SAAS,EAAEJ;AAFwB,KAArB,EAGb9D,OAHa,EAAhB;;AAKA4D,IAAAA,QAAQ,CAAClG,IAAT,CAAcsC,OAAd;AACD,GAPD;AASA,QAAMG,OAAO,CAACe,GAAR,CAAY0C,QAAZ,CAAN;AACD;;AAEM,SAASO,YAAT,GAAwB;AAC7B,SAAOC,SAAIC,iBAAJ,GACJrE,OADI,GAEJO,IAFI,CAEC,CAAC;AAAE+D,IAAAA;AAAF,GAAD,KAAiBA,OAFlB,CAAP;AAGD;;AAEM,eAAeC,gBAAf,CAAgCrG,IAAhC,EAAsCsG,wBAAtC,EAAgEC,sBAAhE,EAAwF;AAC7F,MAAIC,MAAM,GAAG,IAAb;AACA,MAAIC,sBAAsB,GAAG,KAA7B;;AAEA,MAAI;AACF,UAAM;AAAEC,MAAAA;AAAF,QAAW,MAAMb,SAAIc,OAAJ,CAAY;AACjCZ,MAAAA,QAAQ,EAAE/F;AADuB,KAAZ,EAEpB8B,OAFoB,EAAvB;AAKA,UAAM8E,uBAAuB,GAAGC,kBAAkB,CAACH,IAAI,CAACI,wBAAN,CAAlD,CANE,CAOF;;AACAR,IAAAA,wBAAwB,GAAGlC,IAAI,CAAC2C,SAAL,CAAe3C,IAAI,CAACC,KAAL,CAAWiC,wBAAX,CAAf,CAA3B;;AAEA,QAAIM,uBAAuB,KAAKN,wBAA5B,IAAwDC,sBAA5D,EAAoF;AAClFE,MAAAA,sBAAsB,GAAG,IAAzB;AACD;AACF,GAbD,CAaE,OAAOO,CAAP,EAAU;AACVR,IAAAA,MAAM,GAAG,KAAT;AACD;;AAED,MAAI,CAACA,MAAL,EAAa;AACX,UAAMX,SAAIoB,UAAJ,CAAe;AACnBlB,MAAAA,QAAQ,EAAE/F,IADS;AAEnB8G,MAAAA,wBAAwB,EAAER;AAFP,KAAf,EAGHxE,OAHG,EAAN;AAID,GALD,MAKO,IAAI2E,sBAAJ,EAA4B;AACjC,UAAMZ,SAAIY,sBAAJ,CAA2B;AAC/BV,MAAAA,QAAQ,EAAE/F,IADqB;AAE/BkH,MAAAA,cAAc,EAAEZ;AAFe,KAA3B,EAGHxE,OAHG,EAAN;AAID;AACF;;AAEM,eAAeqF,2BAAf,CAA2CpH,MAA3C,EAAmDC,IAAnD,EAAyD;AAC9D,MAAIwG,MAAM,GAAG,IAAb;;AAEA,MAAI;AACF,UAAMX,SAAIuB,kBAAJ,CAAuB;AAC3BC,MAAAA,mBAAmB,EAAErH;AADM,KAAvB,EAEH8B,OAFG,EAAN;AAGD,GAJD,CAIE,OAAOkF,CAAP,EAAU;AACVR,IAAAA,MAAM,GAAG,KAAT;AACD;;AAED,MAAI,CAACA,MAAL,EAAa;AACX,UAAMX,SAAIyB,qBAAJ,CAA0B;AAC9BD,MAAAA,mBAAmB,EAAErH;AADS,KAA1B,EAEH8B,OAFG,EAAN;AAGD;AACF;;AAEM,eAAeyF,eAAf,CAA+BxH,MAA/B,EAAuCQ,eAAvC,EAAwDiH,IAAxD,EAA8D;AACnE,MAAIC,KAAK,GAAG,IAAZ;AAGA,QAAM;AACJC,IAAAA;AADI,MAEF,MAAM7B,SAAIuB,kBAAJ,CAAuB;AAC/BC,IAAAA,mBAAmB,EAAE9G;AADU,GAAvB,EAEPuB,OAFO,EAFV;;AAMA,MAAI4F,eAAe,CAACC,KAAhB,CAAsB5F,MAAtB,KAAiC,CAAjC,IAAsC2F,eAAe,CAACC,KAAhB,CAAsB,CAAtB,EAAyB5B,QAAzB,KAAsCyB,IAAhF,EAAsF;AACpFC,IAAAA,KAAK,GAAG,KAAR;AACD;;AAED,MAAI,CAACA,KAAL,EAAY;AACV,UAAM5B,SAAI+B,wBAAJ,CAA6B;AACjCP,MAAAA,mBAAmB,EAAE9G,eADY;AAEjCwF,MAAAA,QAAQ,EAAEyB;AAFuB,KAA7B,EAGH1F,OAHG,EAAN;AAID;AACF;;AAEM,eAAe+F,sBAAf,CAAsC9H,MAAtC,EAA8CyH,IAA9C,EAAoD/B,QAApD,EAA8D;AACnE,MAAI;AACFqC,IAAAA;AADE,MAEA,MAAMjC,SAAIkC,wBAAJ,CAA6B;AACrChC,IAAAA,QAAQ,EAAEyB;AAD2B,GAA7B,EAEP1F,OAFO,EAFV;AAMAgG,EAAAA,gBAAgB,GAAGA,gBAAgB,CAAC3E,GAAjB,CAAqByC,MAAM,IAAIA,MAAM,CAACI,SAAtC,CAAnB;AAEA,QAAMgC,kBAAkB,GAAGvC,QAAQ,CAAC9C,MAAT,CAAgB,CAACC,MAAD,EAASgD,MAAT,KAAoB;AAC7D,QAAIkC,gBAAgB,CAACG,OAAjB,CAAyBrC,MAAzB,MAAqC,CAAC,CAA1C,EAA6C;AAC3ChD,MAAAA,MAAM,CAACpD,IAAP,CAAYoG,MAAZ;AACD;;AAED,WAAOhD,MAAP;AACD,GAN0B,EAMxB,EANwB,CAA3B;;AAQA,MAAIoF,kBAAkB,CAACjG,MAAnB,GAA4B,CAAhC,EAAmC;AACjC,UAAMwD,cAAc,CAACxF,MAAD,EAASyH,IAAT,EAAeQ,kBAAf,CAApB;AACD;AACF;;AAEM,eAAeE,0BAAf,CAA0CV,IAA1C,EAAgDW,UAAhD,EAA4DC,cAA5D,EAA4E;AACjF,MAAI5B,MAAM,GAAG,IAAb;AACA,MAAI6B,aAAa,GAAG,KAApB;;AAEA,MAAI;AACF,UAAMzF,MAAM,GAAG,MAAMiD,SAAIyC,aAAJ,CAAkB;AACrCvC,MAAAA,QAAQ,EAAEyB,IAD2B;AAErCe,MAAAA,UAAU,EAAEJ;AAFyB,KAAlB,EAGlBrG,OAHkB,EAArB;AAIA,UAAM0G,qBAAqB,GAAG3B,kBAAkB,CAACjE,MAAM,CAACsE,cAAR,CAAhD;;AAEA,QAAIsB,qBAAqB,KAAKJ,cAA9B,EAA8C;AAC5CC,MAAAA,aAAa,GAAG,IAAhB;AACD;AACF,GAVD,CAUE,OAAOrB,CAAP,EAAU;AACVR,IAAAA,MAAM,GAAG,KAAT;AACD;;AAED,MAAI,CAACA,MAAD,IAAW6B,aAAf,EAA8B;AAC5B,UAAMxC,SAAI4C,aAAJ,CAAkB;AACtB1C,MAAAA,QAAQ,EAAEyB,IADY;AAEtBe,MAAAA,UAAU,EAAEJ,UAFU;AAGtBjB,MAAAA,cAAc,EAAEkB;AAHM,KAAlB,EAIHtG,OAJG,EAAN;AAKD;AACF;;AAEM,eAAe4G,kBAAf,CAAkCC,OAAlC,EAA2CC,UAA3C,EAAuDC,MAAvD,EAA+D;AACpE,MAAI,CAACF,OAAO,CAACjF,IAAR,CAAavD,MAAM,IAAIA,MAAM,CAAC2I,IAAP,KAAgBF,UAAvC,CAAL,EAAyD;AACvD,UAAMG,QAAGC,YAAH;AACJC,MAAAA,MAAM,EAAEL;AADJ,OAEAC,MAAM,GAAG;AACXK,MAAAA,yBAAyB,EAAE;AACzBC,QAAAA,kBAAkB,EAAEN;AADK;AADhB,KAAH,GAIN,EANA,GAOH/G,OAPG,EAAN;AASA,WAAO,IAAP;AACD;AACF;;AAEM,SAASsH,oBAAT,CAA8BT,OAA9B,EAAuC1H,MAAvC,EAA+C;AACpD,SAAO0H,OAAO,CAACjF,IAAR,CAAavD,MAAM,IAAIA,MAAM,CAAC2I,IAAP,CAAYb,OAAZ,CAAoBhH,MAApB,MAAgC,CAAvD,CAAP;AACD;;AAEM,eAAeoI,0BAAf,CAA0CT,UAA1C,EAAsDhD,MAAtD,EAA8D;AACnE,MAAI0D,KAAK,GAAG,KAAZ;AACA,MAAIC,aAAJ;;AAEA,MAAI;AACF,UAAM;AAAEC,MAAAA;AAAF,QAAa,MAAMT,QAAGU,eAAH,CAAmB;AAAER,MAAAA,MAAM,EAAEL;AAAV,KAAnB,EAA2C9G,OAA3C,EAAzB;AACAyH,IAAAA,aAAa,GAAGC,MAAhB;AACD,GAHD,CAGE,OAAOxC,CAAP,EAAU;AACVsC,IAAAA,KAAK,GAAG,IAAR;AACD;;AAED,MAAIA,KAAK,IAAIC,aAAa,KAAK3D,MAA/B,EAAuC;AACrC,UAAM8D,MAAM,GAAG;AACbT,MAAAA,MAAM,EAAEL,UADK;AAEbY,MAAAA,MAAM,EAAE5D;AAFK,KAAf;AAKA,UAAMmD,QAAGY,eAAH,CAAmBD,MAAnB,EAA2B5H,OAA3B,EAAN;AACD;AACF;;AAEM,eAAe8H,oBAAf,CAAoC5J,IAApC,EAA0C6J,WAA1C,EAAuDC,YAAvD,EAAqE;AAC1E,MAAIR,KAAK,GAAG,KAAZ;;AAEA,MAAI;AACF,UAAMS,sBAAiBC,YAAjB,CAA8B;AAAElB,MAAAA,IAAI,EAAE9I;AAAR,KAA9B,EAA8C8B,OAA9C,EAAN;AACD,GAFD,CAEE,OAAOkF,CAAP,EAAU;AACVsC,IAAAA,KAAK,GAAG,IAAR;AACD;;AAED,MAAIA,KAAJ,EAAW;AACT,UAAMS,sBAAiBE,OAAjB,CAAyB;AAC7BnB,MAAAA,IAAI,EAAE9I,IADuB;AAE7BkK,MAAAA,WAAW,EAAEL,WAFgB;AAG7BM,MAAAA,YAAY,EAAEL;AAHe,KAAzB,EAIHhI,OAJG,EAAN;AAMA,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,eAAesI,sBAAf,CAAsCC,QAAtC,EAAgDC,MAAhD,EAAwD;AAC7D,QAAM;AACJC,IAAAA;AADI,MAEF,MAAMR,sBAAiBS,iBAAjB,CAAmC;AAC3CC,IAAAA,IAAI,EAAEJ;AADqC,GAAnC,EAEPvI,OAFO,EAFV;;AAMA,MAAI,CAACyI,OAAO,CAAC7G,IAAR,CAAagH,OAAO,IAAI,qBAAQA,OAAR,EAAiBJ,MAAjB,CAAxB,CAAL,EAAwD;AACtD,UAAMZ,MAAM,GAAG;AACbe,MAAAA,IAAI,EAAEJ,QADO;AAEbE,MAAAA,OAAO,EAAE,CAACD,MAAD;AAFI,KAAf;AAIA,UAAMP,sBAAiBY,UAAjB,CAA4BjB,MAA5B,EAAoC5H,OAApC,EAAN;AAEA,WAAO,IAAP;AACD;AACF;;AAEM,SAAS8I,iBAAT,CAA2BC,QAA3B,EAAqCC,IAArC,EAA2C;AAChD,MAAID,QAAQ,KAAK,OAAjB,EAA0B;AACxB,WAAOpM,eAAMsM,KAAN,CAAYD,IAAZ,CAAP;AACD,GAFD,MAEO,IAAID,QAAQ,KAAK,QAAjB,EAA2B;AAChC,WAAOpM,eAAMuM,MAAN,CAAaF,IAAb,CAAP;AACD,GAFM,MAEA,IAAID,QAAQ,KAAK,KAAjB,EAAwB;AAC7B,WAAOpM,eAAMwM,GAAN,CAAUH,IAAV,CAAP;AACD;;AACD,SAAOA,IAAP;AACD;;AAEM,SAASI,wBAAT,CAAkChM,GAAlC,EAAuCiM,SAAvC,EAAkD;AACvD,QAAMlM,OAAO,GAAGC,GAAG,CAACO,WAAJ,CAAgBP,GAAG,CAACkM,WAAJ,EAAhB,EAAmCD,SAAS,CAACE,IAA7C,CAAhB;AACA,MAAIxB,WAAW,GAAG,EAAlB;;AAEA,MAAI;AACFA,IAAAA,WAAW,GAAG,6BAAS,wBAAT,EAAmC;AAC/CyB,MAAAA,GAAG,EAAErM,OAD0C;AAE/CsM,MAAAA,KAAK,EAAE;AAFwC,KAAnC,EAGXrH,QAHW,EAAd;AAID,GALD,CAKE,OAAO8C,CAAP,EAAU;AACV6C,IAAAA,WAAW,GAAI,sBAAqB,IAAIxI,IAAJ,GAAWmK,WAAX,EAAyB,EAA7D;AACD;;AACD,SAAO3B,WAAW,CAACpG,KAAZ,CAAkB,IAAlB,EAAwB,CAAxB,EAA2BgI,KAA3B,CAAiC,CAAjC,EAAoC,GAApC,CAAP;AACD;;AAEM,eAAeC,iBAAf,CAAiC1L,IAAjC,EAAuC2L,OAAvC,EAAgD;AACrD,MAAInF,MAAM,GAAG,IAAb;AACA,MAAI6B,aAAa,GAAG,KAApB;;AAEA,MAAI;AACF,UAAMzF,MAAM,GAAG,MAAMgJ,SAAIC,WAAJ,CAAgB;AAAE/C,MAAAA,IAAI,EAAE9I,IAAR;AAAc8L,MAAAA,eAAe,EAAE;AAA/B,KAAhB,EAA6DhK,OAA7D,EAArB,CADE,CAEF;AACA;;AACA,UAAMiK,cAAc,GAAG3H,IAAI,CAAC2C,SAAL,CAAe3C,IAAI,CAACC,KAAL,CAAWzB,MAAM,CAACoJ,OAAP,CAAeC,OAAf,CAAuB,WAAvB,EAAoC,EAApC,CAAX,CAAf,CAAvB;;AACA,QAAIF,cAAc,KAAKJ,OAAvB,EAAgC;AAC9BtD,MAAAA,aAAa,GAAG,IAAhB;AACD;AACF,GARD,CAQE,OAAOrB,CAAP,EAAU;AACVR,IAAAA,MAAM,GAAG,KAAT;AACD;;AAED,MAAI,CAACA,MAAL,EAAa;AACX,UAAMoF,SAAIM,cAAJ,CAAmB;AACvBF,MAAAA,OAAO,EAAEL,OADc;AAEvB7C,MAAAA,IAAI,EAAE9I,IAFiB;AAGvBmM,MAAAA,YAAY,EAAE;AAHS,KAAnB,EAIHrK,OAJG,EAAN;AAMA,WAAO,IAAP;AACD,GARD,MAQO,IAAIuG,aAAJ,EAAmB;AACxB,QAAI;AACF,YAAMuD,SAAIQ,cAAJ,CAAmB;AACvBJ,QAAAA,OAAO,EAAEL,OADc;AAEvB7C,QAAAA,IAAI,EAAE9I,IAFiB;AAGvB8L,QAAAA,eAAe,EAAE;AAHM,OAAnB,EAIHhK,OAJG,EAAN;AAKD,KAND,CAME,OAAOkF,CAAP,EAAU;AACV;AACA;AACA;AACA,UAAIA,CAAC,CAACqF,IAAF,KAAW,0BAAf,EAA2C;AACzC,cAAMrF,CAAN;AACD;AACF;;AAED,UAAMpE,MAAM,GAAG,MAAMgJ,SAAIC,WAAJ,CAAgB;AAAE/C,MAAAA,IAAI,EAAE9I,IAAR;AAAc8L,MAAAA,eAAe,EAAE;AAA/B,KAAhB,EAA4DhK,OAA5D,EAArB;AACA,UAAM8J,SAAIU,4BAAJ,CAAiC;AACrCR,MAAAA,eAAe,EAAElJ,MAAM,CAACkJ,eADa;AAErChD,MAAAA,IAAI,EAAE9I;AAF+B,KAAjC,EAGH8B,OAHG,EAAN;AAID;AACF;;AAEM,eAAeyK,YAAf,CAA4BxM,MAA5B,EAAoC+D,QAApC,EAA8C;AACnD,QAAM;AACJ1D,IAAAA;AADI,MAEFN,KAAK,CAACC,MAAD,CAFT;AAIA,QAAM;AAAEyM,IAAAA;AAAF,MAA2B,MAAM7K,eAAU8K,4BAAV,CAAuC;AAC5E7K,IAAAA,eAAe,EAAExB;AAD2D,GAAvC,EAEpC0B,OAFoC,EAAvC;AAGA,QAAM4K,WAAW,GAAGF,oBAAoB,CAACG,SAArB,CAA+BxJ,GAA/B,CAAmC,CAAC;AAAEyJ,IAAAA;AAAF,GAAD,KAAYA,EAA/C,CAApB;AACA,QAAM/C,WAAW,GAAG,CAClB,qBADkB,EAElB,GAAG6C,WAAW,CAACvJ,GAAZ,CAAgB0J,EAAE,IAAK,OAAMA,EAAG,EAAhC,CAFe,EAGlBC,IAHkB,CAGb,IAHa,CAApB;AAKA,SAAO;AACLC,IAAAA,QAAQ,EAAEL,WAAW,CAACM,QAAZ,CAAqBlJ,QAArB,IAAiCA,QAAjC,GAA4C,IADjD;AAEL+F,IAAAA;AAFK,GAAP;AAID;;AAEM,eAAeoD,iBAAf,CAAiC/N,GAAjC,EAAsCgO,UAAtC,EAAkDC,YAAlD,EAAgE;AACrE,QAAM;AACJC,IAAAA;AADI,MAEFlO,GAAG,CAACuC,SAAJ,GAAgBxB,GAFpB;;AAIA,MAAI,CAACmN,MAAL,EAAa;AACX,UAAM9D,KAAK,GAAG,IAAItH,KAAJ,CAAU,uBAAV,CAAd;AACAsH,IAAAA,KAAK,CAAC+D,QAAN,GAAiB,+HAAjB;AAEA,UAAM/D,KAAN;AACD;;AAED,QAAM;AAAEgE,IAAAA;AAAF,MAAmB,MAAMC,SAAIC,iBAAJ,CAAsB;AACnDC,IAAAA,WAAW,EAAE,CACXP,UADW;AADsC,GAAtB,EAI5BpL,OAJ4B,EAA/B;AAMA,QAAMgC,QAAQ,GAAGwJ,YAAY,CAAC,CAAD,CAAZ,CAAgBX,SAAhB,CAA0B,CAA1B,CAAjB;AACA,QAAMe,gBAAgB,GAAG5J,QAAQ,CAAC6J,SAAT,CAAmBC,gBAA5C;AACA,QAAMC,cAAc,GAAG/J,QAAQ,CAACgK,cAAT,CAAwB3K,GAAxB,CAA4B4K,CAAC,IAAIA,CAAC,CAACC,OAAnC,CAAvB;AAEA,MAAI;AAAEzK,IAAAA,IAAI,EAAE0K;AAAR,MAAsB,MAAM5K,eAAMC,GAAN,CAAU,4BAAV,CAAhC;AACA2K,EAAAA,SAAS,GAAGA,SAAS,CAACrK,IAAV,EAAZ;;AAEA,MAAIiK,cAAc,CAAC9L,MAAf,GAAwB,CAA5B,EAA+B;AAC7BxD,IAAAA,OAAO,CAAC2P,IAAR,CAAa,6FAAb;AACD;;AAED,MAAIC,OAAO,GAAG,EAAd;;AAEA,MAAI;AACF,UAAM;AAAEC,MAAAA;AAAF,QAAyB,MAAMb,SAAIc,6BAAJ,CAAkC;AACrEL,MAAAA,OAAO,EAAEH,cAAc,CAAC,CAAD,CAD8C;AAErES,MAAAA,aAAa,EAAE,CACb;AACEC,QAAAA,QAAQ,EAAE,EADZ;AAEEC,QAAAA,UAAU,EAAE,KAFd;AAGEC,QAAAA,QAAQ,EAAE,CACR;AACEC,UAAAA,MAAM,EAAG,GAAET,SAAU,KADvB;AAEE/D,UAAAA,WAAW,EAAG,4BAA2BiD,YAAa;AAFxD,SADQ,CAHZ;AASEwB,QAAAA,MAAM,EAAE;AATV,OADa;AAFsD,KAAlC,EAelC7M,OAfkC,EAArC;AAiBAqM,IAAAA,OAAO,GAAGC,kBAAkB,CAACjL,GAAnB,CAAuByL,IAAI,IAAIA,IAAI,CAACC,mBAApC,CAAV;AACD,GAnBD,CAmBE,OAAO7H,CAAP,EAAU;AACV,QAAIA,CAAC,CAACqF,IAAF,KAAW,6BAAf,EAA8C,CAC5C;AACA;AACA;AACD,KAJD,MAIO;AACL,YAAMrF,CAAN;AACD;AACF;;AAED,QAAM8H,wBAAmBC,gBAAnB,CAAoC;AACxCC,IAAAA,UAAU,EAAE9B,UAD4B;AAExCU,IAAAA,gBAAgB,EAAEF,gBAFsB;AAGxCuB,IAAAA,cAAc,EAAE,UAHwB;AAIxCC,IAAAA,YAAY,EAAEpQ,YAAGmF,YAAH,CAAgB/E,GAAG,CAACO,WAAJ,CAAgB2N,MAAM,CAAC+B,SAAvB,CAAhB,EAAmD,OAAnD;AAJ0B,GAApC,EAKHrN,OALG,EAAN;AAOA,QAAMsN,UAAU,GAAG;AACjBC,IAAAA,IAAI,EAAEvL,QAAQ,CAACwL,aADE;AAEjBC,IAAAA,IAAI,EAAE,EAFW;AAGjBC,IAAAA,QAAQ,EAAE,UAHO;AAIjBC,IAAAA,UAAU,EAAE3Q,YAAGmF,YAAH,CAAgB/E,GAAG,CAACO,WAAJ,CAAgB2N,MAAM,CAACqC,UAAvB,CAAhB,EAAoD,OAApD;AAJK,GAAnB;AAOA,SAAO;AACLL,IAAAA,UADK;;AAELM,IAAAA,eAAe,GAAG;AAChB,UAAIvB,OAAO,CAACpM,MAAR,KAAmB,CAAvB,EAA0B;AACxB;AACD;;AAEDxD,MAAAA,OAAO,CAACC,GAAR,CAAY,gDAAZ;AACA,aAAO+O,SAAIoC,0BAAJ,CAA+B;AACpC3B,QAAAA,OAAO,EAAEH,cAAc,CAAC,CAAD,CADa;AAEpC+B,QAAAA,oBAAoB,EAAEzB;AAFc,OAA/B,EAGJrM,OAHI,EAAP;AAID;;AAZI,GAAP;AAcD;;AAEM,eAAe+N,iBAAf,CAAiCC,IAAjC,EAAuCC,OAAvC,EAAgD;AACrD,SAAO,IAAI9N,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC2N,IAAAA,IAAI,CAACE,IAAL,CAAUD,OAAV,EAAmB,CAACE,GAAD,EAAMC,YAAN,KAAuB;AACxC,UAAID,GAAJ,EAAS;AACPH,QAAAA,IAAI,CAACK,GAAL;AACAhO,QAAAA,MAAM,CAAC8N,GAAD,CAAN;AAEA;AACD;;AAED,UAAIG,MAAM,GAAG,EAAb;AAEAF,MAAAA,YAAY,CAACG,EAAb,CAAgB,MAAhB,EAAyB9M,IAAD,IAAU;AAChC6M,QAAAA,MAAM,IAAI7M,IAAV;AACD,OAFD;AAIA2M,MAAAA,YAAY,CAACI,MAAb,CAAoBD,EAApB,CAAuB,MAAvB,EAAgC9M,IAAD,IAAU;AACvC6M,QAAAA,MAAM,IAAI7M,IAAV;AACD,OAFD;AAIA2M,MAAAA,YAAY,CAACK,IAAb,CAAkB,OAAlB,EAA4BlE,IAAD,IAAU;AACnCyD,QAAAA,IAAI,CAACK,GAAL;AACAjO,QAAAA,OAAO,CAAC;AAAEmK,UAAAA,IAAF;AAAQ+D,UAAAA;AAAR,SAAD,CAAP;AACD,OAHD;AAID,KAtBD;AAuBD,GAxBM,CAAP;AAyBD","sourcesContent":["import axios from 'axios';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { isEqual } from 'lodash';\nimport os from 'os';\nimport random from 'random-seed';\nimport uuid from 'uuid';\nimport { execSync } from 'child_process';\nimport { beanstalk, cloudWatchEvents, iam, s3, sts, ssm, ec2, ec2InstanceConnect } from './aws';\nimport { getRecheckInterval } from './recheck';\nimport { waitForEnvReady } from './env-ready';\n\nexport function logStep(message) {\n console.log(chalk.blue(message));\n}\n\nexport function shouldRebuild(bundlePath, useCachedBuild) {\n if (fs.existsSync(bundlePath) && useCachedBuild) {\n return false;\n }\n\n return true;\n}\n\nexport function tmpBuildPath(appPath, api) {\n const rand = random.create(appPath);\n const uuidNumbers = [];\n\n for (let i = 0; i < 16; i++) {\n uuidNumbers.push(rand(255));\n }\n\n return api.resolvePath(\n os.tmpdir(),\n `mup-meteor-${uuid.v4({ random: uuidNumbers })}`\n );\n}\n\nexport function names(config) {\n const name = config.app.name.toLowerCase();\n\n return {\n bucket: `mup-${name}`,\n environment: config.app.envName || `mup-env-${name}`,\n app: `mup-${name}`,\n bundlePrefix: `mup/bundles/${name}/`,\n instanceProfile: 'aws-elasticbeanstalk-ec2-role',\n serviceRole: 'aws-elasticbeanstalk-service-role',\n trailBucketPrefix: 'mup-graceful-shutdown-trail',\n trailName: 'mup-graceful-shutdown-trail',\n deregisterRuleName: 'mup-target-deregister',\n eventTargetRole: `mup-envoke-run-command-${name}`,\n eventTargetPolicyName: 'Invoke_Run_Command',\n eventTargetPassRoleName: 'Pass_Role',\n automationDocument: 'mup-graceful-shutdown'\n };\n}\n\nexport function createUniqueName(prefix = '') {\n const randomNumbers = Math.floor(Math.random() * 10000);\n\n return `${prefix}-${Date.now()}-${randomNumbers}`;\n}\n\nasync function retrieveEnvironmentInfo(api, count) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n const {\n EnvironmentInfo\n } = await beanstalk.retrieveEnvironmentInfo({\n EnvironmentName: environment,\n InfoType: 'tail'\n }).promise();\n\n if (EnvironmentInfo.length > 0) {\n return EnvironmentInfo;\n } else if (count > 5) {\n throw new Error('No logs');\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n // The logs aren't always available, so retry until they are\n // Another option is to look for the event that says it is ready\n retrieveEnvironmentInfo(api, count + 1)\n .then(resolve)\n .catch(reject);\n }, getRecheckInterval());\n });\n}\n\nexport async function getLogs(api, logNames) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n await waitForEnvReady(config, false);\n\n logStep('=> Requesting Logs');\n\n await beanstalk.requestEnvironmentInfo({\n EnvironmentName: environment,\n InfoType: 'tail'\n }).promise();\n\n const EnvironmentInfo = await retrieveEnvironmentInfo(api, 0);\n\n logStep('=> Downloading Logs');\n\n const logsForServer = EnvironmentInfo.reduce((result, info) => {\n result[info.Ec2InstanceId] = info.Message;\n\n return result;\n }, {});\n\n return Promise.all(Object.keys(logsForServer).map(key =>\n new Promise((resolve, reject) => {\n axios.get(logsForServer[key]).then(({ data }) => {\n // The separator changed with Amazon Linux 2\n let parts = data.split('----------------------------------------\\n/var/log/');\n if (parts.length === 1) {\n parts = data.split('-------------------------------------\\n/var/log/');\n }\n\n data = logNames.map(name =>\n parts.find(part => part.trim().startsWith(name)));\n\n resolve({\n data,\n instance: key\n });\n }).catch(reject);\n })));\n}\n\nexport function getNodeVersion(api, bundlePath) {\n let star = fs.readFileSync(api.resolvePath(bundlePath, 'bundle/star.json')).toString();\n const nodeVersionTxt = fs.readFileSync(api.resolvePath(bundlePath, 'bundle/.node_version.txt')).toString();\n\n star = JSON.parse(star);\n\n if (star.npmVersion) {\n return {\n nodeVersion: star.nodeVersion,\n npmVersion: star.npmVersion\n };\n }\n\n const nodeVersion = nodeVersionTxt.substr(1);\n\n if (nodeVersion.startsWith('4')) {\n return {\n nodeVersion,\n npmVersion: '4.6.1'\n };\n }\n\n return {\n nodeVersion,\n npmVersion: '3.10.5'\n };\n}\n\nexport async function selectPlatformArn() {\n const {\n PlatformBranchSummaryList\n } = await beanstalk.listPlatformBranches({\n Filters: [\n // {\n // Attribute: 'LifecycleState',\n // Operator: '=',\n // Values: ['supported']\n // },\n {\n Attribute: 'PlatformName',\n Operator: '=',\n Values: ['Node.js']\n }, {\n Attribute: 'TierType',\n Operator: '=',\n Values: ['WebServer/Standard']\n }, {\n Attribute: 'BranchName',\n Operator: 'begins_with',\n Values: ['Node.js 14']\n }]\n }).promise();\n\n if (PlatformBranchSummaryList.length === 0) {\n throw new Error('Unable to find supported Node.js platform');\n }\n\n const branchName = PlatformBranchSummaryList[0].BranchName;\n console.log('---->', branchName);\n\n const {\n PlatformSummaryList\n } = await beanstalk.listPlatformVersions({\n Filters: [\n {\n Type: 'PlatformBranchName',\n Operator: '=',\n Values: [branchName]\n },\n {\n Type: 'PlatformStatus',\n Operator: '=',\n Values: ['Ready']\n }\n ]\n }).promise();\n\n const arn = PlatformSummaryList[0].PlatformArn;\n console.log('---->', arn);\n\n return arn;\n}\n\nexport async function attachPolicies(config, roleName, policies) {\n const promises = [];\n\n policies.forEach((policy) => {\n const promise = iam.attachRolePolicy({\n RoleName: roleName,\n PolicyArn: policy\n }).promise();\n\n promises.push(promise);\n });\n\n await Promise.all(promises);\n}\n\nexport function getAccountId() {\n return sts.getCallerIdentity()\n .promise()\n .then(({ Account }) => Account);\n}\n\nexport async function ensureRoleExists(name, assumeRolePolicyDocument, ensureAssumeRolePolicy) {\n let exists = true;\n let updateAssumeRolePolicy = false;\n\n try {\n const { Role } = await iam.getRole({\n RoleName: name\n }).promise();\n\n\n const currentAssumeRolePolicy = decodeURIComponent(Role.AssumeRolePolicyDocument);\n // Make the whitespace consistent with the current document\n assumeRolePolicyDocument = JSON.stringify(JSON.parse(assumeRolePolicyDocument));\n\n if (currentAssumeRolePolicy !== assumeRolePolicyDocument && ensureAssumeRolePolicy) {\n updateAssumeRolePolicy = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await iam.createRole({\n RoleName: name,\n AssumeRolePolicyDocument: assumeRolePolicyDocument\n }).promise();\n } else if (updateAssumeRolePolicy) {\n await iam.updateAssumeRolePolicy({\n RoleName: name,\n PolicyDocument: assumeRolePolicyDocument\n }).promise();\n }\n}\n\nexport async function ensureInstanceProfileExists(config, name) {\n let exists = true;\n\n try {\n await iam.getInstanceProfile({\n InstanceProfileName: name\n }).promise();\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await iam.createInstanceProfile({\n InstanceProfileName: name\n }).promise();\n }\n}\n\nexport async function ensureRoleAdded(config, instanceProfile, role) {\n let added = true;\n\n\n const {\n InstanceProfile\n } = await iam.getInstanceProfile({\n InstanceProfileName: instanceProfile\n }).promise();\n\n if (InstanceProfile.Roles.length === 0 || InstanceProfile.Roles[0].RoleName !== role) {\n added = false;\n }\n\n if (!added) {\n await iam.addRoleToInstanceProfile({\n InstanceProfileName: instanceProfile,\n RoleName: role\n }).promise();\n }\n}\n\nexport async function ensurePoliciesAttached(config, role, policies) {\n let {\n AttachedPolicies\n } = await iam.listAttachedRolePolicies({\n RoleName: role\n }).promise();\n\n AttachedPolicies = AttachedPolicies.map(policy => policy.PolicyArn);\n\n const unattachedPolicies = policies.reduce((result, policy) => {\n if (AttachedPolicies.indexOf(policy) === -1) {\n result.push(policy);\n }\n\n return result;\n }, []);\n\n if (unattachedPolicies.length > 0) {\n await attachPolicies(config, role, unattachedPolicies);\n }\n}\n\nexport async function ensureInlinePolicyAttached(role, policyName, policyDocument) {\n let exists = true;\n let needsUpdating = false;\n\n try {\n const result = await iam.getRolePolicy({\n RoleName: role,\n PolicyName: policyName\n }).promise();\n const currentPolicyDocument = decodeURIComponent(result.PolicyDocument);\n\n if (currentPolicyDocument !== policyDocument) {\n needsUpdating = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists || needsUpdating) {\n await iam.putRolePolicy({\n RoleName: role,\n PolicyName: policyName,\n PolicyDocument: policyDocument\n }).promise();\n }\n}\n\nexport async function ensureBucketExists(buckets, bucketName, region) {\n if (!buckets.find(bucket => bucket.Name === bucketName)) {\n await s3.createBucket({\n Bucket: bucketName,\n ...(region ? {\n CreateBucketConfiguration: {\n LocationConstraint: region\n }\n } : {})\n }).promise();\n\n return true;\n }\n}\n\nexport function findBucketWithPrefix(buckets, prefix) {\n return buckets.find(bucket => bucket.Name.indexOf(prefix) === 0);\n}\n\nexport async function ensureBucketPolicyAttached(bucketName, policy) {\n let error = false;\n let currentPolicy;\n\n try {\n const { Policy } = await s3.getBucketPolicy({ Bucket: bucketName }).promise();\n currentPolicy = Policy;\n } catch (e) {\n error = true;\n }\n\n if (error || currentPolicy !== policy) {\n const params = {\n Bucket: bucketName,\n Policy: policy\n };\n\n await s3.putBucketPolicy(params).promise();\n }\n}\n\nexport async function ensureCloudWatchRule(name, description, eventPattern) {\n let error = false;\n\n try {\n await cloudWatchEvents.describeRule({ Name: name }).promise();\n } catch (e) {\n error = true;\n }\n\n if (error) {\n await cloudWatchEvents.putRule({\n Name: name,\n Description: description,\n EventPattern: eventPattern\n }).promise();\n\n return true;\n }\n\n return false;\n}\n\nexport async function ensureRuleTargetExists(ruleName, target) {\n const {\n Targets\n } = await cloudWatchEvents.listTargetsByRule({\n Rule: ruleName\n }).promise();\n\n if (!Targets.find(_target => isEqual(_target, target))) {\n const params = {\n Rule: ruleName,\n Targets: [target]\n };\n await cloudWatchEvents.putTargets(params).promise();\n\n return true;\n }\n}\n\nexport function coloredStatusText(envColor, text) {\n if (envColor === 'Green') {\n return chalk.green(text);\n } else if (envColor === 'Yellow') {\n return chalk.yellow(text);\n } else if (envColor === 'Red') {\n return chalk.red(text);\n }\n return text;\n}\n\nexport function createVersionDescription(api, appConfig) {\n const appPath = api.resolvePath(api.getBasePath(), appConfig.path);\n let description = '';\n\n try {\n description = execSync('git log -1 --pretty=%B', {\n cwd: appPath,\n stdio: 'pipe'\n }).toString();\n } catch (e) {\n description = `Deployed by Mup on ${new Date().toUTCString()}`;\n }\n return description.split('\\n')[0].slice(0, 195);\n}\n\nexport async function ensureSsmDocument(name, content) {\n let exists = true;\n let needsUpdating = false;\n\n try {\n const result = await ssm.getDocument({ Name: name, DocumentVersion: '$DEFAULT' }).promise();\n // If the document was created or edited on the AWS console, there is extra new\n // line characters and whitespace\n const currentContent = JSON.stringify(JSON.parse(result.Content.replace(/\\r?\\n|\\r/g, '')));\n if (currentContent !== content) {\n needsUpdating = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await ssm.createDocument({\n Content: content,\n Name: name,\n DocumentType: 'Automation'\n }).promise();\n\n return true;\n } else if (needsUpdating) {\n try {\n await ssm.updateDocument({\n Content: content,\n Name: name,\n DocumentVersion: '$LATEST'\n }).promise();\n } catch (e) {\n // If the latest document version has the correct content\n // then it must not be the default version. Ignore the error\n // so we can fix the default version\n if (e.code !== 'DuplicateDocumentContent') {\n throw e;\n }\n }\n\n const result = await ssm.getDocument({ Name: name, DocumentVersion: '$LATEST' }).promise();\n await ssm.updateDocumentDefaultVersion({\n DocumentVersion: result.DocumentVersion,\n Name: name\n }).promise();\n }\n}\n\nexport async function pickInstance(config, instance) {\n const {\n environment\n } = names(config);\n\n const { EnvironmentResources } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n const instanceIds = EnvironmentResources.Instances.map(({ Id }) => Id);\n const description = [\n 'Available instances',\n ...instanceIds.map(id => ` - ${id}`)\n ].join('\\n');\n\n return {\n selected: instanceIds.includes(instance) ? instance : null,\n description\n };\n}\n\nexport async function connectToInstance(api, instanceId, commandLabel) {\n const {\n sshKey\n } = api.getConfig().app;\n\n if (!sshKey) {\n const error = new Error('missing sshKey config');\n error.solution = 'Learn how to configure sshKey at https://github.com/zodern/mup-aws-beanstalk/blob/master/docs/index.md#meteor-shell-and-debug';\n\n throw error;\n }\n\n const { Reservations } = await ec2.describeInstances({\n InstanceIds: [\n instanceId\n ]\n }).promise();\n\n const instance = Reservations[0].Instances[0];\n const availabilityZone = instance.Placement.AvailabilityZone;\n const securityGroups = instance.SecurityGroups.map(g => g.GroupId);\n\n let { data: ipAddress } = await axios.get('https://ipv4.icanhazip.com');\n ipAddress = ipAddress.trim();\n\n if (securityGroups.length > 1) {\n console.warn('Instance has more than one security group. Please open a GitHub issue for mup-aws-beanstalk');\n }\n\n let ruleIds = [];\n\n try {\n const { SecurityGroupRules } = await ec2.authorizeSecurityGroupIngress({\n GroupId: securityGroups[0],\n IpPermissions: [\n {\n FromPort: 22,\n IpProtocol: 'tcp',\n IpRanges: [\n {\n CidrIp: `${ipAddress}/32`,\n Description: `Temporary SSH access for ${commandLabel}`\n }\n ],\n ToPort: 22\n }\n ]\n }).promise();\n\n ruleIds = SecurityGroupRules.map(rule => rule.SecurityGroupRuleId);\n } catch (e) {\n if (e.code === 'InvalidPermission.Duplicate') {\n // This rule already exists\n // TODO: should we find the rule id so we can remove it, or leave it in\n // case the user had manually added this rule?\n } else {\n throw e;\n }\n }\n\n await ec2InstanceConnect.sendSSHPublicKey({\n InstanceId: instanceId,\n AvailabilityZone: availabilityZone,\n InstanceOSUser: 'ec2-user',\n SSHPublicKey: fs.readFileSync(api.resolvePath(sshKey.publicKey), 'utf-8')\n }).promise();\n\n const sshOptions = {\n host: instance.PublicDnsName,\n port: 22,\n username: 'ec2-user',\n privateKey: fs.readFileSync(api.resolvePath(sshKey.privateKey), 'utf-8')\n };\n\n return {\n sshOptions,\n removeSSHAccess() {\n if (ruleIds.length === 0) {\n return;\n }\n\n console.log('Removing temporary security group rule for SSH');\n return ec2.revokeSecurityGroupIngress({\n GroupId: securityGroups[0],\n SecurityGroupRuleIds: ruleIds\n }).promise();\n }\n };\n}\n\nexport async function executeSSHCommand(conn, command) {\n return new Promise((resolve, reject) => {\n conn.exec(command, (err, outputStream) => {\n if (err) {\n conn.end();\n reject(err);\n\n return;\n }\n\n let output = '';\n\n outputStream.on('data', (data) => {\n output += data;\n });\n\n outputStream.stderr.on('data', (data) => {\n output += data;\n });\n\n outputStream.once('close', (code) => {\n conn.end();\n resolve({ code, output });\n });\n });\n });\n}\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["logStep","message","console","log","chalk","blue","shouldRebuild","bundlePath","useCachedBuild","fs","existsSync","tmpBuildPath","appPath","api","rand","random","create","uuidNumbers","i","push","resolvePath","os","tmpdir","uuid","v4","names","config","name","app","toLowerCase","bucket","environment","envName","bundlePrefix","instanceProfile","serviceRole","trailBucketPrefix","trailName","deregisterRuleName","eventTargetRole","eventTargetPolicyName","eventTargetPassRoleName","automationDocument","createUniqueName","prefix","randomNumbers","Math","floor","Date","now","retrieveEnvironmentInfo","count","getConfig","EnvironmentInfo","beanstalk","EnvironmentName","InfoType","promise","length","Error","Promise","resolve","reject","setTimeout","then","catch","getLogs","logNames","requestEnvironmentInfo","logsForServer","reduce","result","info","Ec2InstanceId","Message","all","Object","keys","map","key","axios","get","data","parts","split","find","part","trim","startsWith","instance","getNodeVersion","star","readFileSync","toString","nodeVersionTxt","JSON","parse","npmVersion","nodeVersion","substr","selectPlatformArn","awsPlatformBranchName","PlatformBranchSummaryList","listPlatformBranches","Filters","Attribute","Operator","Values","branchName","BranchName","PlatformSummaryList","listPlatformVersions","Type","arn","PlatformArn","attachPolicies","roleName","policies","promises","forEach","policy","iam","attachRolePolicy","RoleName","PolicyArn","getAccountId","sts","getCallerIdentity","Account","ensureRoleExists","assumeRolePolicyDocument","ensureAssumeRolePolicy","exists","updateAssumeRolePolicy","Role","getRole","currentAssumeRolePolicy","decodeURIComponent","AssumeRolePolicyDocument","stringify","e","createRole","PolicyDocument","ensureInstanceProfileExists","getInstanceProfile","InstanceProfileName","createInstanceProfile","ensureRoleAdded","role","added","InstanceProfile","Roles","addRoleToInstanceProfile","ensurePoliciesAttached","AttachedPolicies","listAttachedRolePolicies","unattachedPolicies","indexOf","ensureInlinePolicyAttached","policyName","policyDocument","needsUpdating","getRolePolicy","PolicyName","currentPolicyDocument","putRolePolicy","ensureBucketExists","buckets","bucketName","region","Name","s3","createBucket","Bucket","CreateBucketConfiguration","LocationConstraint","findBucketWithPrefix","ensureBucketPolicyAttached","error","currentPolicy","Policy","getBucketPolicy","params","putBucketPolicy","ensureCloudWatchRule","description","eventPattern","cloudWatchEvents","describeRule","putRule","Description","EventPattern","ensureRuleTargetExists","ruleName","target","Targets","listTargetsByRule","Rule","_target","putTargets","coloredStatusText","envColor","text","green","yellow","red","createVersionDescription","appConfig","getBasePath","path","cwd","stdio","toUTCString","slice","ensureSsmDocument","content","ssm","getDocument","DocumentVersion","currentContent","Content","replace","createDocument","DocumentType","updateDocument","code","updateDocumentDefaultVersion","pickInstance","EnvironmentResources","describeEnvironmentResources","instanceIds","Instances","Id","id","join","selected","includes","connectToInstance","instanceId","commandLabel","sshKey","solution","Reservations","ec2","describeInstances","InstanceIds","availabilityZone","Placement","AvailabilityZone","securityGroups","SecurityGroups","g","GroupId","ipAddress","warn","ruleIds","SecurityGroupRules","authorizeSecurityGroupIngress","IpPermissions","FromPort","IpProtocol","IpRanges","CidrIp","ToPort","rule","SecurityGroupRuleId","ec2InstanceConnect","sendSSHPublicKey","InstanceId","InstanceOSUser","SSHPublicKey","publicKey","sshOptions","host","PublicDnsName","port","username","privateKey","removeSSHAccess","revokeSecurityGroupIngress","SecurityGroupRuleIds","executeSSHCommand","conn","command","exec","err","outputStream","end","output","on","stderr","once"],"mappings":"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","sourcesContent":["import axios from 'axios';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { isEqual } from 'lodash';\nimport os from 'os';\nimport random from 'random-seed';\nimport uuid from 'uuid';\nimport { execSync } from 'child_process';\nimport { beanstalk, cloudWatchEvents, iam, s3, sts, ssm, ec2, ec2InstanceConnect } from './aws';\nimport { getRecheckInterval } from './recheck';\nimport { waitForEnvReady } from './env-ready';\n\nexport function logStep(message) {\n console.log(chalk.blue(message));\n}\n\nexport function shouldRebuild(bundlePath, useCachedBuild) {\n if (fs.existsSync(bundlePath) && useCachedBuild) {\n return false;\n }\n\n return true;\n}\n\nexport function tmpBuildPath(appPath, api) {\n const rand = random.create(appPath);\n const uuidNumbers = [];\n\n for (let i = 0; i < 16; i++) {\n uuidNumbers.push(rand(255));\n }\n\n return api.resolvePath(\n os.tmpdir(),\n `mup-meteor-${uuid.v4({ random: uuidNumbers })}`\n );\n}\n\nexport function names(config) {\n const name = config.app.name.toLowerCase();\n\n return {\n bucket: `mup-${name}`,\n environment: config.app.envName || `mup-env-${name}`,\n app: `mup-${name}`,\n bundlePrefix: `mup/bundles/${name}/`,\n instanceProfile: 'aws-elasticbeanstalk-ec2-role',\n serviceRole: 'aws-elasticbeanstalk-service-role',\n trailBucketPrefix: 'mup-graceful-shutdown-trail',\n trailName: 'mup-graceful-shutdown-trail',\n deregisterRuleName: 'mup-target-deregister',\n eventTargetRole: `mup-envoke-run-command-${name}`,\n eventTargetPolicyName: 'Invoke_Run_Command',\n eventTargetPassRoleName: 'Pass_Role',\n automationDocument: 'mup-graceful-shutdown'\n };\n}\n\nexport function createUniqueName(prefix = '') {\n const randomNumbers = Math.floor(Math.random() * 10000);\n\n return `${prefix}-${Date.now()}-${randomNumbers}`;\n}\n\nasync function retrieveEnvironmentInfo(api, count) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n const {\n EnvironmentInfo\n } = await beanstalk.retrieveEnvironmentInfo({\n EnvironmentName: environment,\n InfoType: 'tail'\n }).promise();\n\n if (EnvironmentInfo.length > 0) {\n return EnvironmentInfo;\n } else if (count > 5) {\n throw new Error('No logs');\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n // The logs aren't always available, so retry until they are\n // Another option is to look for the event that says it is ready\n retrieveEnvironmentInfo(api, count + 1)\n .then(resolve)\n .catch(reject);\n }, getRecheckInterval());\n });\n}\n\nexport async function getLogs(api, logNames) {\n const config = api.getConfig();\n const {\n environment\n } = names(config);\n\n await waitForEnvReady(config, false);\n\n logStep('=> Requesting Logs');\n\n await beanstalk.requestEnvironmentInfo({\n EnvironmentName: environment,\n InfoType: 'tail'\n }).promise();\n\n const EnvironmentInfo = await retrieveEnvironmentInfo(api, 0);\n\n logStep('=> Downloading Logs');\n\n const logsForServer = EnvironmentInfo.reduce((result, info) => {\n result[info.Ec2InstanceId] = info.Message;\n\n return result;\n }, {});\n\n return Promise.all(Object.keys(logsForServer).map(key =>\n new Promise((resolve, reject) => {\n axios.get(logsForServer[key]).then(({ data }) => {\n // The separator changed with Amazon Linux 2\n let parts = data.split('----------------------------------------\\n/var/log/');\n if (parts.length === 1) {\n parts = data.split('-------------------------------------\\n/var/log/');\n }\n\n data = logNames.map(name =>\n parts.find(part => part.trim().startsWith(name)));\n\n resolve({\n data,\n instance: key\n });\n }).catch(reject);\n })));\n}\n\nexport function getNodeVersion(api, bundlePath) {\n let star = fs.readFileSync(api.resolvePath(bundlePath, 'bundle/star.json')).toString();\n const nodeVersionTxt = fs.readFileSync(api.resolvePath(bundlePath, 'bundle/.node_version.txt')).toString();\n\n star = JSON.parse(star);\n\n if (star.npmVersion) {\n return {\n nodeVersion: star.nodeVersion,\n npmVersion: star.npmVersion\n };\n }\n\n const nodeVersion = nodeVersionTxt.substr(1);\n\n if (nodeVersion.startsWith('4')) {\n return {\n nodeVersion,\n npmVersion: '4.6.1'\n };\n }\n\n return {\n nodeVersion,\n npmVersion: '3.10.5'\n };\n}\n\nexport async function selectPlatformArn(awsPlatformBranchName) {\n console.log('----> Amazon BranchName:', awsPlatformBranchName);\n\n const {\n PlatformBranchSummaryList\n } = await beanstalk.listPlatformBranches({\n Filters: [\n {\n Attribute: 'PlatformName',\n Operator: '=',\n Values: ['Node.js']\n }, {\n Attribute: 'TierType',\n Operator: '=',\n Values: ['WebServer/Standard']\n }, {\n Attribute: 'BranchName',\n Operator: 'begins_with',\n Values: [awsPlatformBranchName]\n }]\n }).promise();\n\n if (PlatformBranchSummaryList.length === 0) {\n throw new Error('Unable to find supported Node.js platform');\n }\n\n const branchName = PlatformBranchSummaryList[0].BranchName;\n console.log('----> Amazon Platform:', branchName);\n\n const {\n PlatformSummaryList\n } = await beanstalk.listPlatformVersions({\n Filters: [\n {\n Type: 'PlatformBranchName',\n Operator: '=',\n Values: [branchName]\n },\n {\n Type: 'PlatformStatus',\n Operator: '=',\n Values: ['Ready']\n }\n ]\n }).promise();\n\n const arn = PlatformSummaryList[0].PlatformArn;\n console.log('----> Amazon ARN:', arn);\n\n return arn;\n}\n\nexport async function attachPolicies(config, roleName, policies) {\n const promises = [];\n\n policies.forEach((policy) => {\n const promise = iam.attachRolePolicy({\n RoleName: roleName,\n PolicyArn: policy\n }).promise();\n\n promises.push(promise);\n });\n\n await Promise.all(promises);\n}\n\nexport function getAccountId() {\n return sts.getCallerIdentity()\n .promise()\n .then(({ Account }) => Account);\n}\n\nexport async function ensureRoleExists(name, assumeRolePolicyDocument, ensureAssumeRolePolicy) {\n let exists = true;\n let updateAssumeRolePolicy = false;\n\n try {\n const { Role } = await iam.getRole({\n RoleName: name\n }).promise();\n\n\n const currentAssumeRolePolicy = decodeURIComponent(Role.AssumeRolePolicyDocument);\n // Make the whitespace consistent with the current document\n assumeRolePolicyDocument = JSON.stringify(JSON.parse(assumeRolePolicyDocument));\n\n if (currentAssumeRolePolicy !== assumeRolePolicyDocument && ensureAssumeRolePolicy) {\n updateAssumeRolePolicy = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await iam.createRole({\n RoleName: name,\n AssumeRolePolicyDocument: assumeRolePolicyDocument\n }).promise();\n } else if (updateAssumeRolePolicy) {\n await iam.updateAssumeRolePolicy({\n RoleName: name,\n PolicyDocument: assumeRolePolicyDocument\n }).promise();\n }\n}\n\nexport async function ensureInstanceProfileExists(config, name) {\n let exists = true;\n\n try {\n await iam.getInstanceProfile({\n InstanceProfileName: name\n }).promise();\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await iam.createInstanceProfile({\n InstanceProfileName: name\n }).promise();\n }\n}\n\nexport async function ensureRoleAdded(config, instanceProfile, role) {\n let added = true;\n\n\n const {\n InstanceProfile\n } = await iam.getInstanceProfile({\n InstanceProfileName: instanceProfile\n }).promise();\n\n if (InstanceProfile.Roles.length === 0 || InstanceProfile.Roles[0].RoleName !== role) {\n added = false;\n }\n\n if (!added) {\n await iam.addRoleToInstanceProfile({\n InstanceProfileName: instanceProfile,\n RoleName: role\n }).promise();\n }\n}\n\nexport async function ensurePoliciesAttached(config, role, policies) {\n let {\n AttachedPolicies\n } = await iam.listAttachedRolePolicies({\n RoleName: role\n }).promise();\n\n AttachedPolicies = AttachedPolicies.map(policy => policy.PolicyArn);\n\n const unattachedPolicies = policies.reduce((result, policy) => {\n if (AttachedPolicies.indexOf(policy) === -1) {\n result.push(policy);\n }\n\n return result;\n }, []);\n\n if (unattachedPolicies.length > 0) {\n await attachPolicies(config, role, unattachedPolicies);\n }\n}\n\nexport async function ensureInlinePolicyAttached(role, policyName, policyDocument) {\n let exists = true;\n let needsUpdating = false;\n\n try {\n const result = await iam.getRolePolicy({\n RoleName: role,\n PolicyName: policyName\n }).promise();\n const currentPolicyDocument = decodeURIComponent(result.PolicyDocument);\n\n if (currentPolicyDocument !== policyDocument) {\n needsUpdating = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists || needsUpdating) {\n await iam.putRolePolicy({\n RoleName: role,\n PolicyName: policyName,\n PolicyDocument: policyDocument\n }).promise();\n }\n}\n\nexport async function ensureBucketExists(buckets, bucketName, region) {\n if (!buckets.find(bucket => bucket.Name === bucketName)) {\n await s3.createBucket({\n Bucket: bucketName,\n ...(region ? {\n CreateBucketConfiguration: {\n LocationConstraint: region\n }\n } : {})\n }).promise();\n\n return true;\n }\n}\n\nexport function findBucketWithPrefix(buckets, prefix) {\n return buckets.find(bucket => bucket.Name.indexOf(prefix) === 0);\n}\n\nexport async function ensureBucketPolicyAttached(bucketName, policy) {\n let error = false;\n let currentPolicy;\n\n try {\n const { Policy } = await s3.getBucketPolicy({ Bucket: bucketName }).promise();\n currentPolicy = Policy;\n } catch (e) {\n error = true;\n }\n\n if (error || currentPolicy !== policy) {\n const params = {\n Bucket: bucketName,\n Policy: policy\n };\n\n await s3.putBucketPolicy(params).promise();\n }\n}\n\nexport async function ensureCloudWatchRule(name, description, eventPattern) {\n let error = false;\n\n try {\n await cloudWatchEvents.describeRule({ Name: name }).promise();\n } catch (e) {\n error = true;\n }\n\n if (error) {\n await cloudWatchEvents.putRule({\n Name: name,\n Description: description,\n EventPattern: eventPattern\n }).promise();\n\n return true;\n }\n\n return false;\n}\n\nexport async function ensureRuleTargetExists(ruleName, target) {\n const {\n Targets\n } = await cloudWatchEvents.listTargetsByRule({\n Rule: ruleName\n }).promise();\n\n if (!Targets.find(_target => isEqual(_target, target))) {\n const params = {\n Rule: ruleName,\n Targets: [target]\n };\n await cloudWatchEvents.putTargets(params).promise();\n\n return true;\n }\n}\n\nexport function coloredStatusText(envColor, text) {\n if (envColor === 'Green') {\n return chalk.green(text);\n } else if (envColor === 'Yellow') {\n return chalk.yellow(text);\n } else if (envColor === 'Red') {\n return chalk.red(text);\n }\n return text;\n}\n\nexport function createVersionDescription(api, appConfig) {\n const appPath = api.resolvePath(api.getBasePath(), appConfig.path);\n let description = '';\n\n try {\n description = execSync('git log -1 --pretty=%B', {\n cwd: appPath,\n stdio: 'pipe'\n }).toString();\n } catch (e) {\n description = `Deployed by Mup on ${new Date().toUTCString()}`;\n }\n return description.split('\\n')[0].slice(0, 195);\n}\n\nexport async function ensureSsmDocument(name, content) {\n let exists = true;\n let needsUpdating = false;\n\n try {\n const result = await ssm.getDocument({ Name: name, DocumentVersion: '$DEFAULT' }).promise();\n // If the document was created or edited on the AWS console, there is extra new\n // line characters and whitespace\n const currentContent = JSON.stringify(JSON.parse(result.Content.replace(/\\r?\\n|\\r/g, '')));\n if (currentContent !== content) {\n needsUpdating = true;\n }\n } catch (e) {\n exists = false;\n }\n\n if (!exists) {\n await ssm.createDocument({\n Content: content,\n Name: name,\n DocumentType: 'Automation'\n }).promise();\n\n return true;\n } else if (needsUpdating) {\n try {\n await ssm.updateDocument({\n Content: content,\n Name: name,\n DocumentVersion: '$LATEST'\n }).promise();\n } catch (e) {\n // If the latest document version has the correct content\n // then it must not be the default version. Ignore the error\n // so we can fix the default version\n if (e.code !== 'DuplicateDocumentContent') {\n throw e;\n }\n }\n\n const result = await ssm.getDocument({ Name: name, DocumentVersion: '$LATEST' }).promise();\n await ssm.updateDocumentDefaultVersion({\n DocumentVersion: result.DocumentVersion,\n Name: name\n }).promise();\n }\n}\n\nexport async function pickInstance(config, instance) {\n const {\n environment\n } = names(config);\n\n const { EnvironmentResources } = await beanstalk.describeEnvironmentResources({\n EnvironmentName: environment\n }).promise();\n const instanceIds = EnvironmentResources.Instances.map(({ Id }) => Id);\n const description = [\n 'Available instances',\n ...instanceIds.map(id => ` - ${id}`)\n ].join('\\n');\n\n return {\n selected: instanceIds.includes(instance) ? instance : null,\n description\n };\n}\n\nexport async function connectToInstance(api, instanceId, commandLabel) {\n const {\n sshKey\n } = api.getConfig().app;\n\n if (!sshKey) {\n const error = new Error('missing sshKey config');\n error.solution = 'Learn how to configure sshKey at https://github.com/zodern/mup-aws-beanstalk/blob/master/docs/index.md#meteor-shell-and-debug';\n\n throw error;\n }\n\n const { Reservations } = await ec2.describeInstances({\n InstanceIds: [\n instanceId\n ]\n }).promise();\n\n const instance = Reservations[0].Instances[0];\n const availabilityZone = instance.Placement.AvailabilityZone;\n const securityGroups = instance.SecurityGroups.map(g => g.GroupId);\n\n let { data: ipAddress } = await axios.get('https://ipv4.icanhazip.com');\n ipAddress = ipAddress.trim();\n\n if (securityGroups.length > 1) {\n console.warn('Instance has more than one security group. Please open a GitHub issue for mup-aws-beanstalk');\n }\n\n let ruleIds = [];\n\n try {\n const { SecurityGroupRules } = await ec2.authorizeSecurityGroupIngress({\n GroupId: securityGroups[0],\n IpPermissions: [\n {\n FromPort: 22,\n IpProtocol: 'tcp',\n IpRanges: [\n {\n CidrIp: `${ipAddress}/32`,\n Description: `Temporary SSH access for ${commandLabel}`\n }\n ],\n ToPort: 22\n }\n ]\n }).promise();\n\n ruleIds = SecurityGroupRules.map(rule => rule.SecurityGroupRuleId);\n } catch (e) {\n if (e.code === 'InvalidPermission.Duplicate') {\n // This rule already exists\n // TODO: should we find the rule id so we can remove it, or leave it in\n // case the user had manually added this rule?\n } else {\n throw e;\n }\n }\n\n await ec2InstanceConnect.sendSSHPublicKey({\n InstanceId: instanceId,\n AvailabilityZone: availabilityZone,\n InstanceOSUser: 'ec2-user',\n SSHPublicKey: fs.readFileSync(api.resolvePath(sshKey.publicKey), 'utf-8')\n }).promise();\n\n const sshOptions = {\n host: instance.PublicDnsName,\n port: 22,\n username: 'ec2-user',\n privateKey: fs.readFileSync(api.resolvePath(sshKey.privateKey), 'utf-8')\n };\n\n return {\n sshOptions,\n removeSSHAccess() {\n if (ruleIds.length === 0) {\n return;\n }\n\n console.log('Removing temporary security group rule for SSH');\n return ec2.revokeSecurityGroupIngress({\n GroupId: securityGroups[0],\n SecurityGroupRuleIds: ruleIds\n }).promise();\n }\n };\n}\n\nexport async function executeSSHCommand(conn, command) {\n return new Promise((resolve, reject) => {\n conn.exec(command, (err, outputStream) => {\n if (err) {\n conn.end();\n reject(err);\n\n return;\n }\n\n let output = '';\n\n outputStream.on('data', (data) => {\n output += data;\n });\n\n outputStream.stderr.on('data', (data) => {\n output += data;\n });\n\n outputStream.once('close', (code) => {\n conn.end();\n resolve({ code, output });\n });\n });\n });\n}\n"],"file":"utils.js"}
|
package/lib/validate.js
CHANGED
|
@@ -48,7 +48,8 @@ const schema = _joi.default.object().keys({
|
|
|
48
48
|
sshKey: {
|
|
49
49
|
privateKey: _joi.default.string().required(),
|
|
50
50
|
publicKey: _joi.default.string().required()
|
|
51
|
-
}
|
|
51
|
+
},
|
|
52
|
+
awsPlatformBranchName: _joi.default.string().min(1).required()
|
|
52
53
|
});
|
|
53
54
|
|
|
54
55
|
function _default(config, utils) {
|
package/lib/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/validate.js"],"names":["schema","joi","object","keys","name","string","min","required","path","type","envName","buildOptions","serverOnly","bool","debug","buildLocation","mobileSettings","server","uri","allowIncompatibleUpdates","boolean","executable","docker","env","auth","id","secret","sslDomains","array","items","forceSSL","region","minInstances","number","maxInstances","instanceType","gracefulShutdown","longEnvVars","yumPackages","pattern","allow","oldVersions","customBeanstalkConfig","namespace","trim","option","value","sshKey","privateKey","publicKey","config","utils","details","combineErrorDetails","validate","app","VALIDATE_OPTIONS","length","push","message","addLocation"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,MAAM,GAAGC,aAAIC,MAAJ,GAAaC,IAAb,CAAkB;AAC/BC,EAAAA,IAAI,EAAEH,aAAII,MAAJ,GAAaC,GAAb,CAAiB,CAAjB,EAAoBC,QAApB,EADyB;AAE/BC,EAAAA,IAAI,EAAEP,aAAII,MAAJ,GAAaC,GAAb,CAAiB,CAAjB,EAAoBC,QAApB,EAFyB;AAG/BE,EAAAA,IAAI,EAAER,aAAII,MAAJ,GAAaE,QAAb,EAHyB;AAI/BG,EAAAA,OAAO,EAAET,aAAII,MAAJ,GAAaC,GAAb,CAAiB,CAAjB,CAJsB;AAK/BK,EAAAA,YAAY,EAAEV,aAAIC,MAAJ,GAAaC,IAAb,CAAkB;AAC9BS,IAAAA,UAAU,EAAEX,aAAIY,IAAJ,EADkB;AAE9BC,IAAAA,KAAK,EAAEb,aAAIY,IAAJ,EAFuB;AAG9BE,IAAAA,aAAa,EAAEd,aAAII,MAAJ,EAHe;AAI9BW,IAAAA,cAAc,EAAEf,aAAIC,MAAJ,EAJc;AAK9Be,IAAAA,MAAM,EAAEhB,aAAII,MAAJ,GAAaa,GAAb,EALsB;AAM9BC,IAAAA,wBAAwB,EAAElB,aAAImB,OAAJ,EANI;AAO9BC,IAAAA,UAAU,EAAEpB,aAAII,MAAJ;AAPkB,GAAlB,CALiB;AAc/B;AACAiB,EAAAA,MAAM,EAAErB,aAAIC,MAAJ,EAfuB;AAgB/BqB,EAAAA,GAAG,EAAEtB,aAAIC,MAAJ,EAhB0B;AAiB/BsB,EAAAA,IAAI,EAAEvB,aAAIC,MAAJ,GAAaC,IAAb,CAAkB;AACtBsB,IAAAA,EAAE,EAAExB,aAAII,MAAJ,GAAaE,QAAb,EADkB;AAEtBmB,IAAAA,MAAM,EAAEzB,aAAII,MAAJ,GAAaE,QAAb;AAFc,GAAlB,EAGHA,QAHG,EAjByB;AAqB/BoB,EAAAA,UAAU,EAAE1B,aAAI2B,KAAJ,GAAYC,KAAZ,CAAkB5B,aAAII,MAAJ,EAAlB,CArBmB;AAsB/ByB,EAAAA,QAAQ,EAAE7B,aAAIY,IAAJ,EAtBqB;AAuB/BkB,EAAAA,MAAM,EAAE9B,aAAII,MAAJ,EAvBuB;AAwB/B2B,EAAAA,YAAY,EAAE/B,aAAIgC,MAAJ,GAAa3B,GAAb,CAAiB,CAAjB,EAAoBC,QAApB,EAxBiB;AAyB/B2B,EAAAA,YAAY,EAAEjC,aAAIgC,MAAJ,GAAa3B,GAAb,CAAiB,CAAjB,CAzBiB;AA0B/B6B,EAAAA,YAAY,EAAElC,aAAII,MAAJ,EA1BiB;AA2B/B+B,EAAAA,gBAAgB,EAAEnC,aAAIY,IAAJ,EA3Ba;AA4B/BwB,EAAAA,WAAW,EAAEpC,aAAIY,IAAJ,EA5BkB;AA6B/ByB,EAAAA,WAAW,EAAErC,aAAIC,MAAJ,GAAaqC,OAAb,CACX,SADW,EAEX,CAACtC,aAAII,MAAJ,GAAamC,KAAb,CAAmB,EAAnB,CAAD,CAFW,CA7BkB;AAiC/BC,EAAAA,WAAW,EAAExC,aAAIgC,MAAJ,EAjCkB;AAkC/BS,EAAAA,qBAAqB,EAAEzC,aAAI2B,KAAJ,GAAYC,KAAZ,CAAkB5B,aAAIC,MAAJ,CAAW;AAClDyC,IAAAA,SAAS,EAAE1C,aAAII,MAAJ,GAAauC,IAAb,GAAoBrC,QAApB,EADuC;AAElDsC,IAAAA,MAAM,EAAE5C,aAAII,MAAJ,GAAauC,IAAb,GAAoBrC,QAApB,EAF0C;AAGlDuC,IAAAA,KAAK,EAAE7C,aAAII,MAAJ,GAAauC,IAAb,GAAoBrC,QAApB;AAH2C,GAAX,CAAlB,CAlCQ;AAuC/BwC,EAAAA,MAAM,EAAE;AACNC,IAAAA,UAAU,EAAE/C,aAAII,MAAJ,GAAaE,QAAb,EADN;AAEN0C,IAAAA,SAAS,EAAEhD,aAAII,MAAJ,GAAaE,QAAb;AAFL;
|
|
1
|
+
{"version":3,"sources":["../src/validate.js"],"names":["schema","joi","object","keys","name","string","min","required","path","type","envName","buildOptions","serverOnly","bool","debug","buildLocation","mobileSettings","server","uri","allowIncompatibleUpdates","boolean","executable","docker","env","auth","id","secret","sslDomains","array","items","forceSSL","region","minInstances","number","maxInstances","instanceType","gracefulShutdown","longEnvVars","yumPackages","pattern","allow","oldVersions","customBeanstalkConfig","namespace","trim","option","value","sshKey","privateKey","publicKey","awsPlatformBranchName","config","utils","details","combineErrorDetails","validate","app","VALIDATE_OPTIONS","length","push","message","addLocation"],"mappings":"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","sourcesContent":["import joi from '@hapi/joi';\n\nconst schema = joi.object().keys({\n name: joi.string().min(1).required(),\n path: joi.string().min(1).required(),\n type: joi.string().required(),\n envName: joi.string().min(1),\n buildOptions: joi.object().keys({\n serverOnly: joi.bool(),\n debug: joi.bool(),\n buildLocation: joi.string(),\n mobileSettings: joi.object(),\n server: joi.string().uri(),\n allowIncompatibleUpdates: joi.boolean(),\n executable: joi.string()\n }),\n // The meteor plugin adds the docker object, which is a bug in mup\n docker: joi.object(),\n env: joi.object(),\n auth: joi.object().keys({\n id: joi.string().required(),\n secret: joi.string().required()\n }).required(),\n sslDomains: joi.array().items(joi.string()),\n forceSSL: joi.bool(),\n region: joi.string(),\n minInstances: joi.number().min(1).required(),\n maxInstances: joi.number().min(1),\n instanceType: joi.string(),\n gracefulShutdown: joi.bool(),\n longEnvVars: joi.bool(),\n yumPackages: joi.object().pattern(\n /[/s/S]*/,\n [joi.string().allow('')]\n ),\n oldVersions: joi.number(),\n customBeanstalkConfig: joi.array().items(joi.object({\n namespace: joi.string().trim().required(),\n option: joi.string().trim().required(),\n value: joi.string().trim().required()\n })),\n sshKey: {\n privateKey: joi.string().required(),\n publicKey: joi.string().required()\n },\n awsPlatformBranchName: joi.string().min(1).required()\n});\n\nexport default function (config, utils) {\n let details = [];\n details = utils.combineErrorDetails(\n details,\n joi.validate(config.app, schema, utils.VALIDATE_OPTIONS)\n );\n if (config.app && config.app.name && config.app.name.length < 4) {\n details.push({\n message: 'must have at least 4 characters',\n path: 'name'\n });\n }\n\n return utils.addLocation(details, 'app');\n}\n"],"file":"validate.js"}
|