ec2launcher 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ec2launcher/block_device_builder.rb +15 -23
- data/lib/ec2launcher/version.rb +1 -1
- metadata +1 -1
@@ -115,10 +115,14 @@ module EC2Launcher
|
|
115
115
|
base_device_name = "sdf"
|
116
116
|
application.block_devices.each do |block_device|
|
117
117
|
if block_device.raid_level.nil?
|
118
|
-
|
118
|
+
latest_snapshot = get_latest_snapshot_by_purpose(clone_host, block_device.name)
|
119
|
+
abort("Unable to find snapshot for #{clone_host} [#{block_device.name}]") if latest_snapshot.nil?
|
120
|
+
@block_device_mappings["/dev/#{base_device_name}"][:snapshot_id] = latest_snapshot.id
|
119
121
|
base_device_name.next!
|
120
122
|
else
|
121
123
|
snapshots = get_latest_raid_snapshot_mapping(clone_host, block_device.name, block_device.count)
|
124
|
+
abort("Unable to find snapshot for #{clone_host} [#{block_device.name}]") if snapshots.nil?
|
125
|
+
abort("Incorrect snapshot count for #{clone_host} [#{block_device.name}]. Expected: #{block_device.count}, Found: #{snapshots.length}") if snapshots.length != block_device.count
|
122
126
|
build_block_devices(block_device.count, base_device_name) do |device_name, index|
|
123
127
|
@block_device_mappings["/dev/#{device_name}"][:snapshot_id] = snapshots[(index + 1).to_s].id
|
124
128
|
end
|
@@ -134,7 +138,7 @@ module EC2Launcher
|
|
134
138
|
# @param [String] instance_type type of instance. See EC2Launcher::Defaults::INSTANCE_TYPES.
|
135
139
|
# @param [EC2Launcher::Environment] environment current environment
|
136
140
|
# @param [EC2Launcher::Application] application current application
|
137
|
-
# @param [String, nil] clone_host FQDN of host to clone or
|
141
|
+
# @param [String, nil] clone_host FQDN of host to clone or nil to skip cloning.
|
138
142
|
#
|
139
143
|
def generate_block_devices(hostname, short_hostname, instance_type, environment, application, clone_host = nil)
|
140
144
|
build_ephemeral_drives(instance_type)
|
@@ -236,32 +240,20 @@ module EC2Launcher
|
|
236
240
|
snapshot_mapping
|
237
241
|
end
|
238
242
|
|
239
|
-
# Retrieves the most recent snapshot
|
243
|
+
# Retrieves the most recent snapshot from a specific host that also has
|
244
|
+
# tag called "purpose" with the specified value.
|
240
245
|
#
|
241
|
-
# @param [String]
|
242
|
-
# @param [String
|
246
|
+
# @param [String] clone_host FQDN name of server with the volume to clone.
|
247
|
+
# @param [String] purpose Value of the purpose tag.
|
243
248
|
#
|
244
249
|
# @return [AWS::EC2::Snapshot, nil] matching snapshot or nil if no matching snapshot
|
245
250
|
#
|
246
|
-
def
|
247
|
-
puts " Retrieving
|
248
|
-
|
249
|
-
|
250
|
-
filter += " (#{server_name} #{extra})" unless extra.nil? || extra.empty?
|
251
|
-
get_latest_snapshot_by_name(filter)
|
252
|
-
end
|
253
|
-
|
254
|
-
# Retrieves the most recent snapshot for a volume with a specific name
|
255
|
-
#
|
256
|
-
# @param [String] name_filter AWS compatible filter for the Name tag on a snapshot
|
257
|
-
#
|
258
|
-
# @return [AWS::EC2::Snapshot, nil] matching snapshot or nil if no matching snapshot
|
259
|
-
#
|
260
|
-
def get_latest_snapshot_by_name(name_filter)
|
261
|
-
puts " Retrieving snapshot with filter tag:Name='#{name_filter}'"
|
262
|
-
|
251
|
+
def get_latest_snapshot_by_purpose(clone_host, purpose)
|
252
|
+
puts " Retrieving snapshtos for #{clone_host} [#{purpose}]"
|
253
|
+
results = @ec2.snapshots.tagged("host").tagged_values(clone_host).tagged("purpose").tagged_values(purpose)
|
254
|
+
|
263
255
|
snapshot = nil
|
264
|
-
|
256
|
+
results.each do |s|
|
265
257
|
next unless s.status == :completed
|
266
258
|
snapshot = s if snapshot.nil? || snapshot.start_time < s.start_time
|
267
259
|
end
|
data/lib/ec2launcher/version.rb
CHANGED