cloudflock 0.7.1 → 0.7.2
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.
- checksums.yaml +4 -4
- data/lib/cloudflock/app/common/servers.rb +3 -3
- data/lib/cloudflock/app.rb +18 -0
- data/lib/cloudflock/error.rb +2 -1
- data/lib/cloudflock/errstr.rb +3 -2
- data/lib/cloudflock/remote/ssh.rb +27 -1
- data/lib/cloudflock.rb +1 -1
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5caf060aa6dffa12338aee4f8e6bc50a7d924ca0
|
4
|
+
data.tar.gz: 7dc01d5bb4c01a7037bc848e8d46911da697c5e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78c8c3e2a955ce7b0cbf0d201121f4ff3c8c6186079955657b23c4a5cbe53ffdbcab0e175805f068037a0a848c54d74b48973d098af4352c3888110126a37690
|
7
|
+
data.tar.gz: 77435605a9983bc72686a472b948a8ce061ba4387fe5f551dbd58cbe8de40d122c7f7742168296ae6af112101d5b5959d5a883fb6b63562bdc02f0149a57cd46
|
@@ -71,8 +71,8 @@ module CloudFlock; module App
|
|
71
71
|
check_option(host, :hostname, "#{name} host")
|
72
72
|
check_option(host, :port, "#{name} SSH port", default_answer: '22')
|
73
73
|
check_option(host, :username, "#{name} username", default_answer: 'root')
|
74
|
-
|
75
|
-
|
74
|
+
check_option_pw(host, :password, "#{name} password",
|
75
|
+
default_answer: '', allow_empty: true)
|
76
76
|
|
77
77
|
key_path = File.join(Dir.home, '.ssh', 'id_rsa')
|
78
78
|
key_path = '' unless File.exists?(key_path)
|
@@ -87,7 +87,7 @@ module CloudFlock; module App
|
|
87
87
|
if host[:username] == 'root' || host[:sudo]
|
88
88
|
host[:root_password] = host[:password]
|
89
89
|
else
|
90
|
-
|
90
|
+
check_option_pw(host, :root_password, 'Password for root')
|
91
91
|
end
|
92
92
|
|
93
93
|
host
|
data/lib/cloudflock/app.rb
CHANGED
@@ -44,6 +44,24 @@ module CloudFlock
|
|
44
44
|
options[name] = UI.prompt_filesystem(prompt, prompt_options)
|
45
45
|
end
|
46
46
|
|
47
|
+
# Public: Wrap check_option, disabling local echo for password entry if the
|
48
|
+
# option is not set.
|
49
|
+
#
|
50
|
+
# options - Hash containing options to test against.
|
51
|
+
# name - The key in the options Hash expected to contain the
|
52
|
+
# response desired.
|
53
|
+
# prompt - Prompt to present to the user.
|
54
|
+
# prompt_options - Options to pass along to ConsoleGlitter::UI#prompt.
|
55
|
+
# (default: {})
|
56
|
+
#
|
57
|
+
# Returns the contents of the options[name] or else a String if
|
58
|
+
# options[name] is nil.
|
59
|
+
def check_option_pw(options, name, prompt, prompt_options = {})
|
60
|
+
return options[name] unless options[name].nil?
|
61
|
+
|
62
|
+
options[name] = UI.secure_prompt(prompt, prompt_options)
|
63
|
+
end
|
64
|
+
|
47
65
|
# Public: Check if an option is set; return the value if so, otherwise
|
48
66
|
# prompt the user for a response.
|
49
67
|
#
|
data/lib/cloudflock/error.rb
CHANGED
data/lib/cloudflock/errstr.rb
CHANGED
@@ -10,8 +10,9 @@ module CloudFlock
|
|
10
10
|
module Remote
|
11
11
|
class SSH
|
12
12
|
module Errstr
|
13
|
-
NOHOST
|
14
|
-
INVALID_HOST
|
13
|
+
NOHOST = 'No host specified'
|
14
|
+
INVALID_HOST = 'Unable to look up host: %s'
|
15
|
+
CANNOT_CONNECT = 'Unable to connect to host: %s'
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -21,6 +21,9 @@ module CloudFlock; module Remote
|
|
21
21
|
'-o ConnectTimeout=15 ' \
|
22
22
|
'-o ServerAliveInterval=30'
|
23
23
|
|
24
|
+
# Public: Hash containing always-set options for Net::SSH
|
25
|
+
NET_SSH_OPTIONS = { user_known_hosts_file: '/dev/null', paranoid: false }
|
26
|
+
|
24
27
|
# Public: Prompt to be set on a host upon successful login.
|
25
28
|
PROMPT = '@@CLOUDFLOCK@@'
|
26
29
|
|
@@ -57,6 +60,7 @@ module CloudFlock; module Remote
|
|
57
60
|
def initialize(args = {})
|
58
61
|
@options = sanitize_arguments(DEFAULT_ARGS.merge(args))
|
59
62
|
start_session
|
63
|
+
start_keepalive_thread
|
60
64
|
end
|
61
65
|
|
62
66
|
# Public: Return the hostname of the host.
|
@@ -236,7 +240,7 @@ module CloudFlock; module Remote
|
|
236
240
|
# :key_passphrase defined.
|
237
241
|
def filter_ssh_options(args)
|
238
242
|
valid_arguments = [:port, :password, :key_data, :key_passphrase]
|
239
|
-
args.select { |opt| valid_arguments.include? opt }
|
243
|
+
args.select { |opt| valid_arguments.include? opt }.merge(NET_SSH_OPTIONS)
|
240
244
|
end
|
241
245
|
|
242
246
|
# Internal: Resolve the hostname provided and return the network address to
|
@@ -259,9 +263,31 @@ module CloudFlock; module Remote
|
|
259
263
|
# Sets @ssh.
|
260
264
|
#
|
261
265
|
# Returns nothing.
|
266
|
+
#
|
267
|
+
# Raises TooManyRetries if retry_count is greater than 4.
|
262
268
|
def start_session
|
263
269
|
ssh_opts = filter_ssh_options(options)
|
264
270
|
@ssh = Net::SSH.start(options[:hostname], options[:username], ssh_opts)
|
271
|
+
rescue Net::SSH::Disconnect
|
272
|
+
retry_count = retry_count.to_i + 1
|
273
|
+
sleep 30 and retry if retry_count < 5
|
274
|
+
raise(SSHCannotConnect, Errstr::CANNOT_CONNECT % options[:hostname])
|
275
|
+
end
|
276
|
+
|
277
|
+
# Internal: Creates a thread which sends a keepalive message every 10
|
278
|
+
# seconds.
|
279
|
+
#
|
280
|
+
# Sets @keepalive.
|
281
|
+
#
|
282
|
+
# Returns nothing.
|
283
|
+
def start_keepalive_thread
|
284
|
+
@keepalive.kill if @keepalive.is_a?(Thread)
|
285
|
+
@keepalive = Thread.new do
|
286
|
+
loop do
|
287
|
+
sleep 10
|
288
|
+
@ssh.send_global_request('keepalive@openssh.com')
|
289
|
+
end
|
290
|
+
end
|
265
291
|
end
|
266
292
|
end
|
267
293
|
end; end
|
data/lib/cloudflock.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudflock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wuest
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fog-json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: fog
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
33
|
+
version: '1.22'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.22.1
|
20
37
|
type: :runtime
|
21
38
|
prerelease: false
|
22
39
|
version_requirements: !ruby/object:Gem::Requirement
|
23
40
|
requirements:
|
24
41
|
- - "~>"
|
25
42
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
43
|
+
version: '1.22'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.22.1
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: cpe
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|