CloudyScripts 0.0.11 → 0.0.12
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/LICENSE +7 -7
- data/README.rdoc +27 -27
- data/Rakefile +50 -50
- data/lib/cloudyscripts.rb +26 -26
- data/lib/help/dm_crypt_helper.rb +53 -54
- data/lib/help/ec2_helper.rb +54 -54
- data/lib/help/remote_command_handler.rb +213 -203
- data/lib/help/script_execution_state.rb +108 -97
- data/lib/help/state_change_listener.rb +13 -13
- data/lib/help/state_transition_helper.rb +362 -0
- data/lib/scripts/ec2/ami2_ebs_conversion.rb +180 -477
- data/lib/scripts/ec2/dm_encrypt.rb +147 -205
- data/lib/scripts/ec2/download_snapshot.rb +153 -0
- data/lib/scripts/ec2/ec2_script.rb +101 -52
- metadata +4 -2
@@ -1,52 +1,101 @@
|
|
1
|
-
# Base class for any script on EC2.
|
2
|
-
class Ec2Script
|
3
|
-
# Initialization. Common Input parameters:
|
4
|
-
# * aws_access_key => the Amazon AWS Access Key (see Your Account -> Security Credentials)
|
5
|
-
# * aws_secret_key => the Amazon AWS Secret Key
|
6
|
-
# * ec2_api_server => the API Server to connect to (optional, default is us-east-1 (=> <ec2_api_server>.ec2.amazonaws.com)
|
7
|
-
# * logger => allows to pass a ruby logger object used for logging (optional, default is a stdout logger with level WARN)
|
8
|
-
# Scripts may add specific key/value pairs.
|
9
|
-
def initialize(input_params)
|
10
|
-
@input_params = input_params
|
11
|
-
@state_change_listeners = []
|
12
|
-
@progress_message_listeners = []
|
13
|
-
if input_params[:logger] == nil
|
14
|
-
@logger = Logger.new(STDOUT)
|
15
|
-
@logger .level = Logger::WARN
|
16
|
-
input_params[:logger] = @logger
|
17
|
-
end
|
18
|
-
@result = {:done => false, :failed => false}
|
19
|
-
@input_params[:result] = @result
|
20
|
-
end
|
21
|
-
|
22
|
-
def register_state_change_listener(listener)
|
23
|
-
@state_change_listeners << listener
|
24
|
-
end
|
25
|
-
|
26
|
-
def register_progress_message_listener(listener)
|
27
|
-
@progress_message_listeners << listener
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
1
|
+
# Base class for any script on EC2.
|
2
|
+
class Ec2Script
|
3
|
+
# Initialization. Common Input parameters:
|
4
|
+
# * aws_access_key => the Amazon AWS Access Key (see Your Account -> Security Credentials)
|
5
|
+
# * aws_secret_key => the Amazon AWS Secret Key
|
6
|
+
# * ec2_api_server => the API Server to connect to (optional, default is us-east-1 (=> <ec2_api_server>.ec2.amazonaws.com)
|
7
|
+
# * logger => allows to pass a ruby logger object used for logging (optional, default is a stdout logger with level WARN)
|
8
|
+
# Scripts may add specific key/value pairs.
|
9
|
+
def initialize(input_params)
|
10
|
+
@input_params = input_params
|
11
|
+
@state_change_listeners = []
|
12
|
+
@progress_message_listeners = []
|
13
|
+
if input_params[:logger] == nil
|
14
|
+
@logger = Logger.new(STDOUT)
|
15
|
+
@logger .level = Logger::WARN
|
16
|
+
input_params[:logger] = @logger
|
17
|
+
end
|
18
|
+
@result = {:done => false, :failed => false}
|
19
|
+
@input_params[:result] = @result
|
20
|
+
end
|
21
|
+
|
22
|
+
def register_state_change_listener(listener)
|
23
|
+
@state_change_listeners << listener
|
24
|
+
end
|
25
|
+
|
26
|
+
def register_progress_message_listener(listener)
|
27
|
+
@progress_message_listeners << listener
|
28
|
+
end
|
29
|
+
|
30
|
+
# Check input parameters (in @input_parameters object variable)
|
31
|
+
# and set default values.
|
32
|
+
# Abstract method to be implemented by extending classes.
|
33
|
+
def check_input_parameters()
|
34
|
+
raise Exception.new("check_input_parameters must be implemented")
|
35
|
+
end
|
36
|
+
|
37
|
+
# Load the initial state for the script.
|
38
|
+
# Abstract method to be implemented by extending classes.
|
39
|
+
def load_initial_state()
|
40
|
+
raise Exception.new("load_initial_state must be implemented")
|
41
|
+
end
|
42
|
+
|
43
|
+
# Executes the script.
|
44
|
+
def start_script()
|
45
|
+
# optional parameters and initialization
|
46
|
+
check_input_parameters()
|
47
|
+
@input_params[:script] = self
|
48
|
+
begin
|
49
|
+
current_state = load_initial_state()
|
50
|
+
@state_change_listeners.each() {|listener|
|
51
|
+
current_state.register_state_change_listener(listener)
|
52
|
+
}
|
53
|
+
end_state = current_state.start_state_machine()
|
54
|
+
if end_state.failed?
|
55
|
+
@result[:failed] = true
|
56
|
+
@result[:failure_reason] = current_state.end_state.failure_reason
|
57
|
+
@result[:end_state] = current_state.end_state
|
58
|
+
else
|
59
|
+
@result[:failed] = false
|
60
|
+
end
|
61
|
+
rescue Exception => e
|
62
|
+
@logger.warn "exception during encryption: #{e}"
|
63
|
+
@logger.warn e.backtrace.join("\n")
|
64
|
+
err = e.to_s
|
65
|
+
err += " (in #{current_state.end_state.to_s})" unless current_state == nil
|
66
|
+
@result[:failed] = true
|
67
|
+
@result[:failure_reason] = err
|
68
|
+
@result[:end_state] = current_state.end_state unless current_state == nil
|
69
|
+
ensure
|
70
|
+
begin
|
71
|
+
@input_params[:remote_command_handler].disconnect
|
72
|
+
rescue Exception => e2
|
73
|
+
end
|
74
|
+
end
|
75
|
+
#
|
76
|
+
@result[:done] = true
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
# Return a hash of results. Common values are:
|
81
|
+
# * :done => is true when the script has terminated, otherwise false
|
82
|
+
# * :failed => is false when the script succeeded
|
83
|
+
# * :failure_reason => returns a failure reason (string)
|
84
|
+
# * :end_state => returns the state, in which the script terminated (#Help::ScriptExecutionState)
|
85
|
+
# Scripts may add specific key/value pairs.
|
86
|
+
# *
|
87
|
+
# Returns a hash with the following information:
|
88
|
+
# :done => if execution is done
|
89
|
+
#
|
90
|
+
def get_execution_result
|
91
|
+
@result
|
92
|
+
end
|
93
|
+
|
94
|
+
def post_message(message, level = Logger::DEBUG)
|
95
|
+
@progress_message_listeners.each() {|listener|
|
96
|
+
listener.new_message(message, level)
|
97
|
+
}
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: CloudyScripts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Jung
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-17 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -52,8 +52,10 @@ files:
|
|
52
52
|
- lib/help/remote_command_handler.rb
|
53
53
|
- lib/help/script_execution_state.rb
|
54
54
|
- lib/help/state_change_listener.rb
|
55
|
+
- lib/help/state_transition_helper.rb
|
55
56
|
- lib/scripts/ec2/ami2_ebs_conversion.rb
|
56
57
|
- lib/scripts/ec2/dm_encrypt.rb
|
58
|
+
- lib/scripts/ec2/download_snapshot.rb
|
57
59
|
- lib/scripts/ec2/ec2_script.rb
|
58
60
|
has_rdoc: true
|
59
61
|
homepage: http://elastic-security.com
|