ec2launcher 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/bin/ec2launcher +1 -1
- data/lib/ec2launcher/init_options.rb +93 -69
- data/lib/ec2launcher/terminator.rb +24 -18
- data/lib/ec2launcher/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/bin/ec2launcher
CHANGED
@@ -27,7 +27,7 @@ if opt_parser.command == "init"
|
|
27
27
|
|
28
28
|
puts "Successfully created #{opt_parser.location}"
|
29
29
|
elsif opt_parser.command =~ /^term/
|
30
|
-
terminator = EC2Launcher::Terminator.new(opt_parser.options.directory
|
30
|
+
terminator = EC2Launcher::Terminator.new(opt_parser.options.directory)
|
31
31
|
terminator.terminate(opt_parser.hostname, opt_parser.options.access_key, opt_parser.options.secret_key, opt_parser.options.snapshot_removal)
|
32
32
|
elsif opt_parser.command == "launch"
|
33
33
|
launcher = EC2Launcher::Launcher.new
|
@@ -14,21 +14,55 @@ module EC2Launcher
|
|
14
14
|
attr_reader :location
|
15
15
|
attr_reader :hostname
|
16
16
|
|
17
|
-
SUB_COMMANDS = %w{init launch terminate
|
17
|
+
SUB_COMMANDS = %w{help init launch terminate}
|
18
18
|
|
19
|
-
def
|
20
|
-
|
21
|
-
opts.banner =
|
19
|
+
def global_options
|
20
|
+
OptionParser.new do |opts|
|
21
|
+
opts.banner = <<EOH
|
22
|
+
SYNOPSIS
|
23
|
+
ec2launcher [global options] command [command options] [command arguments]
|
24
|
+
|
25
|
+
COMMANDS
|
26
|
+
init - Initialize a new environment/application repository.
|
27
|
+
launch - Launch a new instance.
|
28
|
+
terminate - Terminates an instance.
|
29
|
+
|
30
|
+
EOH
|
31
|
+
|
32
|
+
opts.separator "Global options:"
|
22
33
|
|
23
|
-
|
34
|
+
opts.on("--access-key KEY", String, "Amazon access key. Overrides AWS_ACCESS_KEY environment variable.") do |access_key|
|
35
|
+
@options.access_key = access_key
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on("--secret SECRET", String, "Amazon secret access key. Overrides AWS_SECRET_ACCESS_KEY environment variable.") do |secret|
|
39
|
+
@options.secret = secret
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on("-d", "--directory DIRECTORY", String, "Location of configuration directory. Defaults to current directory.") do |directory|
|
43
|
+
@options.directory = directory
|
44
|
+
end
|
24
45
|
|
25
|
-
|
26
|
-
|
27
|
-
|
46
|
+
opts.on_tail("-q", "--quiet", "Display as little information as possible.") do
|
47
|
+
@options.verbosity = :quiet
|
48
|
+
end
|
28
49
|
|
29
|
-
|
50
|
+
opts.on_tail("-v", "--verbose", "Display as much information as possible.") do
|
51
|
+
@options.verbosity = :verbose
|
52
|
+
end
|
30
53
|
|
31
|
-
|
54
|
+
# No argument, shows at tail. This will print an options summary.
|
55
|
+
# Try it and see!
|
56
|
+
opts.on_tail("-?", "--help", "Show this message") do
|
57
|
+
puts opts
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def launch_options
|
64
|
+
OptionParser.new do |opts|
|
65
|
+
opts.banner = ""
|
32
66
|
opts.separator "Query options:"
|
33
67
|
|
34
68
|
opts.on("-l", "--list", "Show environments and applications.") do
|
@@ -44,7 +78,7 @@ module EC2Launcher
|
|
44
78
|
end
|
45
79
|
|
46
80
|
opts.separator ""
|
47
|
-
opts.separator "Required
|
81
|
+
opts.separator "Required launch options:"
|
48
82
|
|
49
83
|
opts.on("-e", "--environment ENV", "The environment for the server.") do |env|
|
50
84
|
@options.environ = env
|
@@ -74,18 +108,7 @@ module EC2Launcher
|
|
74
108
|
end
|
75
109
|
|
76
110
|
opts.separator ""
|
77
|
-
opts.separator "
|
78
|
-
|
79
|
-
opts.on("--[no-]snapshot-removal", "Remove EBS snapshots. Defaults to TRUE.") do |removal|
|
80
|
-
@options.snapshot_removal = removal
|
81
|
-
end
|
82
|
-
|
83
|
-
opts.separator ""
|
84
|
-
opts.separator "Overrides:"
|
85
|
-
|
86
|
-
opts.on("-d", "--directory DIRECTORY", String, "Location of configuration directory. Defaults to current directory.") do |directory|
|
87
|
-
@options.directory = directory
|
88
|
-
end
|
111
|
+
opts.separator "Launch overrides:"
|
89
112
|
|
90
113
|
opts.on("-h", "--hostname NAME", String, "The name for the new server.") do |hostname|
|
91
114
|
@options.hostname = hostname
|
@@ -110,47 +133,28 @@ module EC2Launcher
|
|
110
133
|
opts.on("--volume-size SIZE", Integer, "EBS volume size in GB. Defaults to #{EC2Launcher::DEFAULT_VOLUME_SIZE} GB") do |volume_size|
|
111
134
|
@options.volume_size = volume_size
|
112
135
|
end
|
136
|
+
end
|
137
|
+
end
|
113
138
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
opts.
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
opts.on("--secret SECRET", String, "Amazon secret access key. Overrides AWS_SECRET_ACCESS_KEY environment variable.") do |secret|
|
122
|
-
@options.secret = secret
|
123
|
-
end
|
124
|
-
|
125
|
-
opts.separator ""
|
126
|
-
opts.separator "Common options:"
|
127
|
-
|
128
|
-
opts.on_tail("-q", "--quiet", "Display as little information as possible.") do
|
129
|
-
@options.verbosity = :quiet
|
130
|
-
end
|
131
|
-
|
132
|
-
opts.on_tail("-v", "--verbose", "Display as much information as possible.") do
|
133
|
-
@options.verbosity = :verbose
|
139
|
+
def terminate_options
|
140
|
+
OptionParser.new do |opts|
|
141
|
+
opts.banner = ""
|
142
|
+
opts.separator "Termination options:"
|
143
|
+
opts.on("--[no-]snapshot-removal", "Remove EBS snapshots. Defaults to TRUE.") do |removal|
|
144
|
+
@options.snapshot_removal = removal
|
134
145
|
end
|
135
|
-
|
136
|
-
# No argument, shows at tail. This will print an options summary.
|
137
|
-
# Try it and see!
|
138
|
-
opts.on_tail("-?", "--help", "Show this message") do
|
139
|
-
puts opts
|
140
|
-
exit
|
141
|
-
end
|
142
146
|
end
|
143
147
|
end
|
144
148
|
|
145
|
-
def
|
146
|
-
@
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
end
|
149
|
+
def initialize
|
150
|
+
@global_options = global_options()
|
151
|
+
@subcommands = {
|
152
|
+
'launch' => launch_options(),
|
153
|
+
'terminate' => terminate_options()
|
154
|
+
}
|
155
|
+
end
|
153
156
|
|
157
|
+
def parse(args)
|
154
158
|
@options = OpenStruct.new
|
155
159
|
@options.list = false
|
156
160
|
@options.show_defaults = false
|
@@ -175,6 +179,37 @@ module EC2Launcher
|
|
175
179
|
|
176
180
|
@options.directory = "./"
|
177
181
|
|
182
|
+
# Parse global options
|
183
|
+
@global_options.order!
|
184
|
+
|
185
|
+
# Extract the request command
|
186
|
+
@command = ARGV.shift.downcase
|
187
|
+
|
188
|
+
unless SUB_COMMANDS.include?(@command)
|
189
|
+
puts "Missing command! " if @command.nil?
|
190
|
+
puts "Invalid command: #{@command}" unless @command.nil? || @command == "-?" || @command == "--help" || @command == "help"
|
191
|
+
puts @global_options
|
192
|
+
exit 1
|
193
|
+
end
|
194
|
+
|
195
|
+
if @command == "-?" || @command == "--help"
|
196
|
+
puts @global_options
|
197
|
+
exit 1
|
198
|
+
end
|
199
|
+
|
200
|
+
if @command == "help"
|
201
|
+
if ARGV.size >= 1 && SUB_COMMANDS.include?(ARGV[0])
|
202
|
+
puts @global_options
|
203
|
+
puts @subcommands[ARGV[0]]
|
204
|
+
else
|
205
|
+
puts @global_options
|
206
|
+
end
|
207
|
+
exit 1
|
208
|
+
end
|
209
|
+
|
210
|
+
# Parse sub command options
|
211
|
+
@subcommands[@command].order! if @subcommands.has_key?(@command)
|
212
|
+
|
178
213
|
if @command == "init"
|
179
214
|
unless args.length >= 1
|
180
215
|
puts "Missing location!"
|
@@ -184,15 +219,6 @@ module EC2Launcher
|
|
184
219
|
end
|
185
220
|
@location = args[0]
|
186
221
|
elsif @command =~ /^term/
|
187
|
-
@opts.parse!(args)
|
188
|
-
|
189
|
-
if @options.environ.nil?
|
190
|
-
puts "Missing a required parameter: --environment"
|
191
|
-
puts
|
192
|
-
help
|
193
|
-
exit 1
|
194
|
-
end
|
195
|
-
|
196
222
|
unless args.length >= 1
|
197
223
|
puts "Missing name of server!"
|
198
224
|
puts
|
@@ -201,8 +227,6 @@ module EC2Launcher
|
|
201
227
|
end
|
202
228
|
@hostname = args[0]
|
203
229
|
else
|
204
|
-
@opts.parse!(args)
|
205
|
-
|
206
230
|
if (@options.environ.nil? || @options.application.nil?) && ! @options.list
|
207
231
|
puts "Missing a required parameter: #{@options.environ.nil? ? '--environment' : '--application'}"
|
208
232
|
puts
|
@@ -14,7 +14,7 @@ module EC2Launcher
|
|
14
14
|
include AWSInitializer
|
15
15
|
include BackoffRunner
|
16
16
|
|
17
|
-
def initialize(config_directory
|
17
|
+
def initialize(config_directory)
|
18
18
|
@log = Logger.new 'ec2launcher'
|
19
19
|
log_output = Outputter.stdout
|
20
20
|
log_output.formatter = PatternFormatter.new :pattern => "%m"
|
@@ -27,15 +27,6 @@ module EC2Launcher
|
|
27
27
|
|
28
28
|
@config = config_wrapper.config
|
29
29
|
@environments = config_wrapper.environments
|
30
|
-
|
31
|
-
##############################
|
32
|
-
# ENVIRONMENT
|
33
|
-
##############################
|
34
|
-
unless @environments.has_key? environment_name
|
35
|
-
@log.fatal "Environment not found: #{environment_name}"
|
36
|
-
exit 2
|
37
|
-
end
|
38
|
-
@environment = @environments[environment_name]
|
39
30
|
end
|
40
31
|
|
41
32
|
# Terminates a given server instance.
|
@@ -50,12 +41,6 @@ module EC2Launcher
|
|
50
41
|
##############################
|
51
42
|
initialize_aws(access_key, secret)
|
52
43
|
ec2 = AWS::EC2.new
|
53
|
-
|
54
|
-
##############################
|
55
|
-
# Create Route53 connection
|
56
|
-
##############################
|
57
|
-
aws_route53 = AWS::Route53.new if @environment.route53_zone_id
|
58
|
-
route53 = EC2Launcher::Route53.new(aws_route53, @environment.route53_zone_id, @log)
|
59
44
|
|
60
45
|
##############################
|
61
46
|
# Find instance
|
@@ -72,6 +57,27 @@ module EC2Launcher
|
|
72
57
|
end # memoize
|
73
58
|
|
74
59
|
if instance
|
60
|
+
environment_name = nil
|
61
|
+
AWS.memoize do
|
62
|
+
environment_name = instance.tags["environment"].strip
|
63
|
+
end
|
64
|
+
|
65
|
+
##############################
|
66
|
+
# ENVIRONMENT
|
67
|
+
##############################
|
68
|
+
unless @environments.has_key? environment_name
|
69
|
+
@log.fatal "Environment not found: '#{environment_name}'"
|
70
|
+
exit 2
|
71
|
+
end
|
72
|
+
@environment = @environments[environment_name]
|
73
|
+
|
74
|
+
##############################
|
75
|
+
# Create Route53 connection
|
76
|
+
##############################
|
77
|
+
aws_route53 = nil
|
78
|
+
aws_route53 = AWS::Route53.new if @environment.route53_zone_id
|
79
|
+
route53 = EC2Launcher::Route53.new(aws_route53, @environment.route53_zone_id, @log)
|
80
|
+
|
75
81
|
# Remove EBS snapshots
|
76
82
|
AWS.memoize do
|
77
83
|
remove_snapshots(ec2, instance) if snapshot_removal
|
@@ -103,14 +109,14 @@ module EC2Launcher
|
|
103
109
|
volumes = instance.block_device_mappings.values
|
104
110
|
|
105
111
|
# Iterate over over volumes to find snapshots
|
106
|
-
@log.info("
|
112
|
+
@log.info("Searching for snapshots...")
|
107
113
|
snapshots = []
|
108
114
|
volumes.each do |vol|
|
109
115
|
volume_snaps = ec2.snapshots.filter("volume-id", vol.volume.id)
|
110
116
|
volume_snaps.each {|volume_snapshot| snaphots << volume_snapshot }
|
111
117
|
end
|
112
118
|
|
113
|
-
@log.info("
|
119
|
+
@log.info("Deleting #{snapshots.size} snapshots...")
|
114
120
|
snapshots.each {|snap| snap.delete }
|
115
121
|
end
|
116
122
|
end
|
data/lib/ec2launcher/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ec2launcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|