rest_connection 0.0.4 → 0.0.5
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/VERSION +1 -1
- data/lib/rest_connection/rightscale/ec2_ebs_snapshot.rb +20 -0
- data/lib/rest_connection/rightscale/ec2_ebs_volume.rb +20 -0
- data/lib/rest_connection/rightscale/rightscale_api_resources.rb +3 -0
- data/lib/rest_connection/rightscale/server.rb +21 -1
- data/lib/rest_connection/ssh_hax.rb +11 -1
- data/rest_connection.gemspec +4 -2
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This file is part of RestConnection
|
2
|
+
#
|
3
|
+
# RestConnection is free software: you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
5
|
+
# the Free Software Foundation, either version 3 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# RestConnection is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with RestConnection. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
#
|
16
|
+
|
17
|
+
class Ec2EbsSnapshot
|
18
|
+
include RightScale::Api::Base
|
19
|
+
extend RightScale::Api::BaseExtend
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This file is part of RestConnection
|
2
|
+
#
|
3
|
+
# RestConnection is free software: you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
5
|
+
# the Free Software Foundation, either version 3 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# RestConnection is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with RestConnection. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
#
|
16
|
+
|
17
|
+
class Ec2EbsVolume
|
18
|
+
include RightScale::Api::Base
|
19
|
+
extend RightScale::Api::BaseExtend
|
20
|
+
end
|
@@ -26,3 +26,6 @@ require 'rest_connection/rightscale/multi_cloud_image'
|
|
26
26
|
require 'rest_connection/rightscale/tag'
|
27
27
|
require 'rest_connection/rightscale/rs_internal'
|
28
28
|
require 'rest_connection/rightscale/audit_entry'
|
29
|
+
require 'rest_connection/rightscale/ec2_ebs_volume'
|
30
|
+
require 'rest_connection/rightscale/ec2_ebs_snapshot'
|
31
|
+
|
@@ -139,9 +139,15 @@ class Server
|
|
139
139
|
@params.merge! connection.get(serv_href.path + "/monitoring")
|
140
140
|
end
|
141
141
|
|
142
|
-
|
142
|
+
# takes Bool argument to wait for state change (insurance that we can detect a reboot happened)
|
143
|
+
def reboot(wait_for_state = false)
|
144
|
+
reload
|
145
|
+
old_state = self.state
|
143
146
|
serv_href = URI.parse(self.href)
|
144
147
|
connection.post(serv_href.path + "/reboot")
|
148
|
+
if wait_for_state
|
149
|
+
wait_for_state_change(old_state)
|
150
|
+
end
|
145
151
|
end
|
146
152
|
|
147
153
|
def events
|
@@ -156,6 +162,20 @@ class Server
|
|
156
162
|
self.start
|
157
163
|
end
|
158
164
|
|
165
|
+
def wait_for_state_change(old_state = nil)
|
166
|
+
timeout = 60*7
|
167
|
+
timer = 0
|
168
|
+
while(timer < timeout)
|
169
|
+
reload
|
170
|
+
old_state = self.state unless old_state
|
171
|
+
connection.logger("#{nickname} is #{self.state}")
|
172
|
+
return true if self.state != old_state
|
173
|
+
sleep 5
|
174
|
+
timer += 5
|
175
|
+
connection.logger("waiting for server #{nickname} to change from #{old_state} state.")
|
176
|
+
end
|
177
|
+
raise("FATAL: timeout after #{timeout}s waiting for state change")
|
178
|
+
end
|
159
179
|
|
160
180
|
# DOES NOT WORK: fragile web scraping
|
161
181
|
# def relaunch
|
@@ -20,6 +20,8 @@ require 'net/ssh'
|
|
20
20
|
# The mixin typically used from Server#run_recipe
|
21
21
|
module SshHax
|
22
22
|
|
23
|
+
SSH_RETRY_COUNT = 3
|
24
|
+
|
23
25
|
def ssh_key_config(item)
|
24
26
|
if item.is_a?(Array)
|
25
27
|
ssh_keys = item
|
@@ -146,6 +148,10 @@ module SshHax
|
|
146
148
|
connection.logger "SSHing to #{host_dns} using key(s) #{ssh_key_config(ssh_key)}"
|
147
149
|
status = nil
|
148
150
|
output = ""
|
151
|
+
success = false
|
152
|
+
retry_count = 0
|
153
|
+
while (!success && retry_count < SSH_RETRY_COUNT) do
|
154
|
+
begin
|
149
155
|
Net::SSH.start(host_dns, 'root', :keys => ssh_key_config(ssh_key)) do |ssh|
|
150
156
|
cmd_channel = ssh.open_channel do |ch1|
|
151
157
|
ch1.on_request('exit-status') do |ch, data|
|
@@ -158,7 +164,6 @@ module SshHax
|
|
158
164
|
status = 1
|
159
165
|
end
|
160
166
|
ch2.on_data do |ch, data|
|
161
|
-
|
162
167
|
output += data
|
163
168
|
end
|
164
169
|
ch2.on_extended_data do |ch, type, data|
|
@@ -167,6 +172,11 @@ module SshHax
|
|
167
172
|
end
|
168
173
|
end
|
169
174
|
end
|
175
|
+
rescue Exception => e
|
176
|
+
retry_count += 1 # opening the ssh channel failed -- try again.
|
177
|
+
sleep 10
|
178
|
+
end
|
179
|
+
end
|
170
180
|
connection.logger output
|
171
181
|
return {:status => status, :output => output}
|
172
182
|
end
|
data/rest_connection.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rest_connection}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jeremy Deininger"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-20}
|
13
13
|
s.description = %q{provides rest_connection}
|
14
14
|
s.email = %q{jeremy@rubyonlinux.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -34,6 +34,8 @@ Gem::Specification.new do |s|
|
|
34
34
|
"lib/rest_connection.rb",
|
35
35
|
"lib/rest_connection/rightscale/audit_entry.rb",
|
36
36
|
"lib/rest_connection/rightscale/deployment.rb",
|
37
|
+
"lib/rest_connection/rightscale/ec2_ebs_snapshot.rb",
|
38
|
+
"lib/rest_connection/rightscale/ec2_ebs_volume.rb",
|
37
39
|
"lib/rest_connection/rightscale/ec2_security_group.rb",
|
38
40
|
"lib/rest_connection/rightscale/ec2_server_array.rb",
|
39
41
|
"lib/rest_connection/rightscale/ec2_ssh_key.rb",
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jeremy Deininger
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-20 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,8 @@ files:
|
|
80
80
|
- lib/rest_connection.rb
|
81
81
|
- lib/rest_connection/rightscale/audit_entry.rb
|
82
82
|
- lib/rest_connection/rightscale/deployment.rb
|
83
|
+
- lib/rest_connection/rightscale/ec2_ebs_snapshot.rb
|
84
|
+
- lib/rest_connection/rightscale/ec2_ebs_volume.rb
|
83
85
|
- lib/rest_connection/rightscale/ec2_security_group.rb
|
84
86
|
- lib/rest_connection/rightscale/ec2_server_array.rb
|
85
87
|
- lib/rest_connection/rightscale/ec2_ssh_key.rb
|