elb 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ree-1.8.7-2012.02
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 1.8.7
5
+ - 2.0.0
6
+ addons:
7
+ code_climate:
8
+ repo_token:
9
+ secure: AK6jL+T50l6SbGw/+xo6dpLUz++EQJl56DW+CDOp9+/SYZNL3PqtNGSApMEzXiAf1C+1TAhXRNkH8uyV7x8w6/SGFe+ZzxW1hupqJocDOaFL6sRHBXT9Fg9JNn3FULUgUjZDQn7t7u7QGBpykcGW3JNbKuyiQgfiSYSLx5Ee6OE=
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in elb.gemspec
4
+ gemspec
5
+
6
+ gem "codeclimate-test-reporter", :group => :test, :require => nil
data/Guardfile ADDED
@@ -0,0 +1,12 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { "spec/elb_spec.rb" }
4
+ watch(%r{^lib/elb/(.+)\.rb$}) { "spec/elb_spec.rb" }
5
+ watch('spec/spec_helper.rb') { "spec/elb_spec.rb" }
6
+ watch(%r{^lib/elb/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ end
8
+
9
+ guard 'bundler' do
10
+ watch('Gemfile')
11
+ watch(/^.+\.gemspec/)
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Tung Nguyen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # Elb
2
+
3
+ [![Build Status](https://travis-ci.org/tongueroo/elb.svg?branch=master)](https://travis-ci.org/tongueroo/elb)
4
+ [![Code Climate](https://codeclimate.com/github/tongueroo/elb.png)](https://codeclimate.com/github/tongueroo/elb)
5
+ [![Code Climate](https://codeclimate.com/github/tongueroo/elb/coverage.png)](https://codeclimate.com/github/tongueroo/elb)
6
+
7
+ Tool gracefully restarts app server without affecting users by deregistering the instance from the elb, restarting it and registering it back to the elb.
8
+
9
+ It makes the assumption that the instance belongs to an autoscaling group that was created with cloudformation. Cloudformation automatically tags these instances with a `aws:autoscaling:groupName` tag, which is required.
10
+
11
+ ## Installation
12
+
13
+ ```
14
+ $ gem install elb
15
+ ```
16
+
17
+ ## Setup
18
+
19
+ The tool requires access to a limited number of AWS resources. This tool is meant to be ran on an ec2 instance, so using an IAM role is ideal. An [example IAM policy](https://github.com/tongueroo/elb/wiki/IAM-Role-Example) is on the wiki.
20
+
21
+ If you cannot use IAM roles, you can use a credentials file instead. The location of the file should be at ~/.br/aws.yml. An example of the format of the file is provided [here](https://github.com/tongueroo/elb/blob/master/spec/fixtures/aws.yml).
22
+
23
+ ## Usage
24
+
25
+ ```
26
+ $ elb restart
27
+ ```
28
+ The `elb restart` command is meant to be ran on an ec2 instance and does the following:
29
+
30
+ 1. deregister the instance from the autoscaling group it's associated with
31
+ 2. restart the app
32
+ 3. warm up the app by hitting it with a local curl request
33
+ 4. register the instance back to the elb
34
+
35
+ Options can be used to override default behaviors.
36
+
37
+ ```
38
+ $ elb restart --wait 30 # wait 30 seconds after deregistering
39
+
40
+ $ elb restart --warm-command "curl -s -v -o /dev/null localhost/custom-warm-url 2>&1 | grep '< HTTP'"
41
+
42
+ $ elb restart --restart-command "restart nginx"
43
+
44
+ $ elb help
45
+ ```
46
+
47
+ ### Local Usage
48
+
49
+ You can also use the tool locally and test on remote ec2 instances by specifying the `--instance-id` option.
50
+
51
+ ```bash
52
+ $ elb restart --instance-id i-xxxxx
53
+
54
+ $ elb deregister --instance-id i-xxxxx # only runs deregister part
55
+
56
+ $ elb register --instance-id i-xxxxx # only runs register part
57
+ ```
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ task :default => :spec
5
+
6
+ RSpec::Core::RakeTask.new
data/bin/elb ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ $:.unshift(File.expand_path('../../lib', __FILE__))
6
+ require 'elb'
7
+ require 'elb/cli'
8
+
9
+ Elb::CLI.start(ARGV)
data/elb.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'elb/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "elb"
8
+ spec.version = Elb::VERSION
9
+ spec.authors = ["Tung Nguyen"]
10
+ spec.email = ["tongueroo@gmail.com"]
11
+ spec.description = %q{Tool to gracefully restart app servers without affecting users}
12
+ spec.summary = %q{Tool to gracefully restart app servers without affecting users.}
13
+ spec.homepage = "https://github.com/br/elb"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "thor"
22
+ spec.add_dependency "aws-sdk"
23
+ spec.add_dependency "hashie"
24
+ spec.add_dependency "colorize"
25
+ spec.add_dependency "nokogiri", "1.5.11" # fix for 1.8.7
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.3"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec"
30
+ if RUBY_VERSION != "1.8.7"
31
+ spec.add_development_dependency "guard"
32
+ spec.add_development_dependency "guard-bundler"
33
+ spec.add_development_dependency "guard-rspec"
34
+ end
35
+ end
data/lib/elb.rb ADDED
@@ -0,0 +1,10 @@
1
+ $:.unshift(File.expand_path("../", __FILE__))
2
+ require "elb/version"
3
+
4
+ module Elb
5
+ autoload :CLI, 'elb/cli'
6
+ autoload :Deploy, 'elb/deploy'
7
+ autoload :UI, 'elb/ui'
8
+ autoload :Helper, 'elb/helper'
9
+ autoload :Settings, 'elb/settings'
10
+ end
data/lib/elb/cli.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'thor'
2
+ require 'elb/cli/help'
3
+
4
+ module Elb
5
+
6
+ class CLI < Thor
7
+ class_option :noop, :type => :boolean
8
+ class_option :mute, :default => false, :type => :boolean
9
+ class_option :instance_id, :desc => 'instance id to use, defaults to instance command is running on'
10
+
11
+ desc "restart", "restart server"
12
+ long_desc Help.restart
13
+ option :wait, :type => :numeric, :default => 20, :desc => 'period to wait after deregistering'
14
+ option :warm_command, :desc => 'command use to warm app, defaults to curling homepage', :default => "curl -s -v -o /dev/null localhost/ 2>&1 | grep '< HTTP'"
15
+ option :restart_command, :desc => 'command use to restart app, defaults to touch tmp/restart.txt', :default => "touch tmp/restart.txt"
16
+ def restart
17
+ Deploy.new(options).run
18
+ end
19
+
20
+ desc "deregister", "deregister server from elb"
21
+ def deregister
22
+ Deploy.new(options.merge(:wait => 0)).deregister
23
+ end
24
+
25
+ desc "register", "register server with elb"
26
+ def register
27
+ Deploy.new(options).register
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ module Elb
2
+ class CLI < Thor
3
+ class Help
4
+ class << self
5
+ def restart
6
+ <<-EOL
7
+ The command is meant to be ran on the instance itself and will basically:
8
+
9
+ 1. deregister the instance from the autoscaling group it's associated with
10
+
11
+ 2. restart the app
12
+
13
+ 3. warm up the app by hitting it with a local curl request
14
+
15
+ 4. register the instance back to the elb
16
+
17
+ Examples:
18
+
19
+ $ elb restart --wait 30 # wait 30 seconds after deregistering
20
+
21
+ $ elb restart --warm-command "curl -s -v -o /dev/null localhost/custom-warm-url 2>&1 | grep '< HTTP'"
22
+
23
+ $ elb restart --restart-command "/etc/init.d/nginx restart"
24
+ EOL
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/elb/deploy.rb ADDED
@@ -0,0 +1,65 @@
1
+ module Elb
2
+ class Deploy
3
+ include Helper
4
+
5
+ attr_reader :instance_id
6
+ def initialize(options={})
7
+ @options = options
8
+ @instance_id = options[:instance_id] || %x[curl -s http://instance-data.ec2.internal/latest/meta-data/instance-id].strip
9
+ setup_aws
10
+ end
11
+
12
+ def run
13
+ UI.say("Restarting server started")
14
+ deregister
15
+ restart
16
+ warm
17
+ register
18
+ UI.say("Restarting server completed")
19
+ end
20
+
21
+ def asg
22
+ return @asg if @asg
23
+ name = ec2.instances[instance_id].tags["aws:autoscaling:groupName"]
24
+ @asg = as.groups[name]
25
+ end
26
+
27
+ def elb
28
+ return @elb if @elb
29
+ @elb = asg.load_balancers.first
30
+ end
31
+
32
+ def deregister
33
+ UI.say("Deregistering server from ELB")
34
+ return true if @options[:noop]
35
+ elb.client.deregister_instances_from_load_balancer(
36
+ :load_balancer_name => elb.name,
37
+ :instances => [{:instance_id => @instance_id}]
38
+ )
39
+ wait(@options[:wait]) # takes a while for the elb to deregister
40
+ end
41
+
42
+ def restart
43
+ UI.say("Restarting server")
44
+ system(@options[:restart_command])
45
+ end
46
+
47
+ def warm
48
+ UI.say("Warming up server")
49
+ system(@options[:warm_command])
50
+ end
51
+
52
+ def register
53
+ UI.say("Registering server with ELB")
54
+ return true if @options[:noop]
55
+ elb.client.register_instances_with_load_balancer(
56
+ :load_balancer_name => elb.name,
57
+ :instances => [{:instance_id => @instance_id}]
58
+ )
59
+ end
60
+
61
+ def wait(n)
62
+ sleep n
63
+ end
64
+ end
65
+ end
data/lib/elb/helper.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'aws-sdk'
2
+
3
+ module Elb
4
+ module Helper
5
+ @@setup_aws = nil
6
+ def setup_aws(region='us-east-1', options={})
7
+ return if @@setup_aws
8
+ path = Elb::Settings.new.aws_path
9
+ if File.exist?(path)
10
+ @config = YAML.load(IO.read(path))
11
+ AWS.config(
12
+ :http_wire_trace => options[:debug],
13
+ :access_key_id => @config[:aws_access_key_id],
14
+ :secret_access_key => @config[:aws_secret_access_key]
15
+ )
16
+ end
17
+ @@setup_aws = true
18
+ end
19
+
20
+ def ec2
21
+ @ec2 ||= AWS::EC2.new
22
+ end
23
+
24
+ def cfn
25
+ @cfn ||= AWS::CloudFormation.new
26
+ end
27
+
28
+ def rds
29
+ @rds ||= AWS::RDS.new
30
+ end
31
+
32
+ def as
33
+ @as ||= AWS::AutoScaling.new
34
+ end
35
+
36
+ def r53
37
+ @r53 ||= AWS::Route53.new
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,26 @@
1
+ require 'yaml'
2
+ require 'hashie'
3
+
4
+ module Elb
5
+ class Settings
6
+ def aws_path
7
+ path = ENV['TEST'] ? "spec/fixtures/aws.yml" : "#{br_path}/aws.yml"
8
+ path = ENV['AWS'] if ENV['AWS']
9
+ path
10
+ end
11
+
12
+ def br_path
13
+ self.class.br_path
14
+ end
15
+
16
+ def self.br_path
17
+ ENV['BR_PATH'] || "#{ENV['HOME']}/.br"
18
+ end
19
+
20
+ def self.setup_br_path
21
+ FileUtils.mkdir(br_path) unless File.exist?(br_path)
22
+ end
23
+ end
24
+ end
25
+
26
+ Elb::Settings.setup_br_path
data/lib/elb/ui.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Elb
2
+ class UI
3
+ class << self
4
+ @@mute = false
5
+ def mute
6
+ @@mute
7
+ end
8
+ def mute=(v)
9
+ @@mute=v
10
+ end
11
+ def say(msg='')
12
+ puts msg unless mute
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module Elb
2
+ VERSION = "0.0.4"
3
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ :aws_access_key_id: xxx
3
+ :aws_secret_access_key: xxx
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elb::CLI do
4
+ before(:all) do
5
+ ensure_tmp
6
+ @args = "--noop --instance-id #{instance_id} --mute"
7
+ end
8
+
9
+ describe "elb" do
10
+ it "should restart" do
11
+ out = execute("bin/elb restart #{@args}")
12
+ expect(out).to include("Restarting server started")
13
+ expect(out).to include("Restarting server completed")
14
+ end
15
+
16
+ it "should deregister" do
17
+ out = execute("bin/elb deregister #{@args}")
18
+ expect(out).to include("Deregistering server from ELB")
19
+ end
20
+
21
+ it "should register" do
22
+ out = execute("bin/elb register #{@args}")
23
+ expect(out).to include("Registering server with ELB")
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elb::Deploy do
4
+ before(:all) do
5
+ AWS.stub!
6
+ ensure_tmp
7
+ @options = {
8
+ :instance_id => instance_id,
9
+ :noop => true,
10
+ :restart_command => "touch tmp/restart.txt"
11
+ }
12
+ Elb::UI.mute = true
13
+ end
14
+ let(:lb) { double("Aws::Elb") }
15
+ let(:deploy) {
16
+ deploy = Elb::Deploy.new(@options)
17
+ allow(deploy.asg).to receive(:load_balancers).and_return([lb])
18
+ allow(deploy).to receive(:wait).and_return(true)
19
+ deploy
20
+ }
21
+
22
+ describe "deploy" do
23
+ it "should run" do
24
+ expect(deploy).to receive(:deregister)
25
+ expect(deploy).to receive(:restart)
26
+ expect(deploy).to receive(:warm)
27
+ expect(deploy).to receive(:register)
28
+ deploy.run
29
+ end
30
+
31
+ it "should have asg" do
32
+ expect(deploy.asg).to_not be_nil
33
+ end
34
+
35
+ it "should have elb" do
36
+ expect(deploy.elb).to_not be_nil
37
+ end
38
+
39
+ it "should deregister" do
40
+ expect(deploy.deregister).to be true
41
+ end
42
+
43
+ it "should register" do
44
+ expect(deploy.register).to be true
45
+ end
46
+
47
+ it "should restart" do
48
+ expect(deploy.restart).to be true
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,32 @@
1
+ ENV['TEST'] = '1'
2
+
3
+ if RUBY_VERSION != "1.8.7"
4
+ require "codeclimate-test-reporter"
5
+ CodeClimate::TestReporter.start
6
+ end
7
+
8
+ require "pp"
9
+
10
+ root = File.expand_path('../../', __FILE__)
11
+ require "#{root}/lib/elb"
12
+
13
+ module Helpers
14
+ def execute(cmd)
15
+ puts "Running: #{cmd}" if ENV['DEBUG']
16
+ out = `#{cmd}`
17
+ puts out if ENV['DEBUG']
18
+ out
19
+ end
20
+
21
+ def instance_id
22
+ ENV['INSTANCE_ID']
23
+ end
24
+
25
+ def ensure_tmp
26
+ FileUtils.mkdir('tmp') unless File.exist?('tmp')
27
+ end
28
+ end
29
+
30
+ RSpec.configure do |c|
31
+ c.include Helpers
32
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: elb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
11
+ platform: ruby
12
+ authors:
13
+ - Tung Nguyen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2014-06-08 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: thor
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: aws-sdk
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: hashie
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: colorize
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: nokogiri
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - "="
83
+ - !ruby/object:Gem::Version
84
+ hash: 21
85
+ segments:
86
+ - 1
87
+ - 5
88
+ - 11
89
+ version: 1.5.11
90
+ type: :runtime
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: bundler
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ hash: 9
101
+ segments:
102
+ - 1
103
+ - 3
104
+ version: "1.3"
105
+ type: :development
106
+ version_requirements: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: rake
109
+ prerelease: false
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ type: :development
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: rspec
123
+ prerelease: false
124
+ requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ type: :development
134
+ version_requirements: *id008
135
+ description: Tool to gracefully restart app servers without affecting users
136
+ email:
137
+ - tongueroo@gmail.com
138
+ executables:
139
+ - elb
140
+ extensions: []
141
+
142
+ extra_rdoc_files: []
143
+
144
+ files:
145
+ - .gitignore
146
+ - .ruby-version
147
+ - .travis.yml
148
+ - Gemfile
149
+ - Guardfile
150
+ - LICENSE.txt
151
+ - README.md
152
+ - Rakefile
153
+ - bin/elb
154
+ - elb.gemspec
155
+ - lib/elb.rb
156
+ - lib/elb/cli.rb
157
+ - lib/elb/cli/help.rb
158
+ - lib/elb/deploy.rb
159
+ - lib/elb/helper.rb
160
+ - lib/elb/settings.rb
161
+ - lib/elb/ui.rb
162
+ - lib/elb/version.rb
163
+ - spec/fixtures/aws.yml
164
+ - spec/lib/cli_spec.rb
165
+ - spec/lib/deploy_spec.rb
166
+ - spec/spec_helper.rb
167
+ homepage: https://github.com/br/elb
168
+ licenses:
169
+ - MIT
170
+ post_install_message:
171
+ rdoc_options: []
172
+
173
+ require_paths:
174
+ - lib
175
+ required_ruby_version: !ruby/object:Gem::Requirement
176
+ none: false
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ hash: 3
181
+ segments:
182
+ - 0
183
+ version: "0"
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ hash: 3
190
+ segments:
191
+ - 0
192
+ version: "0"
193
+ requirements: []
194
+
195
+ rubyforge_project:
196
+ rubygems_version: 1.8.15
197
+ signing_key:
198
+ specification_version: 3
199
+ summary: Tool to gracefully restart app servers without affecting users.
200
+ test_files:
201
+ - spec/fixtures/aws.yml
202
+ - spec/lib/cli_spec.rb
203
+ - spec/lib/deploy_spec.rb
204
+ - spec/spec_helper.rb