net-ssh-cli 1.2.0 → 1.2.1
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/README.md +72 -3
- data/lib/net/ssh/cli.rb +5 -2
- data/lib/net/ssh/cli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fab3c1030af162f3166a59820d542a60e020b1cb14dbf11cf9ebc4421242fa3a
|
4
|
+
data.tar.gz: cb0391c25fea6a1a2f5762eb6131a737bd51bf6a00e48807fdf486a3d9a4aa96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 825b5a40f8ffd7ad64ba817c8de01bd9a9fdc15289ea400f18da3dd2f60b2e6ccf5a5ae75f453d1a3649a05fcf9e0a9722e6194ad264337f71211836290e5695
|
7
|
+
data.tar.gz: ecfefd65bb0c0f9132bfd911e4a42b8640e85281dabd19311fc6fd7240549d9220f2280bb461fd440780ff1df8b903c812cb1620e16a9fd7ce33c0996fd1f244
|
data/README.md
CHANGED
@@ -69,6 +69,15 @@ Remove the command and the prompt for #cmd & #dialog by default
|
|
69
69
|
# => "bananas"
|
70
70
|
```
|
71
71
|
|
72
|
+
### #cmds
|
73
|
+
|
74
|
+
It's the same as #cmd but for multiple commands.
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
cli.cmds ["echo 'bananas'", "echo 'apples'"], rm_command: true, rm_prompt: true
|
78
|
+
# => ["bananas", "apples"]
|
79
|
+
```
|
80
|
+
|
72
81
|
### #dialog
|
73
82
|
```ruby
|
74
83
|
cli.dialog "echo 'are you sure?' && read -p 'yes|no>'", /\nyes|no>/
|
@@ -76,6 +85,25 @@ Remove the command and the prompt for #cmd & #dialog by default
|
|
76
85
|
cli.cmd "yes"
|
77
86
|
```
|
78
87
|
|
88
|
+
### #impact
|
89
|
+
|
90
|
+
The very same as `#cmd` but it respects a flag whether to run commands with 'impact'.
|
91
|
+
This can be used in a setup where you don't want to run certain commands under certain conditions.
|
92
|
+
For example in testing.
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
cli.run_impact?
|
96
|
+
# => false
|
97
|
+
cli.impact "reboot now"
|
98
|
+
# => "skip: 'reboot now'"
|
99
|
+
```
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
cli.run_impact = true
|
103
|
+
cli.impact "reboot now"
|
104
|
+
# => connection closed
|
105
|
+
```
|
106
|
+
|
79
107
|
### #read & #write
|
80
108
|
|
81
109
|
```ruby
|
@@ -94,17 +122,28 @@ Remove the command and the prompt for #cmd & #dialog by default
|
|
94
122
|
### #read_till
|
95
123
|
keep on processing till the stdout matches to given|default prompt and then read the whole stdin.
|
96
124
|
```ruby
|
97
|
-
cli.write "\n"
|
125
|
+
cli.write "echo 'hello'\n"
|
98
126
|
# => "echo 'hello'\n"
|
99
127
|
cli.read_till
|
100
128
|
# => "echo 'hello'\nhello\nuser@host:"
|
101
129
|
```
|
102
130
|
|
103
|
-
This method is used by #cmd
|
131
|
+
This method is used by #cmd, see ``lib/net/ssh/cli.rb#cmd``
|
132
|
+
|
133
|
+
### #read_for
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
cli.write_n "sleep 180"
|
137
|
+
# => ""
|
138
|
+
cli.read_for(seconds: 181)
|
139
|
+
# => "..."
|
140
|
+
```
|
104
141
|
|
105
142
|
## Configuration
|
106
143
|
|
107
|
-
Have a deep look at ``Net::SSH::CLI::OPTIONS``
|
144
|
+
Have a deep look at the various Options configured by ``Net::SSH::CLI::OPTIONS`` in ``lib/net/ssh/cli.rb``
|
145
|
+
Nearly everything can be configured.
|
146
|
+
|
108
147
|
|
109
148
|
### Callbacks
|
110
149
|
|
@@ -120,6 +159,36 @@ cli.before_open_channel do
|
|
120
159
|
end
|
121
160
|
```
|
122
161
|
|
162
|
+
```ruby
|
163
|
+
cli.after_open_channel do
|
164
|
+
cmd "logger 'Net::SSH::CLI works'"
|
165
|
+
cmd "sudo -i"
|
166
|
+
end
|
167
|
+
```
|
168
|
+
|
169
|
+
### #hostname #host #to_s
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
cli.to_s
|
173
|
+
# => "localhost"
|
174
|
+
cli.hostname
|
175
|
+
# => "localhost"
|
176
|
+
cli.host
|
177
|
+
# => "localhost"
|
178
|
+
```
|
179
|
+
|
180
|
+
### #detect_prompt
|
181
|
+
|
182
|
+
NET::SSH::CLI can try to guess the prompt by waiting for it and using the last line.
|
183
|
+
This works usually, but is not guaranteed to work well.
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
cli.open_channel
|
187
|
+
# => ...
|
188
|
+
cli.detect_prompt(seconds: 3)
|
189
|
+
# => "[my prompt]"
|
190
|
+
```
|
191
|
+
|
123
192
|
## Development
|
124
193
|
|
125
194
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/net/ssh/cli.rb
CHANGED
@@ -32,10 +32,11 @@ module Net
|
|
32
32
|
options.merge!(opts)
|
33
33
|
self.net_ssh = options.delete(:net_ssh)
|
34
34
|
self.logger = options.delete(:logger) || Logger.new(STDOUT, level: Logger::WARN)
|
35
|
+
self.process_count = 0
|
35
36
|
@new_data = String.new
|
36
37
|
end
|
37
38
|
|
38
|
-
attr_accessor :channel, :stdout, :net_ssh, :logger, :new_data
|
39
|
+
attr_accessor :channel, :stdout, :net_ssh, :logger, :new_data, :process_count
|
39
40
|
|
40
41
|
OPTIONS = ActiveSupport::HashWithIndifferentAccess.new(
|
41
42
|
default_prompt: /\n?^(\S+@.*)\z/, # the default prompt to search for
|
@@ -106,7 +107,9 @@ module Net
|
|
106
107
|
before_on_stdout_procs.each { |_name, a_proc| instance_eval(&a_proc) }
|
107
108
|
stdout << new_data
|
108
109
|
after_on_stdout_procs.each { |_name, a_proc| instance_eval(&a_proc) }
|
109
|
-
|
110
|
+
self.process_count += 1
|
111
|
+
process unless process_count > 100 # if we receive data, we probably receive more - improves performance - but on a lot of data, this leads to a stack level too deep
|
112
|
+
self.process_count -= 1
|
110
113
|
stdout
|
111
114
|
end
|
112
115
|
|
data/lib/net/ssh/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ssh-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabian Stillhart
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|