rstuk 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/rstuk.rb +33 -4
  2. data/rstuk.gemspec +1 -1
  3. metadata +33 -50
data/lib/rstuk.rb CHANGED
@@ -1,14 +1,23 @@
1
1
  require 'open3'
2
+ require 'socket'
3
+ require 'timeout'
4
+
5
+ class SSHFail < RuntimeError
6
+ def initialize server, port
7
+ super "Couldn't get connection to #{server}:#{port}"
8
+ end
9
+ end
2
10
 
3
11
  class Shell
4
12
 
5
- def self.remote server, port, cmd, expected_exit_status = 0
6
- # We want to avoid host key interactive accept question
7
- # And avoid test failures due to non English Locale
13
+ def self.remote server, port, cmd, opts = {}
14
+ defaults = {exit_code: 0, timeout: 90}
15
+ opts = defaults.merge opts
16
+ self.wait_for server, port, opts[:timeout]
8
17
  puts "ssh: #{cmd}"
9
18
  self.do \
10
19
  "ssh root@#{server} #{self.ssh_options} -p #{port} \"#{cmd}\"",
11
- expected_exit_status
20
+ opts[:exit_code]
12
21
  end
13
22
 
14
23
  def self.local cmd, expected_exit_status = 0
@@ -24,6 +33,7 @@ class Shell
24
33
  private
25
34
 
26
35
  def self.do cmd, expected_exit_status
36
+ # We want to avoid test failures due to non English Locale
27
37
  self.verify \
28
38
  expected_exit_status,
29
39
  *(Open3.capture3 "LANG=C; #{cmd}")
@@ -41,7 +51,26 @@ private
41
51
  end
42
52
 
43
53
  def self.ssh_options
54
+ # We want to avoid host key interactive accept question
44
55
  "-o 'UserKnownHostsFile /dev/null' -o StrictHostKeyChecking=no"
45
56
  end
46
57
 
58
+ def self.wait_for server, port, seconds
59
+ puts "Waiting for ssh."
60
+ Timeout::timeout(seconds) do
61
+ tcp_banner = nil
62
+ until tcp_banner =~ /^SSH-2.0-OpenSSH.*/
63
+ begin
64
+ socket = TCPSocket.new server, port
65
+ tcp_banner = socket.readline.strip
66
+ socket.close
67
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, EOFError, Errno::ETIMEDOUT
68
+ # Go through the loop again
69
+ end
70
+ end
71
+ end
72
+ rescue Timeout::Error
73
+ raise SSHFail.new server, port
74
+ end
75
+
47
76
  end
data/rstuk.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rstuk"
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
  s.date = "2013-04-10"
7
7
  s.summary = %q{Common library for kiwi_spec and studio_spec}
8
8
  s.description = %q{Common library for kiwi_spec and studio_spec}
metadata CHANGED
@@ -1,48 +1,41 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rstuk
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Yury Tsarev
14
9
  - Theo Chatzimichos
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2013-04-10 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2013-04-10 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: fuubar
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
33
23
  type: :runtime
34
- version_requirements: *id001
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
35
31
  description: Common library for kiwi_spec and studio_spec
36
- email:
32
+ email:
37
33
  - ytsarev@suse.com
38
34
  - tchatzimichos@suse.com
39
35
  executables: []
40
-
41
36
  extensions: []
42
-
43
37
  extra_rdoc_files: []
44
-
45
- files:
38
+ files:
46
39
  - .gitignore
47
40
  - COPYING
48
41
  - Gemfile
@@ -52,36 +45,26 @@ files:
52
45
  - rstuk.gemspec
53
46
  homepage:
54
47
  licenses: []
55
-
56
48
  post_install_message:
57
49
  rdoc_options: []
58
-
59
- require_paths:
50
+ require_paths:
60
51
  - lib
61
- required_ruby_version: !ruby/object:Gem::Requirement
52
+ required_ruby_version: !ruby/object:Gem::Requirement
62
53
  none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- hash: 3
67
- segments:
68
- - 0
69
- version: "0"
70
- required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
59
  none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 3
76
- segments:
77
- - 0
78
- version: "0"
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
79
64
  requirements: []
80
-
81
65
  rubyforge_project: rstuk
82
- rubygems_version: 1.8.24
66
+ rubygems_version: 1.8.23
83
67
  signing_key:
84
68
  specification_version: 3
85
69
  summary: Common library for kiwi_spec and studio_spec
86
70
  test_files: []
87
-