script_executor 1.3.2 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,91 @@
1
+ require 'script_executor/output_buffer'
2
+ require 'net/ssh'
3
+ require "highline"
4
+
5
+ class RemoteCommand
6
+ attr_reader :domain, :user, :password, :identity_file, :suppress_output, :capture_output, :simulate
7
+
8
+ def initialize params
9
+ @domain = params[:domain]
10
+ @user = params[:user]
11
+ @password = params[:password]
12
+ @identity_file = params[:identity_file]
13
+ @suppress_output = params[:suppress_output]
14
+ @capture_output = params[:capture_output]
15
+ @simulate = params[:simulate]
16
+ end
17
+
18
+ def execute commands, line_action
19
+ print commands, $stdout
20
+
21
+ unless simulate
22
+ storage = capture_output ? OutputBuffer.new : nil
23
+ output = suppress_output ? nil : $stdout
24
+
25
+ password = HighLine.new.ask("Enter password for #{user}: ") { |q| q.echo = '*' } if @password.nil?
26
+
27
+ Net::SSH.start(domain, user, :password => password) do |session|
28
+ session.exec(commands) do |channel, _, line|
29
+ if ask_password?(line)
30
+ channel.request_pty
31
+ channel.send_data password + "\n"
32
+ else
33
+ output.print(line) if output
34
+ storage.save(line.chomp) if storage
35
+
36
+ line_action.call(line) if line_action
37
+ end
38
+ end
39
+
40
+ session.loop # run the aggregated event loop
41
+ end
42
+
43
+ storage.buffer.join("\n") if storage
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def print commands, output
50
+ ssh_command = ssh_command(domain, user, identity_file)
51
+
52
+ if simulate
53
+ output.puts "Remote script: '#{ssh_command}'"
54
+ output.puts "-------"
55
+
56
+ lines = StringIO.new commands
57
+
58
+ lines.each_line do |line|
59
+ output.puts line
60
+ end
61
+
62
+ output.puts "-------"
63
+ else
64
+ output.puts "Remote execution on: '#{ssh_command}'"
65
+ output.puts "-------"
66
+
67
+ lines = StringIO.new commands
68
+
69
+ lines.each_line do |line|
70
+ output.puts line
71
+ end
72
+
73
+ output.puts "-------"
74
+ end
75
+ end
76
+
77
+ def ssh_command domain, user, identity_file
78
+ cmd = user.nil? ? domain : "#{user}@#{domain}"
79
+
80
+ cmd << " -i #{identity_file}" if identity_file
81
+
82
+ #cmd << " -t -t"
83
+
84
+ "ssh #{cmd}"
85
+ end
86
+
87
+ def ask_password? line
88
+ line =~ /^\[sudo\] password for user:/ || line =~ /sudo password:/ || line =~ /Password:/
89
+ end
90
+ end
91
+
@@ -1,3 +1,3 @@
1
- module ScriptExecutor
2
- VERSION = "1.3.2"
1
+ class ScriptExecutor
2
+ VERSION = "1.3.4"
3
3
  end
@@ -1,3 +1 @@
1
- require 'rubygems' unless Object.const_defined?(:Gem)
2
-
3
1
  require 'script_executor/script_locator'
@@ -11,7 +11,7 @@ describe MyExecutable do
11
11
  subject { MyExecutable.new }
12
12
 
13
13
  before :all do
14
- @password ||= ask("Enter password for #{ENV['USER']}: ") { |q| q.echo = '*' }
14
+ @password ||= HighLine.new.ask("Enter password for #{ENV['USER']}: ") { |q| q.echo = '*' }
15
15
  end
16
16
 
17
17
  describe "local execution" do
@@ -46,7 +46,6 @@ describe MyExecutable do
46
46
  )
47
47
  end
48
48
 
49
- puts "2 #{@password}"
50
49
  result.to_s.should == "root\nroot"
51
50
  end
52
51
  end
@@ -11,18 +11,18 @@ describe MyScriptLocator do
11
11
  subject { MyScriptLocator.new }
12
12
 
13
13
  it "should read after __END__" do
14
- result = subject.scripts(__FILE__)
14
+ scripts = subject.scripts(__FILE__)
15
15
 
16
- result.should_not be_nil
16
+ scripts.should_not be_nil
17
17
  end
18
18
 
19
19
  it "should locate script" do
20
- result = subject.scripts(__FILE__)
20
+ scripts = subject.scripts(__FILE__)
21
21
 
22
22
  name = "alisa"
23
- script = subject.evaluate_script_body(result['test1'], binding)
23
+ result = subject.evaluate_script_body(scripts['test1'], binding)
24
24
 
25
- script.should =~ /#{name}/
25
+ result.should =~ /#{name}/
26
26
  end
27
27
 
28
28
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: script_executor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
5
- prerelease:
4
+ version: 1.3.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Alexander Shvets
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-20 00:00:00.000000000 Z
11
+ date: 2013-12-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: highline
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: net-ssh
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: gemspec_deps_gen
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: gemcutter
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -84,6 +75,7 @@ files:
84
75
  - .gitignore
85
76
  - .idea/.name
86
77
  - .idea/.rakeTasks
78
+ - .idea/codeStyleSettings.xml
87
79
  - .idea/encodings.xml
88
80
  - .idea/misc.xml
89
81
  - .idea/modules.xml
@@ -91,9 +83,8 @@ files:
91
83
  - .idea/script_executor.iml
92
84
  - .idea/vcs.xml
93
85
  - .idea/workspace.xml
94
- - .rbenv-gemsets
95
- - .rbenv-version
96
- - .rvmrc
86
+ - .ruby-gemset
87
+ - .ruby-version
97
88
  - CHANGES
98
89
  - Gemfile
99
90
  - Gemfile.lock
@@ -103,7 +94,9 @@ files:
103
94
  - lib/executable.rb
104
95
  - lib/script_executor.rb
105
96
  - lib/script_executor/executable.rb
97
+ - lib/script_executor/local_command.rb
106
98
  - lib/script_executor/output_buffer.rb
99
+ - lib/script_executor/remote_command.rb
107
100
  - lib/script_executor/script_executor.rb
108
101
  - lib/script_executor/script_locator.rb
109
102
  - lib/script_executor/version.rb
@@ -115,27 +108,26 @@ files:
115
108
  - spec/spec_helper.rb
116
109
  homepage: http://github.com/shvets/script_executor
117
110
  licenses: []
111
+ metadata: {}
118
112
  post_install_message:
119
113
  rdoc_options: []
120
114
  require_paths:
121
115
  - lib
122
116
  required_ruby_version: !ruby/object:Gem::Requirement
123
- none: false
124
117
  requirements:
125
118
  - - ! '>='
126
119
  - !ruby/object:Gem::Version
127
120
  version: '0'
128
121
  required_rubygems_version: !ruby/object:Gem::Requirement
129
- none: false
130
122
  requirements:
131
123
  - - ! '>='
132
124
  - !ruby/object:Gem::Version
133
125
  version: '0'
134
126
  requirements: []
135
127
  rubyforge_project:
136
- rubygems_version: 1.8.25
128
+ rubygems_version: 2.0.14
137
129
  signing_key:
138
- specification_version: 3
130
+ specification_version: 4
139
131
  summary: This library helps to execute code, locally or remote over ssh
140
132
  test_files:
141
133
  - spec/executable_spec.rb
data/.rbenv-gemsets DELETED
@@ -1 +0,0 @@
1
- script_executor
data/.rbenv-version DELETED
@@ -1 +0,0 @@
1
- 1.9.3-p327
data/.rvmrc DELETED
@@ -1,5 +0,0 @@
1
- rvm_gemset_create_on_use_flag=1
2
- rvm_pretty_print_flag=1
3
-
4
- rvm use 1.9.3@script_executor
5
- #rvm use ruby-2.0.0-preview1@script_executor