Comparing version 0.2.4 to 0.2.5
103
lib/cli.js
@@ -12,7 +12,9 @@ 'use strict'; | ||
var stackFile = argv._[0] || process.cwd(); | ||
var cmd = argv._[0]; | ||
var stackFile = argv.stack || argv.s || process.cwd(); | ||
var name = argv.name || argv.n; | ||
var action = argv.action || argv.a; | ||
var env = argv.env || argv.e || process.env.NODE_ENV; | ||
var envFile = argv['env-file'] || argv.f || '.env'; | ||
var output = argv.output || argv.o; | ||
var region = argv.region || argv.r || 'us-east-1'; | ||
@@ -25,3 +27,9 @@ var profile = argv.profile || argv.p; | ||
if (env) process.env.NODE_ENV = env; | ||
if (envFile) _dotenv2.default.config({ path: envFile, silent: true }); | ||
if (envFile) { | ||
var file = envFile; | ||
if (!Array.isArray(file)) file = [file]; | ||
file.forEach(function (path) { | ||
return _dotenv2.default.config({ path: path, silent: true }); | ||
}); | ||
} | ||
@@ -32,6 +40,6 @@ if (region) process.env.AWS_REGION = region; | ||
if (version) return console.log('Axe v' + _package2.default.version); | ||
if (help) return helpMenu(); | ||
if (help || !cmd || cmd === 'help') return helpMenu(); | ||
if (String(process.env.NODE_ENV) === 'undefined') { | ||
throw new Error('Please specify a NODE_ENV environment variable!'); | ||
throw new Error('Please specify an environment!'); | ||
} | ||
@@ -54,36 +62,59 @@ | ||
if (action === 'delete') { | ||
_inquirer2.default.prompt([{ | ||
type: 'confirm', | ||
name: 'sure', | ||
message: 'Are you sure you want to destroy everything for ' + name + '?' | ||
}]).then(function (_ref) { | ||
var sure = _ref.sure; | ||
if (output) { | ||
return console.log(JSON.stringify(template.stack || template, null, 2)); | ||
} | ||
if (!sure) return; | ||
var cloudFormation = new _awsSdk2.default.CloudFormation(); | ||
new _awsSdk2.default.CloudFormation().deleteStack({ | ||
StackName: name + '--' + process.env.NODE_ENV | ||
}, function (err, res) { | ||
if (err && !quiet) return console.error(err); | ||
if (!quiet) console.log(res); | ||
var payload = { | ||
Capabilities: ['CAPABILITY_NAMED_IAM'], | ||
StackName: name + '--' + process.env.NODE_ENV, | ||
TemplateBody: JSON.stringify(template.stack || template), | ||
Tags: _index2.default.defaultTags({ name: name }), | ||
Parameters: Object.keys(template.parameters || {}).map(function (key) { | ||
return { | ||
ParameterKey: key, | ||
ParameterValue: template.parameters[key] | ||
}; | ||
}) | ||
}; | ||
var promise = Promise.resolve(); | ||
switch (cmd) { | ||
case 'apply': | ||
promise = cloudFormation.describeStacks({ | ||
StackName: payload.StackName | ||
}).promise().then(function () { | ||
return cloudFormation.updateStack(payload).promise(); | ||
}).catch(function (err) { | ||
if (err.message.match(/does not exist/)) { | ||
return cloudFormation.createStack(payload).promise(); | ||
} | ||
throw err; | ||
}); | ||
}); | ||
} else { | ||
new _awsSdk2.default.CloudFormation()[action + 'Stack']({ | ||
Capabilities: ['CAPABILITY_NAMED_IAM'], | ||
StackName: name + '--' + process.env.NODE_ENV, | ||
TemplateBody: JSON.stringify(template.stack || template), | ||
Tags: _index2.default.DefaultTags({ name: name }), | ||
Parameters: Object.keys(template.parameters || {}).map(function (key) { | ||
return { | ||
ParameterKey: key, | ||
ParameterValue: template.parameters[key] | ||
}; | ||
}) | ||
}, function (err, res) { | ||
if (err && !quiet) return console.error(err); | ||
if (!quiet) console.log(res); | ||
}); | ||
break; | ||
case 'destroy': | ||
promise = _inquirer2.default.prompt([{ | ||
type: 'confirm', | ||
name: 'sure', | ||
default: false, | ||
message: 'Are you sure you want to destroy everything for ' + name + '?' | ||
}]).then(function (_ref) { | ||
var sure = _ref.sure; | ||
if (!sure) return; | ||
return cloudFormation.deleteStack({ | ||
StackName: name + '--' + process.env.NODE_ENV | ||
}).promise(); | ||
}); | ||
break; | ||
} | ||
promise.then(function (res) { | ||
return !quiet && res && console.log(res); | ||
}).catch(function (err) { | ||
return !quiet && err && console.error(err.message || err); | ||
}); | ||
}; | ||
@@ -130,3 +161,3 @@ | ||
function helpMenu() { | ||
console.log('\n axe [stack file] [options]\n\n --name, -n Name of the CloudFormation stack\n --action, -a CloudFormation action to use (create, update, delete)\n --env, -e Sets the stack environment name (default: NODE_ENV)\n --env-file, -f A file to read environment variables from (default: .env)\n --region, -r AWS region to create stack in (default: us-east-1)\n --profile, -p AWS credentials profile to use\n --quiet, -q Don\'t show any output\n --version, -v Show Axe version number\n --help, -h This one got you here ;)\n '); | ||
console.log('\n Usage:\n\n axe <command> [options]\n\n Commands:\n\n apply Create or update your infrastructure\n destroy Delete everything in your infrastructure\n\n Options:\n\n --stack, -s File to require for creating the stack object\n --name, -n Name of the CloudFormation stack\n --env, -e Sets the stack environment name (default: NODE_ENV)\n --env-file, -f A file to read environment variables from (default: .env)\n --output, -o Output the CloudFormation stack instead of applying\n --region, -r AWS region to create stack in (default: us-east-1)\n --profile, -p AWS credentials profile to use\n --quiet, -q Don\'t show any output\n --version, -v Show Axe version number\n '); | ||
} |
'use strict'; | ||
var _deepAssign = require('deep-assign'); | ||
var _deepAssign2 = _interopRequireDefault(_deepAssign); | ||
var _resources = require('./resources'); | ||
@@ -14,41 +18,67 @@ | ||
module.exports = { | ||
AwsData: _awsData2.default, | ||
Resources: _resources2.default, | ||
awsData: _awsData2.default, | ||
resources: _resources2.default, | ||
Ref: function Ref(resource) { | ||
ref: function ref(resource) { | ||
return { Ref: resource.id || resource }; | ||
}, | ||
Get: function Get(key, value) { | ||
get: function get(key, value) { | ||
return { 'Fn::GetAtt': [key.id || key, value] }; | ||
}, | ||
Import: function Import(key) { | ||
import: function _import(key) { | ||
return { 'Fn::ImportValue': key }; | ||
}, | ||
Join: function Join(keys) { | ||
join: function join(keys) { | ||
var delim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; | ||
return { 'Fn::Join': [delim, keys] }; | ||
}, | ||
Sub: function Sub(str, keys) { | ||
sub: function sub(str, keys) { | ||
return { 'Fn::Sub': keys ? [str, keys] : str }; | ||
}, | ||
Base64: function Base64(val) { | ||
base64: function base64(val) { | ||
return { 'Fn::Base64': val }; | ||
}, | ||
AccountId: function AccountId() { | ||
accountId: function accountId() { | ||
return { Ref: 'AWS::AccountId' }; | ||
}, | ||
StackId: function StackId() { | ||
stackId: function stackId() { | ||
return { Ref: 'AWS::StackId' }; | ||
}, | ||
StackName: function StackName() { | ||
stackName: function stackName() { | ||
return { Ref: 'AWS::StackName' }; | ||
}, | ||
Region: function Region() { | ||
region: function region() { | ||
return { Ref: 'AWS::Region' }; | ||
}, | ||
Build: function Build(stack) { | ||
modules: function modules() { | ||
return { | ||
defaultVpc: require('./modules/default-vpc'), | ||
dockerApp: require('./modules/docker-app'), | ||
route53Redirect: require('./modules/route53-redirect') | ||
}; | ||
}, | ||
build: function build(stack) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (Array.isArray(stack)) { | ||
(function () { | ||
var composedStack = { Resources: {} }; | ||
stack.forEach(function (s) { | ||
/* ensure keys are unique */ | ||
Object.keys(s.Resources || {}).forEach(function (key) { | ||
if (composedStack.Resources[key]) { | ||
throw new Error('"' + key + '" is defined more than once!'); | ||
} | ||
}); | ||
(0, _deepAssign2.default)(composedStack, s); | ||
}); | ||
stack = composedStack; | ||
})(); | ||
} | ||
return { | ||
@@ -60,3 +90,3 @@ stack: stack, | ||
DefaultTags: function DefaultTags() { | ||
defaultTags: function defaultTags() { | ||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
@@ -63,0 +93,0 @@ |
@@ -11,12 +11,11 @@ 'use strict'; | ||
return function (Properties) { | ||
var more = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
var More = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (more.Environment) { | ||
if (more.Environment !== process.env.NODE_ENV) return;else delete more.Environment; | ||
if (More.environment) { | ||
if (Array.isArray(More.environment) && More.environment.indexOf(process.env.NODE_ENV) === -1 || More.environment !== process.env.NODE_ENV) return; | ||
delete More.environment; | ||
} | ||
return _extends({ | ||
Type: Type, | ||
Properties: Properties | ||
}, more); | ||
return _extends({ Type: Type, Properties: Properties }, More); | ||
}; | ||
@@ -23,0 +22,0 @@ }; |
{ | ||
"name": "axe", | ||
"version": "0.2.4", | ||
"version": "0.2.5", | ||
"description": "Painlessly build and apply AWS CloudFormation stacks", | ||
@@ -43,2 +43,3 @@ "author": "Jason Maurer", | ||
"aws-sdk": "2.6.6", | ||
"deep-assign": "2.0.0", | ||
"dotenv": "2.0.0", | ||
@@ -45,0 +46,0 @@ "inquirer": "1.2.1", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
51422
11
1295
6
+ Addeddeep-assign@2.0.0
+ Addeddeep-assign@2.0.0(transitive)