ec2launcher 1.4.1 → 1.4.2
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/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
|