elastic_beans 0.11.0.alpha5 → 0.11.0.alpha7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ced35135b31c46cdc993f0e19d7e73c6219ed72d
4
- data.tar.gz: 3b028b2d8b6c0b9bfe7da052cca5fd4a66e90cb6
3
+ metadata.gz: ab4560c3622e7fe3d379e37a6691663abdafe52c
4
+ data.tar.gz: 9ec0036df9f9df63f1687be7c668244acc231727
5
5
  SHA512:
6
- metadata.gz: 90d8f569a7ed92b940fd9e713278dd9afe6e42cc1873c2456f5fbd84a63e14f73c030683e03e0dc1f9c06c581e45e4c30c089bb60b1c3d9246a5d0cd7ba7a898
7
- data.tar.gz: 1a8be85e3b7624ee55c9105f84d9e83530d874ee8bbe13648c0869f9ad0eb05dfa1c032da7d1e57f5d7e143f232c6047e472094755076237f3fb52de7e521d46
6
+ metadata.gz: 71a71115042d5a7128f0803754ef5120b2a8aa96b85e6454b5e2c08f719877ba856574566281227a375dbbbd4788e33c2733b89f17dc416638c4e5f79fb3df2d
7
+ data.tar.gz: 800d01320e7cf59f0d4ba8e654b643086094cfa103514b542af5aba7cce63908cfb4740039c5aa2c5eae7238c1fcb249f78536b9d4364deb107bd529e8eb2b40
data/README.md CHANGED
@@ -194,9 +194,11 @@ It must have the following outputs, which will be used for the corresponding set
194
194
  * `ApplicationSecurityGroup` - [`aws:autoscaling:launchconfiguration/SecurityGroups`][launchconfiguration]
195
195
  * Allow TCP connections from the `ELBSecurityGroup` on ports 80 and 443
196
196
  * `ApplicationSubnet` - [`aws:ec2:vpc/Subnets`][vpc]
197
+ * Use multiple subnets by appending digits to this name, e.g. `ApplicationSubnet` and `ApplicationSubnet2`
197
198
  * `ELBSecurityGroup` - [`aws:elb:loadbalancer/SecurityGroups`][loadbalancer], [`aws:elb:loadbalancer/ManagedSecurityGroup`][loadbalancer]
198
199
  * Allow TCP connections on ports 80 and 443 from `0.0.0.0/0`
199
200
  * `ELBSubnet` - [`aws:ec2:vpc/ELBSubnets`][vpc]
201
+ * Use multiple subnets by appending digits to this name, e.g. `ELBSubnet` and `ELBSubnet2`
200
202
  * `SSHSecurityGroup` - [`aws:ec2:vpc/Subnets`][vpc]
201
203
  * Allow TCP connections from your VPC on ports 80 and 443
202
204
  * `VpcId` - [`aws:ec2:vpc/VPCId`][vpc]
data/exe/beans CHANGED
@@ -2,14 +2,18 @@
2
2
 
3
3
  Signal.trap("INT") do
4
4
  puts "\nInterrupting beans -- if an operation was in progress, it will still be running."
5
- exit 130
5
+ raise Interrupt
6
6
  end
7
7
 
8
8
  Signal.trap("TERM") do
9
9
  puts "Terminating beans -- if an operation was in progress, it will still be running."
10
- exit 143
10
+ raise SignalException.new("TERM")
11
11
  end
12
12
 
13
13
  require "elastic_beans/cli"
14
14
 
15
- ElasticBeans::CLI.start(ARGV)
15
+ begin
16
+ ElasticBeans::CLI.start(ARGV)
17
+ rescue SignalException => e
18
+ exit(128 + e.signo)
19
+ end
@@ -9,15 +9,17 @@ module ElasticBeans
9
9
  class CloudformationStack
10
10
  STACK_STATUSES = %w(CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE)
11
11
 
12
- def initialize(stack_name, cloudformation:)
13
- @stack_name = stack_name
12
+ attr_reader :name
13
+
14
+ def initialize(name, cloudformation:)
15
+ @name = name
14
16
  @cloudformation = cloudformation
15
17
  end
16
18
 
17
19
  def stack_output(output_key)
18
20
  output = stack.outputs.find { |o| o.output_key == output_key }
19
21
  unless output
20
- raise MissingOutputError.new(stack_name: stack_name, output_key: output_key)
22
+ raise MissingOutputError.new(stack_name: name, output_key: output_key)
21
23
  end
22
24
  output.output_value
23
25
  end
@@ -28,20 +30,20 @@ module ElasticBeans
28
30
 
29
31
  private
30
32
 
31
- attr_reader :stack_name, :cloudformation
33
+ attr_reader :cloudformation
32
34
 
33
35
  def stack
34
- s = cloudformation.describe_stacks(stack_name: stack_name).stacks.find { |stack|
36
+ s = cloudformation.describe_stacks(stack_name: name).stacks.find { |stack|
35
37
  STACK_STATUSES.include?(stack.stack_status)
36
38
  }
37
39
  unless s
38
- raise MissingStackError.new(stack_name: stack_name)
40
+ raise MissingStackError.new(stack_name: name)
39
41
  end
40
42
  s
41
43
  rescue ::Aws::CloudFormation::Errors::ValidationError
42
- raise MissingStackError.new(stack_name: stack_name)
44
+ raise MissingStackError.new(stack_name: name)
43
45
  rescue ::Aws::CloudFormation::Errors::AccessDenied
44
- raise AccessDeniedCloudFormationError.new(stack_name: stack_name)
46
+ raise AccessDeniedCloudFormationError.new(stack_name: name)
45
47
  rescue ::Aws::CloudFormation::Errors::Throttling
46
48
  sleep 5
47
49
  retry
@@ -109,9 +109,13 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
109
109
  rescue ElasticBeans::SSH::BastionAuthenticationError => e
110
110
  raise BastionAuthenticationError.new(cause: e)
111
111
  ensure
112
- ui.info("Cleaning up, please do not interrupt!")
113
- application.kill_command(freeze_command)
114
- application.deregister_command(command)
112
+ begin
113
+ ui.info("Cleaning up, please do not interrupt!")
114
+ application.kill_command(freeze_command)
115
+ application.deregister_command(command)
116
+ rescue Interrupt
117
+ retry
118
+ end
115
119
  end
116
120
  else
117
121
  application.enqueue_command(command)
@@ -5,8 +5,10 @@ module ElasticBeans
5
5
  class Network
6
6
  APPLICATION_SECURITY_GROUP_KEY = "ApplicationSecurityGroup"
7
7
  APPLICATION_SUBNET_KEY = "ApplicationSubnet"
8
+ APPLICATION_SUBNET_KEY_PATTERN = /\AApplicationSubnet\d*\z/
8
9
  ELB_SECURITY_GROUP_KEY = "ELBSecurityGroup"
9
10
  ELB_SUBNET_KEY = "ELBSubnet"
11
+ ELB_SUBNET_KEY_PATTERN = /\AELBSubnet\d*\z/
10
12
  SSH_SECURITY_GROUP_KEY = "SSHSecurityGroup"
11
13
  VPC_KEY = "VpcId"
12
14
 
@@ -19,7 +21,11 @@ module ElasticBeans
19
21
  end
20
22
 
21
23
  def application_subnets
22
- [stack.stack_output(APPLICATION_SUBNET_KEY)]
24
+ subnet_outputs = stack.stack_outputs.select { |key, value| key =~ APPLICATION_SUBNET_KEY_PATTERN }
25
+ if subnet_outputs.empty?
26
+ raise MissingNetworkingError.new(stack: stack, key: APPLICATION_SUBNET_KEY)
27
+ end
28
+ subnet_outputs.values
23
29
  end
24
30
 
25
31
  def elb_security_groups
@@ -27,7 +33,11 @@ module ElasticBeans
27
33
  end
28
34
 
29
35
  def elb_subnets
30
- [stack.stack_output(ELB_SUBNET_KEY)]
36
+ subnet_outputs = stack.stack_outputs.select { |key, value| key =~ ELB_SUBNET_KEY_PATTERN }
37
+ if subnet_outputs.empty?
38
+ raise MissingNetworkingError.new(stack: stack, key: ELB_SUBNET_KEY)
39
+ end
40
+ subnet_outputs.values
31
41
  end
32
42
 
33
43
  def ssh_security_group
@@ -41,5 +51,17 @@ module ElasticBeans
41
51
  private
42
52
 
43
53
  attr_reader :stack
54
+
55
+ class MissingNetworkingError < ElasticBeans::Error
56
+ def initialize(stack:, key:)
57
+ @stack = stack
58
+ @key = key
59
+ end
60
+
61
+ def message
62
+ "Networking stack '#{@stack.name}' is missing output '#{@key}'." \
63
+ " Make sure the stack matches the outputs required."
64
+ end
65
+ end
44
66
  end
45
67
  end
@@ -1,3 +1,3 @@
1
1
  module ElasticBeans
2
- VERSION = "0.11.0.alpha5"
2
+ VERSION = "0.11.0.alpha7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_beans
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0.alpha5
4
+ version: 0.11.0.alpha7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Stegman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-05 00:00:00.000000000 Z
11
+ date: 2017-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk