CloudyScripts 1.5.16 → 1.5.17
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 +1 -1
- data/lib/help/ec2_helper.rb +39 -0
- data/lib/help/remote_command_handler.rb +5 -2
- data/lib/help/state_transition_helper.rb +5 -1
- data/lib/scripts/ec2/ami2_ebs_conversion.rb +7 -0
- data/lib/scripts/ec2/copy_ami.rb +8 -0
- data/lib/scripts/ec2/copy_snapshot.rb +8 -0
- data/lib/scripts/ec2/download_snapshot.rb +7 -0
- metadata +3 -3
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 = '1.5.
|
15
|
+
s.version = '1.5.17'
|
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.'
|
data/lib/help/ec2_helper.rb
CHANGED
@@ -118,4 +118,43 @@ class Ec2Helper
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
+
# Checks if all ports are opened for the security group on range "0.0.0.0/0".
|
122
|
+
# If an additional range is specified in the parameter, a check returns
|
123
|
+
# true if a port is opened for either range 0.0.0.0/0 or the additional
|
124
|
+
# range specified.
|
125
|
+
# Returns true or false.
|
126
|
+
def check_open_port(security_group, port, range = "0.0.0.0/0")
|
127
|
+
res = @ec2_api.describe_security_groups(:group_name => security_group)
|
128
|
+
#puts "res = #{res.inspect}"
|
129
|
+
groups = res['securityGroupInfo']['item']
|
130
|
+
if groups.size == 0
|
131
|
+
raise Exception.new("security group '#{security_group}' not found")
|
132
|
+
end
|
133
|
+
permissions = groups[0]['ipPermissions']['item']
|
134
|
+
if permissions.size == 0
|
135
|
+
# no permissions at all
|
136
|
+
return false
|
137
|
+
end
|
138
|
+
permissions.each() {|permission|
|
139
|
+
#puts "permission: #{permission.inspect}"
|
140
|
+
if permission['ipRanges'] == nil
|
141
|
+
#no IP-Ranges defined (group based mode): ignore
|
142
|
+
next
|
143
|
+
end
|
144
|
+
from_port = permission['fromPort'].to_i
|
145
|
+
to_port = permission['toPort'].to_i
|
146
|
+
prot = permission['ipProtocol']
|
147
|
+
if port >= from_port && port <= to_port && prot == "tcp"
|
148
|
+
permission['ipRanges']['item'].each() {|ipRange|
|
149
|
+
if ipRange['cidrIp'] != "0.0.0.0/0" && ipRange['cidrIp'] != range
|
150
|
+
next
|
151
|
+
else
|
152
|
+
return true
|
153
|
+
end
|
154
|
+
}
|
155
|
+
end
|
156
|
+
}
|
157
|
+
false
|
158
|
+
end
|
159
|
+
|
121
160
|
end
|
@@ -122,10 +122,13 @@ class RemoteCommandHandler
|
|
122
122
|
end
|
123
123
|
|
124
124
|
# Zip the complete contents of the source path into the destination file.
|
125
|
+
# Returns the an array with stderr output messages.
|
125
126
|
def zip(source_path, destination_file)
|
126
127
|
begin
|
127
|
-
exec = "cd #{source_path}; zip -
|
128
|
-
|
128
|
+
exec = "cd #{source_path}; zip -ryq #{destination_file} *"
|
129
|
+
stderr = []
|
130
|
+
get_output(exec, nil, nil, stderr)
|
131
|
+
return stderr
|
129
132
|
rescue Exception => e
|
130
133
|
raise Exception.new("zip failed due to #{e.message}")
|
131
134
|
end
|
@@ -417,7 +417,11 @@ module StateTransitionHelper
|
|
417
417
|
# # zip_file_name => name of the zip file (without .zip suffix)
|
418
418
|
def zip_volume(source_dir, zip_file_dest, zip_file_name)
|
419
419
|
post_message("going to zip the EBS volume")
|
420
|
-
remote_handler().zip(source_dir, zip_file_dest+"/"+zip_file_name)
|
420
|
+
stderr = remote_handler().zip(source_dir, zip_file_dest+"/"+zip_file_name)
|
421
|
+
if stderr.size > 0
|
422
|
+
@logger.info("zip operation generated error and might not be complete. output: #{stderr.join("\n")}")
|
423
|
+
post_message("zip operation generated error and might not be complete. output: #{stderr.join("\n")}")
|
424
|
+
end
|
421
425
|
post_message("EBS volume successfully zipped")
|
422
426
|
end
|
423
427
|
|
@@ -28,6 +28,13 @@ class Ami2EbsConversion < Ec2Script
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def check_input_parameters()
|
31
|
+
if @input_params[:security_group_name] == nil
|
32
|
+
@input_params[:security_group_name] = "default"
|
33
|
+
end
|
34
|
+
ec2_helper = Ec2Helper.new(@input_params[:ec2_api_handler])
|
35
|
+
if !ec2_helper.check_open_port(@input_params[:security_group_name], 22)
|
36
|
+
raise Exception.new("Port 22 must be opened for security group #{@input_params[:security_group_name]} to connect via SSH")
|
37
|
+
end
|
31
38
|
if @input_params[:name] == nil
|
32
39
|
@input_params[:name] = "Boot EBS (for AMI #{@input_params[:ami_id]}) at #{Time.now.strftime('%d/%m/%Y %H.%M.%S')}"
|
33
40
|
else
|
data/lib/scripts/ec2/copy_ami.rb
CHANGED
@@ -42,6 +42,14 @@ class CopyAmi < Ec2Script
|
|
42
42
|
if ec2_helper.ami_prop(@input_params[:ami_id], 'rootDeviceType') != "ebs"
|
43
43
|
raise Exception.new("must be an EBS type image")
|
44
44
|
end
|
45
|
+
local_ec2_helper = ec2_helper
|
46
|
+
if !local_ec2_helper.check_open_port('default', 22)
|
47
|
+
raise Exception.new("Port 22 must be opened for security group 'default' to connect via SSH in source-region")
|
48
|
+
end
|
49
|
+
remote_ec2_helper = Ec2Helper.new(@input_params[:target_ec2_handler])
|
50
|
+
if !remote_ec2_helper.check_open_port('default', 22)
|
51
|
+
raise Exception.new("Port 22 must be opened for security group 'default' to connect via SSH in target-region")
|
52
|
+
end
|
45
53
|
if @input_params[:root_device_name] == nil
|
46
54
|
@input_params[:root_device_name] = "/dev/sda1"
|
47
55
|
end
|
@@ -35,6 +35,14 @@ class CopySnapshot< Ec2Script
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def check_input_parameters()
|
38
|
+
local_ec2_helper = Ec2Helper.new(@input_params[:ec2_api_handler])
|
39
|
+
if !local_ec2_helper.check_open_port('default', 22)
|
40
|
+
raise Exception.new("Port 22 must be opened for security group 'default' to connect via SSH in source-region")
|
41
|
+
end
|
42
|
+
remote_ec2_helper = Ec2Helper.new(@input_params[:target_ec2_handler])
|
43
|
+
if !remote_ec2_helper.check_open_port('default', 22)
|
44
|
+
raise Exception.new("Port 22 must be opened for security group 'default' to connect via SSH in target-region")
|
45
|
+
end
|
38
46
|
if @input_params[:source_ssh_username] == nil
|
39
47
|
@input_params[:source_ssh_username] = "root"
|
40
48
|
end
|
@@ -34,6 +34,13 @@ class DownloadSnapshot < Ec2Script
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def check_input_parameters()
|
37
|
+
if @input_params[:security_group_name] == nil
|
38
|
+
@input_params[:security_group_name] = "default"
|
39
|
+
end
|
40
|
+
ec2_helper = Ec2Helper.new(@input_params[:ec2_api_handler])
|
41
|
+
if !ec2_helper.check_open_port(@input_params[:security_group_name], 22)
|
42
|
+
raise Exception.new("Port 22 must be opened for security group #{@input_params[:security_group_name]} to connect via SSH")
|
43
|
+
end
|
37
44
|
if @input_params[:source_device] == nil
|
38
45
|
@input_params[:source_device] = "/dev/sdj1"
|
39
46
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 1.5.
|
8
|
+
- 17
|
9
|
+
version: 1.5.17
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matthias Jung
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-19 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|