CloudyScripts 2.14.54 → 2.14.58
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 +2 -1
- data/lib/help/remote_command_handler.rb +16 -3
- data/lib/help/state_transition_helper.rb +112 -21
- data/lib/scripts/ec2/copy_mswindows_snapshot.rb +33 -8
- metadata +4 -4
data/Rakefile
CHANGED
@@ -12,7 +12,8 @@ require 'rake/testtask'
|
|
12
12
|
|
13
13
|
spec = Gem::Specification.new do |s|
|
14
14
|
s.name = 'CloudyScripts'
|
15
|
-
s.version = '2.14.54' #<number cloud-stacks supported>.<number cloud-scripts>.<counting releases>
|
15
|
+
#s.version = '2.14.54' #<number cloud-stacks supported>.<number cloud-scripts>.<counting releases>
|
16
|
+
s.version = '2.14.58' #<number cloud-stacks supported>.<number cloud-scripts>.<counting releases>
|
16
17
|
s.has_rdoc = true
|
17
18
|
s.extra_rdoc_files = ['README.rdoc', 'LICENSE']
|
18
19
|
s.summary = 'Scripts to facilitate programming for infrastructure clouds.'
|
@@ -60,6 +60,10 @@ class RemoteCommandHandler
|
|
60
60
|
remote_execute("ls #{path}")
|
61
61
|
end
|
62
62
|
|
63
|
+
def file_size(file)
|
64
|
+
get_output("ls -lh #{file} | cut -d ' ' -f 5").strip
|
65
|
+
end
|
66
|
+
|
63
67
|
# Returns the result of uname -a (Linux)
|
64
68
|
def retrieve_os()
|
65
69
|
get_output("uname -r").strip
|
@@ -251,14 +255,23 @@ class RemoteCommandHandler
|
|
251
255
|
|
252
256
|
# dump and compress a device in a file locally
|
253
257
|
def local_dump_and_compress(source_device, target_filename)
|
254
|
-
e = "sh -c 'dd if=#{source_device} | gzip > #{target_filename}'"
|
258
|
+
#e = "sh -c 'dd if=#{source_device} | gzip > #{target_filename}'"
|
259
|
+
e = "sh -c 'dd if=#{source_device} bs=512k | gzip -1 > #{target_filename}'"
|
255
260
|
@logger.debug "going to execute #{e}"
|
256
261
|
status = remote_exec_helper(e, nil, nil, true)
|
257
262
|
end
|
258
263
|
|
259
|
-
#
|
264
|
+
# dump a file to a device locally
|
260
265
|
def local_decompress_and_dump(source_filename, target_device)
|
261
|
-
e = "sh -c 'gunzip -c #{source_filename} | dd of=#{target_device}'"
|
266
|
+
#e = "sh -c 'gunzip -c #{source_filename} | dd of=#{target_device}'"
|
267
|
+
e = "sh -c 'gunzip -1 -c #{source_filename} | dd of=#{target_device} bs=512k'"
|
268
|
+
@logger.debug "going to execute #{e}"
|
269
|
+
status = remote_exec_helper(e, nil, nil, true)
|
270
|
+
end
|
271
|
+
|
272
|
+
# dump a device in a local file or a dump local file to a device
|
273
|
+
def local_dump(source_device, target_filename)
|
274
|
+
e = "sh -c 'dd if=#{source_device} of=#{target_filename} bs=1M'"
|
262
275
|
@logger.debug "going to execute #{e}"
|
263
276
|
status = remote_exec_helper(e, nil, nil, true)
|
264
277
|
end
|
@@ -358,6 +358,7 @@ module StateTransitionHelper
|
|
358
358
|
def create_volume_from_snapshot(snapshot_id, availability_zone)
|
359
359
|
post_message("going to create a new EBS volume from the specified snapshot...")
|
360
360
|
@logger.debug "create volume in zone #{availability_zone}"
|
361
|
+
start_time = Time.new.to_i
|
361
362
|
res = ec2_handler().create_volume(:snapshot_id => snapshot_id, :availability_zone => availability_zone)
|
362
363
|
volume_id = res['volumeId']
|
363
364
|
started = false
|
@@ -371,7 +372,9 @@ module StateTransitionHelper
|
|
371
372
|
started = true
|
372
373
|
end
|
373
374
|
end
|
374
|
-
|
375
|
+
end_time = Time.new.to_i
|
376
|
+
@logger.info "create volume from snapshot took #{(end_time-start_time)}s"
|
377
|
+
post_message("EBS volume #{volume_id} is ready (took #{end_time-start_time}s)")
|
375
378
|
return volume_id
|
376
379
|
end
|
377
380
|
|
@@ -382,7 +385,7 @@ module StateTransitionHelper
|
|
382
385
|
# * temp_device_name => device name to be used for attaching (e.g. /dev/sdj1)
|
383
386
|
def attach_volume(volume_id, instance_id, temp_device_name, timeout = 240)
|
384
387
|
post_message("going to attach volume #{volume_id} to instance #{instance_id} on device #{temp_device_name}...")
|
385
|
-
@logger.info "attach volume #{volume_id} to instance #{instance_id} on device #{temp_device_name} (using a timeout of #{timeout})
|
388
|
+
@logger.info "attach volume #{volume_id} to instance #{instance_id} on device #{temp_device_name} (using a timeout of #{timeout}s)"
|
386
389
|
ec2_handler().attach_volume(:volume_id => volume_id,
|
387
390
|
:instance_id => instance_id,
|
388
391
|
:device => temp_device_name
|
@@ -422,7 +425,7 @@ module StateTransitionHelper
|
|
422
425
|
# * instance_id => EC2 ID for the instance to detach from
|
423
426
|
def detach_volume(volume_id, instance_id, timeout = 240)
|
424
427
|
post_message("going to detach volume #{volume_id} from instance #{instance_id}...")
|
425
|
-
@logger.info "detach volume #{volume_id} from instance #{instance_id} (using a timeout of #{timeout})
|
428
|
+
@logger.info "detach volume #{volume_id} from instance #{instance_id} (using a timeout of #{timeout}s)"
|
426
429
|
ec2_handler().detach_volume(:volume_id => volume_id,
|
427
430
|
:instance_id => instance_id
|
428
431
|
)
|
@@ -469,6 +472,7 @@ module StateTransitionHelper
|
|
469
472
|
def create_snapshot(volume_id, description = "")
|
470
473
|
post_message("going to create a snapshot for volume #{volume_id}...")
|
471
474
|
@logger.debug "create snapshot for volume #{volume_id}"
|
475
|
+
start_time = Time.new.to_i
|
472
476
|
res = ec2_handler().create_snapshot(:volume_id => volume_id,
|
473
477
|
:description => description)
|
474
478
|
snapshot_id = res['snapshotId']
|
@@ -483,7 +487,9 @@ module StateTransitionHelper
|
|
483
487
|
done = true
|
484
488
|
end
|
485
489
|
end
|
486
|
-
|
490
|
+
end_time = Time.new.to_i
|
491
|
+
@logger.info "create snapshot took #{(end_time-start_time)}s"
|
492
|
+
post_message("snapshot is done with ID=#{snapshot_id} (took #{(end_time-start_time)}s)")
|
487
493
|
return snapshot_id
|
488
494
|
end
|
489
495
|
|
@@ -914,7 +920,7 @@ module StateTransitionHelper
|
|
914
920
|
# dump and compress a device using dd and gzip
|
915
921
|
def local_dump_and_compress_device_to_file(source_device, target_filename)
|
916
922
|
post_message("going to start dumping and compressing source device '#{source_device}' to '#{target_filename}' file. This may take quite a time...")
|
917
|
-
@logger.
|
923
|
+
@logger.info "start dumping and compressing '#{source_device}' to '#{target_filename}'"
|
918
924
|
start_time = Time.new.to_i
|
919
925
|
if remote_handler().tools_installed?("dd") && remote_handler().tools_installed?("gzip")
|
920
926
|
@logger.debug "use dd and gzip command line"
|
@@ -928,14 +934,37 @@ module StateTransitionHelper
|
|
928
934
|
raise Exception.new("dd and/or gzip tools not installed")
|
929
935
|
end
|
930
936
|
end_time = Time.new.to_i
|
931
|
-
|
932
|
-
|
937
|
+
filesize = remote_handler().file_size(target_filename)
|
938
|
+
@logger.info "dump and compress to a #{filesize} file took #{(end_time-start_time)}s"
|
939
|
+
post_message("dumping and compressing to a #{filesize} file done (took #{end_time-start_time}s)")
|
940
|
+
end
|
941
|
+
|
942
|
+
# dump a device using dd
|
943
|
+
def local_dump_device_to_file(source_device, target_filename)
|
944
|
+
post_message("going to start dumping source device '#{source_device}' to '#{target_filename}' file. This may take quite a time...")
|
945
|
+
@logger.info "start dumping '#{source_device}' to '#{target_filename}'"
|
946
|
+
start_time = Time.new.to_i
|
947
|
+
if remote_handler().tools_installed?("dd")
|
948
|
+
@logger.debug "use dd command line"
|
949
|
+
status = remote_handler().local_dump(source_device, target_filename)
|
950
|
+
if status == false
|
951
|
+
@logger.error "failed to dump device"
|
952
|
+
raise Exception.new("failed to dump device")
|
953
|
+
end
|
954
|
+
else
|
955
|
+
@logger.error "dd tool not installed"
|
956
|
+
raise Exception.new("dd tool not installed")
|
957
|
+
end
|
958
|
+
end_time = Time.new.to_i
|
959
|
+
filesize = remote_handler().file_size(target_filename)
|
960
|
+
@logger.info "dump to a #{filesize} file took #{(end_time-start_time)}s"
|
961
|
+
post_message("dumping to a #{filesize} file done (took #{end_time-start_time}s)")
|
933
962
|
end
|
934
963
|
|
935
964
|
# decompress and dump a file using gunzip and dd
|
936
965
|
def local_decompress_and_dump_file_to_device(source_filename, target_device)
|
937
966
|
post_message("going to start decompressing and dumping file '#{source_filename}' to '#{target_device}' target device. This may take quite a time...")
|
938
|
-
@logger.
|
967
|
+
@logger.info "start decompressing and dumping '#{source_filename}' to '#{target_device}'"
|
939
968
|
start_time = Time.new.to_i
|
940
969
|
if remote_handler().tools_installed?("dd") && remote_handler().tools_installed?("gunzip")
|
941
970
|
@logger.debug "use dd and gzip command line"
|
@@ -949,27 +978,52 @@ module StateTransitionHelper
|
|
949
978
|
raise Exception.new("dd and/or gunzip tools not installed")
|
950
979
|
end
|
951
980
|
end_time = Time.new.to_i
|
952
|
-
|
953
|
-
|
981
|
+
filesize = remote_handler().file_size(source_filename)
|
982
|
+
@logger.info "decompress and dump file of #{filesize} took #{(end_time-start_time)}s"
|
983
|
+
post_message("decompressing and dumping file of #{filesize} done (took #{end_time-start_time}s)")
|
984
|
+
end
|
985
|
+
|
986
|
+
# dump a file using dd
|
987
|
+
def local_dump_file_to_device(source_filename, target_device)
|
988
|
+
post_message("going to start dumping file '#{source_filename}' to '#{target_device}' target device. This may take quite a time...")
|
989
|
+
@logger.info "start dumping '#{source_filename}' to '#{target_device}'"
|
990
|
+
start_time = Time.new.to_i
|
991
|
+
if remote_handler().tools_installed?("dd")
|
992
|
+
@logger.debug "use dd command line"
|
993
|
+
status = remote_handler().local_dump(source_filename, target_device)
|
994
|
+
if status == false
|
995
|
+
@logger.error "failed to dump file"
|
996
|
+
raise Exception.new("failed to dump file")
|
997
|
+
end
|
998
|
+
else
|
999
|
+
@logger.error "dd tool not installed"
|
1000
|
+
raise Exception.new("dd tool not installed")
|
1001
|
+
end
|
1002
|
+
end_time = Time.new.to_i
|
1003
|
+
filesize = remote_handler().file_size(source_filename)
|
1004
|
+
@logger.info "dump file of #{filesize} took #{(end_time-start_time)}s"
|
1005
|
+
post_message("dumping file of #{filesize} done (took #{end_time-start_time}s)")
|
954
1006
|
end
|
955
1007
|
|
956
1008
|
def disable_ssh_tty(host)
|
957
1009
|
post_message("going to disable SSH tty on #{host}...")
|
958
|
-
@logger.
|
1010
|
+
@logger.info "disable SSH tty on #{host}"
|
959
1011
|
remote_handler().disable_sudoers_requiretty()
|
960
1012
|
post_message("SSH tty disabled")
|
961
1013
|
end
|
962
1014
|
|
963
1015
|
def enable_ssh_tty(host)
|
964
1016
|
post_message("going to enable SSH tty on #{host}...")
|
965
|
-
@logger.
|
1017
|
+
@logger.info "enable SSH tty on #{host}"
|
966
1018
|
remote_handler().enable_sudoers_requiretty()
|
967
1019
|
post_message("SSH tty enabled")
|
968
1020
|
end
|
969
1021
|
|
970
1022
|
def remote_copy(user_name, keyname, source_dir, dest_machine, dest_user, dest_dir)
|
971
1023
|
post_message("going to remote copy all files from volume. This may take some time...")
|
1024
|
+
@logger.info "going to remote copy all files from volume. This may take some time..."
|
972
1025
|
key_path_candidates = ["/#{user_name}/.ssh/", "/home/#{user_name}/.ssh/"]
|
1026
|
+
start_time = Time.new.to_i
|
973
1027
|
key_path_candidates.each() {|key_path|
|
974
1028
|
key_file = "#{key_path}#{keyname}.pem"
|
975
1029
|
if remote_handler().file_exists?(key_path)
|
@@ -983,7 +1037,9 @@ module StateTransitionHelper
|
|
983
1037
|
break
|
984
1038
|
end
|
985
1039
|
}
|
986
|
-
|
1040
|
+
end_time = Time.new.to_i
|
1041
|
+
@logger.info "remote copy operation took #{(end_time-start_time)}s"
|
1042
|
+
post_message("remote copy operation done (took #{end_time-start_time}s)")
|
987
1043
|
end
|
988
1044
|
|
989
1045
|
def upload_file(ip, user, key_data, file, target_file)
|
@@ -1078,6 +1134,11 @@ module StateTransitionHelper
|
|
1078
1134
|
'aki-8e5ea7e7' => 'pv-grub-hd00_1.02-x86_64',
|
1079
1135
|
'aki-805ea7e9' => 'pv-grub-hd0_1.02-i386',
|
1080
1136
|
'aki-825ea7eb' => 'pv-grub-hd0_1.02-x86_64',
|
1137
|
+
'aki-b6aa75df' => 'pv-grub-hd0_1.03-i386',
|
1138
|
+
'aki-88aa75e1' => 'pv-grub-hd0_1.03-x86_64',
|
1139
|
+
'aki-b2aa75db' => 'pv-grub-hd00_1.03-i386',
|
1140
|
+
'aki-b4aa75dd' => 'pv-grub-hd00_1.03-x86_64',
|
1141
|
+
|
1081
1142
|
#RHEL kernel Amazon Kernel ID
|
1082
1143
|
'aki-36ed075f' => 'aki-rhel-i386',
|
1083
1144
|
'aki-08ed0761' => 'aki-rhel-x86_64'
|
@@ -1090,9 +1151,14 @@ module StateTransitionHelper
|
|
1090
1151
|
'aki-81396bc4' => 'pv-grub-hd00_1.02-x86_64',
|
1091
1152
|
'aki-83396bc6' => 'pv-grub-hd0_1.02-i386',
|
1092
1153
|
'aki-8d396bc8' => 'pv-grub-hd0_1.02-x86_64',
|
1093
|
-
|
1094
|
-
'aki-
|
1095
|
-
'aki-
|
1154
|
+
'aki-f57e26b0' => 'pv-grub-hd0_1.03-i386',
|
1155
|
+
'aki-f77e26b2' => 'pv-grub-hd0_1.03-x86_64',
|
1156
|
+
'aki-e97e26ac' => 'pv-grub-hd00_1.03-i386',
|
1157
|
+
'aki-eb7e26ae' => 'pv-grub-hd00_1.03-x86_64',
|
1158
|
+
|
1159
|
+
#RHEL kernel Amazon Kernel ID:
|
1160
|
+
'aki-772c7f32' => 'aki-rhel-i386', # RH-pv-grub-hd0-V1.01-i386
|
1161
|
+
'aki-712c7f34' => 'aki-rhel-x86_64' # RH-pv-grub-hd0-V1.01-x86_64
|
1096
1162
|
},
|
1097
1163
|
'us-west-2' => {'aki-dee26fee' => 'pv-grub-hd00-V1.01-i386',
|
1098
1164
|
'aki-90e26fa0' => 'pv-grub-hd00-V1.01-x86_64',
|
@@ -1102,9 +1168,14 @@ module StateTransitionHelper
|
|
1102
1168
|
'aki-94e26fa4' => 'pv-grub-hd00_1.02-x86_64',
|
1103
1169
|
'aki-c2e26ff2' => 'pv-grub-hd0_1.02-i386',
|
1104
1170
|
'aki-98e26fa8' => 'pv-grub-hd0_1.02-x86_64',
|
1171
|
+
'aki-fa37baca' => 'pv-grub-hd0_1.03-i386',
|
1172
|
+
'aki-fc37bacc' => 'pv-grub-hd0_1.03-x86_64',
|
1173
|
+
'aki-f637bac6' => 'pv-grub-hd00_1.03-i386',
|
1174
|
+
'aki-f837bac8' => 'pv-grub-hd00_1.03-x86_64',
|
1175
|
+
|
1105
1176
|
#RHEL kernel Amazon Kernel ID
|
1106
|
-
'' => 'aki-rhel-i386',
|
1107
|
-
'' => 'aki-rhel-x86_64'
|
1177
|
+
'aki-2efa771e' => 'aki-rhel-i386',
|
1178
|
+
'aki-10fa7720' => 'aki-rhel-x86_64'
|
1108
1179
|
},
|
1109
1180
|
'eu-west-1' => {'aki-47eec433' => 'pv-grub-hd00-V1.01-i386',
|
1110
1181
|
'aki-41eec435' => 'pv-grub-hd00-V1.01-x86_64',
|
@@ -1114,6 +1185,11 @@ module StateTransitionHelper
|
|
1114
1185
|
'aki-60695814' => 'pv-grub-hd00_1.02-x86_64',
|
1115
1186
|
'aki-64695810' => 'pv-grub-hd0_1.02-i386',
|
1116
1187
|
'aki-62695816' => 'pv-grub-hd0_1.02-x86_64',
|
1188
|
+
'aki-75665e01' => 'pv-grub-hd0_1.03-i386',
|
1189
|
+
'aki-71665e05' => 'pv-grub-hd0_1.03-x86_64',
|
1190
|
+
'aki-89655dfd' => 'pv-grub-hd00_1.03-i386',
|
1191
|
+
'aki-8b655dff' => 'pv-grub-hd00_1.03-x86_64',
|
1192
|
+
|
1117
1193
|
#RHEL kernel Amazon Kernel ID
|
1118
1194
|
'aki-af0a3ddb' => 'aki-rhel-i386',
|
1119
1195
|
'aki-a90a3ddd' => 'aki-rhel-x86_64'
|
@@ -1126,6 +1202,11 @@ module StateTransitionHelper
|
|
1126
1202
|
'aki-a6225af4' => 'pv-grub-hd00_1.02-x86_64',
|
1127
1203
|
'aki-a4225af6' => 'pv-grub-hd0_1.02-i386',
|
1128
1204
|
'aki-aa225af8' => 'pv-grub-hd0_1.02-x86_64',
|
1205
|
+
'aki-f81354aa' => 'pv-grub-hd0_1.03-i386',
|
1206
|
+
'aki-fe1354ac' => 'pv-grub-hd0_1.03-x86_64',
|
1207
|
+
'aki-f41354a6' => 'pv-grub-hd00_1.03-i386',
|
1208
|
+
'aki-fa1354a8' => 'pv-grub-hd00_1.03-x86_64',
|
1209
|
+
|
1129
1210
|
#RHEL kernel Amazon Kernel ID
|
1130
1211
|
'aki-9c235ace' => 'aki-rhel-i386',
|
1131
1212
|
'aki-82235ad0' => 'aki-rhel-x86_64'
|
@@ -1138,9 +1219,14 @@ module StateTransitionHelper
|
|
1138
1219
|
'aki-ea5df7eb' => 'pv-grub-hd00_1.02-x86_64',
|
1139
1220
|
'aki-ec5df7ed' => 'pv-grub-hd0_1.02-i386',
|
1140
1221
|
'aki-ee5df7ef' => 'pv-grub-hd0_1.02-x86_64',
|
1222
|
+
'aki-42992843' => 'pv-grub-hd0_1.03-i386',
|
1223
|
+
'aki-44992845' => 'pv-grub-hd0_1.03-x86_64',
|
1224
|
+
'aki-3e99283f' => 'pv-grub-hd00_1.03-i386',
|
1225
|
+
'aki-40992841' => 'pv-grub-hd00_1.03-x86_64',
|
1226
|
+
|
1141
1227
|
#RHEL kernel Amazon Kernel ID
|
1142
1228
|
'aki-66c06a67' => 'aki-rhel-i386',
|
1143
|
-
'aki-68c06a69' => 'aki-rhel-x86_64'
|
1229
|
+
'aki-68c06a69' => 'aki-rhel-x86_64'
|
1144
1230
|
},
|
1145
1231
|
'sa-east-1' => {'aki-803ce39d' => 'pv-grub-hd00-V1.01-i386',
|
1146
1232
|
'aki-d03ce3cd' => 'pv-grub-hd00-V1.01-x86_64',
|
@@ -1150,9 +1236,14 @@ module StateTransitionHelper
|
|
1150
1236
|
'aki-cc3ce3d1' => 'pv-grub-hd00_1.02-x86_64',
|
1151
1237
|
'aki-823ce39f' => 'pv-grub-hd0_1.02-i386',
|
1152
1238
|
'aki-d23ce3cf' => 'pv-grub-hd0_1.02-x86_64',
|
1239
|
+
'aki-ca8f51d7' => 'pv-grub-hd0_1.03-i386',
|
1240
|
+
'aki-c48f51d9' => 'pv-grub-hd0_1.03-x86_64',
|
1241
|
+
'aki-ce8f51d3' => 'pv-grub-hd00_1.03-i386',
|
1242
|
+
'aki-c88f51d5' => 'pv-grub-hd00_1.03-x86_64',
|
1243
|
+
|
1153
1244
|
#RHEL kernel Amazon Kernel ID
|
1154
|
-
'' => 'aki-rhel-i386',
|
1155
|
-
'' => 'aki-rhel-x86_64'
|
1245
|
+
'aki-1a38e707' => 'aki-rhel-i386',
|
1246
|
+
'aki-1438e709' => 'aki-rhel-x86_64'
|
1156
1247
|
}
|
1157
1248
|
}
|
1158
1249
|
target_aki = ''
|
@@ -86,6 +86,11 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
86
86
|
if @input_params[:description] == nil || check_string_alnum(@input_params[:description])
|
87
87
|
@input_params[:description] = "Created by Cloudy_Scripts - copy_mswindows_snapshot"
|
88
88
|
end
|
89
|
+
if @input_params[:compression] != nil && (@input_params[:compression] =~ /^on$/i)
|
90
|
+
@input_params[:compression] = true
|
91
|
+
else
|
92
|
+
@input_params[:compression] = false
|
93
|
+
end
|
89
94
|
end
|
90
95
|
|
91
96
|
# Load the initial state for the script.
|
@@ -135,7 +140,8 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
135
140
|
def enter()
|
136
141
|
local_region()
|
137
142
|
post_message("Lunching an Helper instance in source Region...")
|
138
|
-
result = launch_instance(@context[:source_ami_id], @context[:source_key_name], @context[:source_security_groups]
|
143
|
+
result = launch_instance(@context[:source_ami_id], @context[:source_key_name], @context[:source_security_groups],
|
144
|
+
nil, @context[:instance_type])
|
139
145
|
@context[:source_instance_id] = result.first
|
140
146
|
@context[:source_dns_name] = result[1]
|
141
147
|
@context[:source_availability_zone] = result[2]
|
@@ -178,7 +184,11 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
178
184
|
post_message("Using AWS name source device '#{@context[:device_name]}' and OS name '#{source_device}'")
|
179
185
|
@context[:source_device_name] = source_device
|
180
186
|
# Step2: create and attach a temp volume of the same size to dump and compress the entire drive
|
181
|
-
|
187
|
+
if @context[:compression]
|
188
|
+
@context[:source_temp_volume_id] = create_volume(@context[:source_availability_zone], @context[:volume_size])
|
189
|
+
else
|
190
|
+
@context[:source_temp_volume_id] = create_volume(@context[:source_availability_zone], @context[:volume_size] + 4)
|
191
|
+
end
|
182
192
|
temp_device = @context[:temp_device_name]
|
183
193
|
attach_volume(@context[:source_temp_volume_id], @context[:source_instance_id], temp_device)
|
184
194
|
aws_device_letter = temp_device.split('/')[2].gsub('sd', '').gsub('xvd', '').gsub(/[0-9]/, '')
|
@@ -206,8 +216,13 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
206
216
|
local_region()
|
207
217
|
connect(@context[:source_dns_name], @context[:source_ssh_username], nil, @context[:source_ssh_keydata])
|
208
218
|
mount_point = "/mnt/tmp_#{@context[:source_temp_volume_id]}"
|
209
|
-
|
210
|
-
|
219
|
+
if @context[:compression]
|
220
|
+
@context[:source_filename] = "#{mount_point}" + "/" + "#{@context[:snapshot_id]}" + ".img.gz"
|
221
|
+
local_dump_and_compress_device_to_file(@context[:source_device_name], @context[:source_filename])
|
222
|
+
else
|
223
|
+
@context[:source_filename] = "#{mount_point}" + "/" + "#{@context[:snapshot_id]}" + ".img"
|
224
|
+
local_dump_device_to_file(@context[:source_device_name], @context[:source_filename])
|
225
|
+
end
|
211
226
|
disconnect()
|
212
227
|
|
213
228
|
BackupedDataState.new(@context)
|
@@ -220,7 +235,8 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
220
235
|
class BackupedDataState < CopyMsWindowsSnapshotState
|
221
236
|
def enter()
|
222
237
|
remote_region()
|
223
|
-
result = launch_instance(@context[:target_ami_id], @context[:target_key_name], @context[:target_security_groups]
|
238
|
+
result = launch_instance(@context[:target_ami_id], @context[:target_key_name], @context[:target_security_groups],
|
239
|
+
nil, @context[:instance_type])
|
224
240
|
@context[:target_instance_id] = result.first
|
225
241
|
@context[:target_dns_name] = result[1]
|
226
242
|
@context[:target_availability_zone] = result[2]
|
@@ -239,7 +255,11 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
239
255
|
def enter()
|
240
256
|
remote_region()
|
241
257
|
# Step1: create and attach a temp volume for receiving archive of the drive
|
242
|
-
|
258
|
+
if @context[:compression]
|
259
|
+
@context[:target_temp_volume_id] = create_volume(@context[:target_availability_zone], @context[:volume_size])
|
260
|
+
else
|
261
|
+
@context[:target_temp_volume_id] = create_volume(@context[:target_availability_zone], @context[:volume_size] + 4)
|
262
|
+
end
|
243
263
|
temp_device = @context[:temp_device_name]
|
244
264
|
attach_volume(@context[:target_temp_volume_id], @context[:target_instance_id], temp_device)
|
245
265
|
connect(@context[:target_dns_name], @context[:target_ssh_username], nil, @context[:target_ssh_keydata])
|
@@ -335,8 +355,13 @@ class CopyMsWindowsSnapshot < Ec2Script
|
|
335
355
|
remote_region()
|
336
356
|
connect(@context[:target_dns_name], @context[:target_ssh_username], nil, @context[:target_ssh_keydata])
|
337
357
|
mount_point = "/mnt/tmp_#{@context[:target_temp_volume_id]}"
|
338
|
-
|
339
|
-
|
358
|
+
if @context[:compression]
|
359
|
+
@context[:source_filename] = "#{mount_point}" + "/" + "#{@context[:snapshot_id]}" + ".img.gz"
|
360
|
+
local_decompress_and_dump_file_to_device(@context[:source_filename], @context[:target_device_name])
|
361
|
+
else
|
362
|
+
@context[:source_filename] = "#{mount_point}" + "/" + "#{@context[:snapshot_id]}" + ".img"
|
363
|
+
local_dump_file_to_device(@context[:source_filename], @context[:target_device_name])
|
364
|
+
end
|
340
365
|
disconnect()
|
341
366
|
|
342
367
|
RestoredDataState.new(@context)
|
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:
|
4
|
+
hash: 67
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 14
|
9
|
-
-
|
10
|
-
version: 2.14.
|
9
|
+
- 58
|
10
|
+
version: 2.14.58
|
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-
|
18
|
+
date: 2012-07-13 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|