miab 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/miab.rb +126 -6
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ced57340f07efffc93c646a147121deb9a1fbb8d037aaa37ba2eb3203fc69573
|
4
|
+
data.tar.gz: 3ff78cd963d512efa0528cbee9456b8efed970a943698db326bf3ff95717a60d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ee3e715313c423032f22db63c8f9e8a21bd33877960abdcea64ba22b2ab44d5cd5de5519c485895af819d0590f79e0082d584d4cadf3ee88532ccbd605ab129
|
7
|
+
data.tar.gz: a8aae9b45ea47714cc4ca79562d5c904ee1592b8daa73989191ae22500a8185af3c7bd611e618610d04fa037a3622d738e6b27e8bed3c2138ecf8aee7543b838
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/miab.rb
CHANGED
@@ -4,19 +4,45 @@
|
|
4
4
|
|
5
5
|
# Desc: Message in a bottle (MIAB) is designed to execute remote commands
|
6
6
|
# through SSH for system maintenance purposes.
|
7
|
+
#
|
8
|
+
# Note: Intended for a Debian based distro
|
7
9
|
|
8
10
|
require 'net/ssh'
|
9
11
|
require 'c32'
|
10
12
|
require 'resolv'
|
11
13
|
|
12
14
|
|
15
|
+
# available commands:
|
16
|
+
#
|
17
|
+
# * date - returns the system date and time
|
18
|
+
# * directory_exists? - returns true if the directory exists
|
19
|
+
# * disk_space - returns the available disk space
|
20
|
+
# * echo - returns whatever string is passed in
|
21
|
+
# * file_exists? - returns true if the file exists
|
22
|
+
# * file_write - writes contents to a file
|
23
|
+
# * installable? - returns true if the package name exists in apt-cache search
|
24
|
+
# * installed? - returns true if a package is already installed
|
25
|
+
# * internet? - returns true if a ping request to an external IP address succeeds
|
26
|
+
# * memory - returns the amount of free RAM available etc
|
27
|
+
# * ping - returns the latency of a ping request to the node
|
28
|
+
# * pwd - returns the working directory
|
29
|
+
# * temperature - returns the temperature of the CPU
|
30
|
+
|
31
|
+
# usage: puts Miab.new("temperature", domain: 'home', target: 'angelo',
|
32
|
+
# user: 'pi', password: 'secret').cast
|
33
|
+
# nearest SSH equivalent `ssh pi@angelo.home exec \
|
34
|
+
# "cat /sys/class/thermal/thermal_zone0/temp"`
|
35
|
+
|
13
36
|
class Miab
|
14
37
|
using ColouredText
|
15
38
|
|
16
39
|
class Session
|
17
40
|
|
18
|
-
def initialize( host, ssh=nil, debug: false)
|
19
|
-
|
41
|
+
def initialize( host, ssh=nil, debug: false, dns: '1.1.1.1')
|
42
|
+
|
43
|
+
@ssh, @host, @debug, @dns = ssh, host, debug, dns
|
44
|
+
|
45
|
+
puts 'Session dns: ' + dns.inspect if @debug
|
20
46
|
@results = {}
|
21
47
|
end
|
22
48
|
|
@@ -37,6 +63,18 @@ class Miab
|
|
37
63
|
@results[:date] = r.chomp
|
38
64
|
|
39
65
|
end
|
66
|
+
|
67
|
+
def directory_exists?(file)
|
68
|
+
|
69
|
+
instructions = "test -d #{file}; echo $?"
|
70
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
71
|
+
puts 'r: ' + r.inspect if @debug
|
72
|
+
|
73
|
+
@results[:directory_exists?] = r.chomp == '0'
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
alias dir_exists? directory_exists?
|
40
78
|
|
41
79
|
# query the available disk space etc.
|
42
80
|
#
|
@@ -72,6 +110,85 @@ class Miab
|
|
72
110
|
end
|
73
111
|
|
74
112
|
alias df disk_space
|
113
|
+
|
114
|
+
# return the string supplied
|
115
|
+
#
|
116
|
+
def echo(s)
|
117
|
+
|
118
|
+
instructions = 'echo ' + s
|
119
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
120
|
+
puts 'r: ' + r.inspect if @debug
|
121
|
+
@results[:echo] = r.chomp
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
def file_exists?(file)
|
126
|
+
|
127
|
+
instructions = "test -f #{file}; echo $?"
|
128
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
129
|
+
puts 'r: ' + r.inspect if @debug
|
130
|
+
|
131
|
+
@results[:file_exists?] = r == 0
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
# e.g. file_write 'desc.txt', 'Controls the door entry system.'
|
136
|
+
#
|
137
|
+
def file_write(file, content)
|
138
|
+
|
139
|
+
instructions = "echo #{content.inspect} >> #{file}"
|
140
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
141
|
+
puts 'r: ' + r.inspect if @debug
|
142
|
+
|
143
|
+
@results[:file_write] = r
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
# return the string supplied
|
148
|
+
#
|
149
|
+
def install(package)
|
150
|
+
|
151
|
+
return @results[:install] = 'no route to internet' unless internet?
|
152
|
+
return @results[:install] = 'already installed' if installed? package
|
153
|
+
|
154
|
+
instructions = "apt-get update && apt-get install #{package} -y"
|
155
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
156
|
+
puts 'r: ' + r.inspect if @debug
|
157
|
+
@results[:install] = r.chomp
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
def installable?(package)
|
162
|
+
|
163
|
+
instructions = "apt-cache search --names-only ^#{package}$"
|
164
|
+
results = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
165
|
+
puts 'results: ' + results.inspect if @debug
|
166
|
+
|
167
|
+
@results[:installable?] = !results.empty?
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
def installed?(package)
|
172
|
+
|
173
|
+
instructions = 'dpkg --get-selections | grep -i ' + package
|
174
|
+
results = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
175
|
+
puts 'results: ' + results.inspect if @debug
|
176
|
+
|
177
|
+
return @results[:installed?] = nil if results.empty?
|
178
|
+
r = results.lines.grep /^#{package}/
|
179
|
+
|
180
|
+
@results[:installed?] = r.any?
|
181
|
+
end
|
182
|
+
|
183
|
+
def internet?()
|
184
|
+
|
185
|
+
instructions = "ping #{@dns} -W 1 -c 1"
|
186
|
+
r = @ssh ? @ssh.exec!(instructions) : `#{instructions}`
|
187
|
+
puts 'r: ' + r.inspect if @debug
|
188
|
+
|
189
|
+
@results[:internet?] = r.lines[1][/icmp_seq/] ? true : false
|
190
|
+
|
191
|
+
end
|
75
192
|
|
76
193
|
# find out available memory etc
|
77
194
|
#
|
@@ -152,11 +269,13 @@ class Miab
|
|
152
269
|
end
|
153
270
|
|
154
271
|
def initialize(scroll, domain: nil, target: nil, pwlist: {}, password: nil,
|
155
|
-
user: nil, debug: false)
|
272
|
+
user: nil, debug: false, dns: '208.67.222.222')
|
156
273
|
|
157
274
|
@results = {}
|
158
275
|
|
159
|
-
@scroll, @debug = scroll, debug
|
276
|
+
@scroll, @debug, @dns = scroll, debug, dns
|
277
|
+
|
278
|
+
puts '@dns: ' + @dns.inspect if @debug
|
160
279
|
|
161
280
|
@nodes = if target then
|
162
281
|
|
@@ -181,6 +300,7 @@ class Miab
|
|
181
300
|
if @nodes.any? then
|
182
301
|
|
183
302
|
threads = []
|
303
|
+
dns = @dns
|
184
304
|
|
185
305
|
@nodes.each do |raw_host, password|
|
186
306
|
|
@@ -191,7 +311,7 @@ class Miab
|
|
191
311
|
begin
|
192
312
|
puts ('host: ' + host.inspect).debug if @debug
|
193
313
|
ssh = Net::SSH.start( host, user, password: password)
|
194
|
-
@results[host] = Session.new(host, ssh, debug: @debug).exec @scroll
|
314
|
+
@results[host] = Session.new(host, ssh, dns: dns, debug: @debug).exec @scroll
|
195
315
|
ssh.close
|
196
316
|
puts (host + ' result: ' + @results[host].inspect).debug if @debug
|
197
317
|
rescue
|
@@ -207,7 +327,7 @@ class Miab
|
|
207
327
|
|
208
328
|
if @scroll then
|
209
329
|
host = `hostname`.chomp
|
210
|
-
@results[host] = Session.new(host, debug: @debug).exec(@scroll)
|
330
|
+
@results[host] = Session.new(host, dns: @dns, debug: @debug).exec(@scroll)
|
211
331
|
end
|
212
332
|
|
213
333
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
9irKsAp/hZt3dTbQOtnSlc9XREZZdegwOgu1FEqBqviNIn9R28OR237HExiWXwmw
|
36
36
|
HDTFIjk8XBqTunABuFUgr4qx
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2019-
|
38
|
+
date: 2019-11-26 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: net-ssh
|
metadata.gz.sig
CHANGED
Binary file
|