CloudyScripts 2.14.50 → 2.14.52

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/Rakefile CHANGED
@@ -12,7 +12,7 @@ require 'rake/testtask'
12
12
 
13
13
  spec = Gem::Specification.new do |s|
14
14
  s.name = 'CloudyScripts'
15
- s.version = '2.14.50' #<number cloud-stacks supported>.<number cloud-scripts>.<counting releases>
15
+ s.version = '2.14.52' #<number cloud-stacks supported>.<number cloud-scripts>.<counting releases>
16
16
  s.has_rdoc = true
17
17
  s.extra_rdoc_files = ['README.rdoc', 'LICENSE']
18
18
  s.summary = 'Scripts to facilitate programming for infrastructure clouds.'
@@ -513,6 +513,15 @@ module StateTransitionHelper
513
513
  return image_id
514
514
  end
515
515
 
516
+ # Create an AMI from an EC2 instance
517
+ def create_image_from_instance(instance_id, name, description)
518
+ post_message("going to create AMI from instance #{instance_id}...")
519
+ @logger.debug "create AMI from instance #{instance_id} as #{name}"
520
+ res = ec2_handler().create_image(:instance_id => instance_id, :name => name, :description => description)
521
+ image_id = res['imageId']
522
+ return image_id
523
+ end
524
+
516
525
  # Create a file-system on a given machine (assumes to be connected already).
517
526
  # Input Parameters:
518
527
  # * dns_name => IP used
@@ -4,7 +4,6 @@ require "help/remote_command_handler"
4
4
  require "help/dm_crypt_helper"
5
5
  require "help/ec2_helper"
6
6
  require "AWS"
7
- require 'pp'
8
7
 
9
8
  # Copy a given snapshot to another region
10
9
  # * start up instance in source-region, create a snapshot from the mounted EBS
@@ -141,23 +140,19 @@ class CopyMsWindowsAmi < Ec2Script
141
140
  #NB: if we do not own this AMI, we have no snapshot, so we must launch an instance
142
141
  class InitialState < CopyMsWindowsAmiState
143
142
  def enter()
143
+ post_message("Retrieving AMI parammeters (snapshot ID, volume size, architecture)...")
144
144
  local_region()
145
- puts "Retrieving AMI parammeters"
146
145
  @context[:snapshot_id] = @local_ec2_helper.ami_blkdevmap_ebs_prop(@context[:ami_id], 'snapshotId')
147
146
  @context[:volume_size] = @local_ec2_helper.ami_blkdevmap_ebs_prop(@context[:ami_id], 'volumeSize')
148
147
  @context[:architecture] = @local_ec2_helper.ami_prop(@context[:ami_id], 'architecture')
149
148
  @context[:root_device_name] = @local_ec2_helper.ami_prop(@context[:ami_id], 'rootDeviceName')
150
- #puts "Setting Source and Target Availability Zone if not set"
151
- #@context[:source_availability_zone] = "us-east-1a" unless @context[:source_availability_zone] != nil
152
- #@context[:target_availability_zone] = "us-west-1a" unless @context[:target_availability_zone] != nil
153
-
149
+
154
150
  #try to access snapshot, if not possible, launch and stop an AMI to create one
155
151
  if !snapshot_accessible(@context[:snapshot_id])
156
- puts "The AMI's snapshot is NOT accessible, we must launch an instance to create one"
157
-
152
+ post_message("The AMI's snapshot is NOT accessible, we must launch an instance to create one")
153
+ InitialStateLaunch.new(@context)
158
154
  end
159
155
 
160
- #raise Exception.new("DEBUG: FORCED Script exit")
161
156
  InitialStateDone.new(@context)
162
157
  end
163
158
  end
@@ -165,15 +160,15 @@ class CopyMsWindowsAmi < Ec2Script
165
160
  # Consitionnal State (launching an instance and creating a snapshot)
166
161
  class InitialStateLaunch < CopyMsWindowsAmiState
167
162
  def enter()
163
+ post_message("Launching and stopping an instance of the AMI to create a snapshot")
168
164
  local_region()
169
- puts "Launching and stopping an instance of the AMI to create a snapshot"
170
165
  result = launch_instance(@context[:ami_id], @context[:source_key_name], @context[:source_security_groups])
171
166
  instance_id = result.first
172
- puts "Instance launched with ID: #{instance_id}"
173
- puts "Waiting 3 minutes before stopping instance '#{instance_id}' for creating a Snapshot of the rootDevice"
167
+ post_message("Instance launched with ID: #{instance_id}")
168
+ post_message("Waiting 3 minutes before stopping instance '#{instance_id}' for creating a Snapshot of the rootDevice")
174
169
  sleep(180)
175
170
  stop_instance(instance_id)
176
- puts "Instance '#{instance_id}' stopped, creating snapshot"
171
+ post_message("Instance '#{instance_id}' stopped, creating snapshot")
177
172
  ebs_volume_id = ec2_helper.get_attached_volumes(instance_id)[0]['volumeId']
178
173
  @context[:snapshot_id] = create_snapshot(ebs_volume_id, "Cloudy_Scripts Snapshot for copying AMIs")
179
174
 
@@ -184,14 +179,13 @@ class CopyMsWindowsAmi < Ec2Script
184
179
  # Initial state: Launch an Amazon Linux AMI in the source Region
185
180
  class InitialStateDone < CopyMsWindowsAmiState
186
181
  def enter()
182
+ post_message("Launching an Helper instance in the source Region...")
187
183
  local_region()
188
184
  result = launch_instance(@context[:source_ami_id], @context[:source_key_name], @context[:source_security_groups])
189
185
  @context[:source_instance_id] = result.first
190
186
  @context[:source_dns_name] = result[1]
191
187
  @context[:source_availability_zone] = result[2]
192
- #@context[:source_root_device_name] = @local_ec2_helper.ami_prop(@context[:source_ami_id], 'rootDeviceName')
193
188
  @context[:source_root_device_name] = result[6]
194
- puts "DEBUG: Parameters: #{@context[:source_instance_id]}, #{@context[:source_dns_name]}, #{@context[:source_availability_zone]}, #{@context[:source_root_device_name]}"
195
189
 
196
190
  SourceInstanceLaunchedState.new(@context)
197
191
  end
@@ -205,6 +199,7 @@ class CopyMsWindowsAmi < Ec2Script
205
199
  # - dump and compress the entire drive to the temp volume
206
200
  class SourceInstanceLaunchedState < CopyMsWindowsAmiState
207
201
  def enter()
202
+ post_message("Attaching volumes to the helper instance in the source Region...")
208
203
  local_region()
209
204
  # Step1: create and attach a volume from the Snapshot of the AMI to copy
210
205
  @context[:source_volume_id] = create_volume_from_snapshot(@context[:snapshot_id],
@@ -276,9 +271,7 @@ class CopyMsWindowsAmi < Ec2Script
276
271
  @context[:target_instance_id] = result.first
277
272
  @context[:target_dns_name] = result[1]
278
273
  @context[:target_availability_zone] = result[2]
279
- #@context[:remote_root_device_name] = @remote_ec2_helper.ami_prop(@context[:target_ami_id], 'rootDeviceName')
280
274
  @context[:target_root_device_name] = result[6]
281
- puts "DEBUG: Parameters: #{@context[:target_instance_id]}, #{@context[:target_dns_name]}, #{@context[:target_availability_zone]}, #{@context[:target_root_device_name]}"
282
275
 
283
276
  TargetInstanceLaunchedState.new(@context)
284
277
  end
@@ -430,6 +423,7 @@ class CopyMsWindowsAmi < Ec2Script
430
423
  @context[:helper_availability_zone] = result[2]
431
424
  @context[:helper_root_device_name] = result[6]
432
425
 
426
+ post_message("Creating NEW AMI using instance #{@context[:helper_instance_id]}...")
433
427
  #XXX:
434
428
  # - wait for it to be running, and then stop it
435
429
  # - wait for it to be stopped, and then start it with the new volume
@@ -446,8 +440,8 @@ class CopyMsWindowsAmi < Ec2Script
446
440
  stop_instance(@context[:helper_instance_id])
447
441
 
448
442
  #XXX: register as AMI
449
- new_ami_id = create_image(:instance_id => @context[:helper_instance_id],
450
- :name => @context[:name], :description => @context[:description])
443
+ new_ami_id = create_image_from_instance(@context[:helper_instance_id], @context[:name], @context[:description])
444
+ post_message("New AMI created with ID: #{new_ami_id}")
451
445
  @context[:result][:image_id] = new_ami_id
452
446
 
453
447
  AmiRegisteredState.new(@context)
@@ -120,12 +120,8 @@ class CopyMsWindowsSnapshot < Ec2Script
120
120
  class InitialState < CopyMsWindowsSnapshotState
121
121
  def enter()
122
122
  local_region()
123
- puts "Retrieving AMI parammeters"
123
+ post_message("Retrieving Snapshot parammeters (volume size)")
124
124
  @context[:volume_size] = @local_ec2_helper.snapshot_prop(@context[:snapshot_id], :volumeSize).to_i
125
- #puts "Setting Source and Target Availability Zone if not set"
126
- #@context[:source_availability_zone] = "us-east-1a" unless @context[:source_availability_zone] != nil
127
- #@context[:target_availability_zone] = "us-west-1a" unless @context[:target_availability_zone] != nil
128
- puts "DEBUG: Parameters: #{@context[:snapshot_id]}, #{@context[:volume_size]}"
129
125
 
130
126
  InitialStateDone.new(@context)
131
127
  end
@@ -135,13 +131,12 @@ class CopyMsWindowsSnapshot < Ec2Script
135
131
  class InitialStateDone < CopyMsWindowsSnapshotState
136
132
  def enter()
137
133
  local_region()
134
+ post_mesage("Lunching an Helper instance in source Region...")
138
135
  result = launch_instance(@context[:source_ami_id], @context[:source_key_name], @context[:source_security_groups])
139
136
  @context[:source_instance_id] = result.first
140
137
  @context[:source_dns_name] = result[1]
141
138
  @context[:source_availability_zone] = result[2]
142
- #@context[:source_root_device_name] = @local_ec2_helper.ami_prop(@context[:source_ami_id], 'rootDeviceName')
143
139
  @context[:source_root_device_name] = result[6]
144
- puts "DEBUG: Parameters: #{@context[:source_instance_id]}, #{@context[:source_dns_name]}, #{@context[:source_availability_zone]}, #{@context[:source_root_device_name]}"
145
140
 
146
141
  SourceInstanceLaunchedState.new(@context)
147
142
  end
@@ -226,9 +221,7 @@ class CopyMsWindowsSnapshot < Ec2Script
226
221
  @context[:target_instance_id] = result.first
227
222
  @context[:target_dns_name] = result[1]
228
223
  @context[:target_availability_zone] = result[2]
229
- #@context[:remote_root_device_name] = @remote_ec2_helper.ami_prop(@context[:target_ami_id], 'rootDeviceName')
230
224
  @context[:target_root_device_name] = result[6]
231
- puts "DEBUG: Parameters: #{@context[:target_instance_id]}, #{@context[:target_dns_name]}, #{@context[:target_availability_zone]}, #{@context[:target_root_device_name]}"
232
225
 
233
226
  TargetInstanceLaunchedState.new(@context)
234
227
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CloudyScripts
3
3
  version: !ruby/object:Gem::Version
4
- hash: 83
4
+ hash: 95
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 14
9
- - 50
10
- version: 2.14.50
9
+ - 52
10
+ version: 2.14.52
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matthias Jung
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-03 00:00:00 +00:00
18
+ date: 2012-02-23 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency