thor-ssh 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/.rpsec ADDED
File without changes
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format nested
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'sahara', :git => 'https://github.com/ryanstout/sahara.git'
4
+
4
5
  # Specify your gem's dependencies in thor-ssh.gemspec
5
6
  gemspec
@@ -60,6 +60,12 @@ module ThorSsh
60
60
  @run_as_user = old_run_as_user
61
61
  end
62
62
 
63
+ def as_root(options={})
64
+ as_user('root', options) do
65
+ yield
66
+ end
67
+ end
68
+
63
69
  # The user commands should be run as as the moment
64
70
  def run_as_user
65
71
  @run_as_user
@@ -11,14 +11,23 @@ module ThorSsh
11
11
  @base = base
12
12
  @connection = connection
13
13
  end
14
+
15
+ # This is a workaround for bug:
16
+ # https://github.com/net-ssh/net-sftp/issues/13
17
+ def close_sftp!
18
+ connection.sftp.close_channel()
19
+ connection.instance_variable_set('@sftp', nil)
20
+ end
14
21
 
15
22
  def exists?(path)
16
23
  begin
17
- connection.sftp.stat!(path)
24
+ res = connection.sftp.stat!(path)
18
25
  rescue Net::SFTP::StatusException
26
+ close_sftp!
19
27
  return false
20
28
  end
21
29
 
30
+ close_sftp!
22
31
  return true
23
32
  end
24
33
 
@@ -52,10 +61,11 @@ module ThorSsh
52
61
  connection.sftp.file.open(path, "rb") do |f|
53
62
  data = f.read
54
63
  end
64
+ close_sftp!
55
65
  else
56
66
  # We just run this as root, when reading we don't need to go back
57
67
  # down to the user
58
- data = @remote_test.destination_server.run("cat \"#{path}\"")
68
+ data = @base.destination_server.run("cat \"#{path}\"")
59
69
  end
60
70
 
61
71
  return data
@@ -65,6 +75,7 @@ module ThorSsh
65
75
  def binwrite(path, data)
66
76
  io = StringIO.new(data)
67
77
  connection.sftp.upload!(io, path)
78
+ close_sftp!
68
79
  end
69
80
 
70
81
  def chmod(mode, file_name)
@@ -1,5 +1,5 @@
1
1
  require 'net/ssh'
2
- require 'net/sftp'
2
+ # require 'net/sftp'
3
3
 
4
4
  module ThorSsh
5
5
  class RemoteServer
@@ -16,8 +16,8 @@ module ThorSsh
16
16
  stderr_data = ""
17
17
  exit_code = nil
18
18
  exit_signal = nil
19
- connection.open_channel do |channel|
20
- channel.exec(command) do |ch, success|
19
+ channel = connection.open_channel do |cha|
20
+ cha.exec(command) do |ch, success|
21
21
  unless success
22
22
  abort "FAILED: couldn't execute command (connection.channel.exec)"
23
23
  end
@@ -36,8 +36,15 @@ module ThorSsh
36
36
  channel.on_request("exit-signal") do |ch, data|
37
37
  exit_signal = data.read_long
38
38
  end
39
+
40
+ # channel.on_close do |ch|
41
+ # puts "Channel is Closing! #{connection.closed?}"
42
+ # channel.close
43
+ # end
39
44
  end
40
45
  # channel.wait
46
+ # puts "Done Loop"
47
+ # channel.close
41
48
  end
42
49
  connection.loop
43
50
 
@@ -1,3 +1,3 @@
1
1
  module ThorSsh
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
3
3
  end
data/spec/actions_spec.rb CHANGED
@@ -4,20 +4,15 @@ require 'vagrant/vagrant_manager'
4
4
  require 'fileutils'
5
5
 
6
6
 
7
- describe ThorSsh do
7
+ describe "Thor SSH" do
8
8
  before do
9
9
  # Setup the test and connect to a test server
10
- @remote_test = ThorTest.new
11
- @remote_test.destination_connection = VagrantManager.connect
12
-
10
+ # @remote_test = ThorTest.new
13
11
  @local_test = ThorTest.new
14
12
  @local_test.destination_root = File.join(File.dirname(__FILE__), '/tmp/')
15
13
  end
16
14
 
17
15
  after do
18
- # Close the connection
19
- @remote_test.destination_connection.close
20
-
21
16
  # Clear local tmp dir
22
17
  FileUtils.rm_rf(File.join(File.dirname(__FILE__), '/tmp/test/'))
23
18
  end
@@ -29,12 +24,17 @@ describe ThorSsh do
29
24
  @remote_test = ThorTest.new
30
25
  @remote_test.destination_connection = VagrantManager.connect
31
26
  @remote_test.destination_files.rm_rf(@remote_base_path)
27
+ end
28
+
29
+ after(:all) do
30
+ # Close the remote connection
32
31
  @remote_test.destination_connection.close
33
-
34
32
  end
33
+
35
34
 
36
35
  it 'should create an empty directory remotely' do
37
36
  @remote_test.empty_directory(@remote_base_path)
37
+ @remote_test.empty_directory(@remote_base_path + '2')
38
38
  @remote_test.destination_files.exists?(@remote_base_path)
39
39
  end
40
40
 
@@ -182,6 +182,16 @@ describe ThorSsh do
182
182
  stdout, stderr, exit_code, exit_signal = @local_test.exec('true', true)
183
183
  exit_code.should == 0
184
184
  end
185
+
186
+ it "should switch users" do
187
+ @remote_test.as_user('root') do
188
+ @remote_test.exec('whoami').strip.should == 'root'
189
+ end
190
+
191
+ @remote_test.as_root do
192
+ @remote_test.exec('whoami').strip.should == 'root'
193
+ end
194
+ end
185
195
  end
186
196
 
187
197
 
@@ -27,6 +27,7 @@ class VagrantManager
27
27
  # Connect to SSH, giving it a few tries
28
28
  return Net::SSH.start(ssh_info[:host], ssh_info[:username], opts)
29
29
 
30
+
30
31
  # return Net::SSH.start("127.0.0.1", "vagrant", {:port=>2222, :keys=>["/Users/ryanstout/.vagrant.d/insecure_private_key"], :keys_only=>true, :user_known_hosts_file=>[], :paranoid=>false, :config=>false, :forward_agent=>false, :verbose=>:debug, :timeout=>1})
31
32
  end
32
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thor-ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -164,6 +164,8 @@ extensions: []
164
164
  extra_rdoc_files: []
165
165
  files:
166
166
  - .gitignore
167
+ - .rpsec
168
+ - .rspec
167
169
  - Gemfile
168
170
  - LICENSE
169
171
  - README.md
@@ -205,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
207
  version: '0'
206
208
  segments:
207
209
  - 0
208
- hash: 1762345843444454679
210
+ hash: 2434700529121181325
209
211
  required_rubygems_version: !ruby/object:Gem::Requirement
210
212
  none: false
211
213
  requirements:
@@ -214,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
216
  version: '0'
215
217
  segments:
216
218
  - 0
217
- hash: 1762345843444454679
219
+ hash: 2434700529121181325
218
220
  requirements: []
219
221
  rubyforge_project:
220
222
  rubygems_version: 1.8.22