CloudyScripts 1.5.16 → 1.5.17
Sign up to get free protection for your applications and to get access to all the features.
- 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
|