rstuk 0.0.1 → 0.0.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.
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
-