oxidized 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +15 -0
- data/extra/syslog.rb +2 -0
- data/lib/oxidized/input/ftp.rb +1 -1
- data/lib/oxidized/input/ssh.rb +1 -1
- data/lib/oxidized/input/telnet.rb +5 -3
- data/lib/oxidized/model/asa.rb +4 -4
- data/lib/oxidized/model/c4cmts.rb +52 -0
- data/lib/oxidized/model/ciscosmb.rb +0 -4
- data/lib/oxidized/model/comware.rb +3 -2
- data/lib/oxidized/model/dnos.rb +47 -0
- data/lib/oxidized/model/ironware.rb +17 -12
- data/lib/oxidized/model/junos.rb +1 -1
- data/lib/oxidized/model/nos.rb +1 -1
- data/lib/oxidized/model/powerconnect.rb +1 -1
- data/lib/oxidized/model/xos.rb +4 -1
- data/oxidized.gemspec +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd1e30df648aee0f0e1a19d7a55bb91879e0456b
|
4
|
+
data.tar.gz: 239581a70a3709f67173cb59bf0288bcff6a4b7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98c9644577c24e064c415e985b09f501ef4ce9153a9ab3e7921fcb6093057e037cccc3157c8d2eca71660641501670e9840a57abd45d330ad5b482e8ec640148
|
7
|
+
data.tar.gz: 4c9cfe10817d51454ceaca602e10d8dc08d283b8f7a1c850185064369840eb0c80f6479a513ffa2fcbcdbdad36b265eee92fcda278c8b0f10e5b7ad1dda7d2c0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.9.0
|
2
|
+
- FEATURE: input log now uses devices name as file, instead of string from config (by @skoef)
|
3
|
+
- FEATURE: Dell Networkign OS (dnos) support (by @erefre)
|
4
|
+
- BUGFIX: CiscoSMB, powerconnect, comware, xos, ironware, nos fixes
|
5
|
+
|
1
6
|
# 0.8.1
|
2
7
|
- BUGFIX: restore ruby 1.9.3 compatibility
|
3
8
|
|
data/README.md
CHANGED
@@ -63,6 +63,7 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacemen
|
|
63
63
|
* DELL PowerConnect
|
64
64
|
* Extreme Networks XOS
|
65
65
|
* Force10 FTOS
|
66
|
+
* Force10 NDOS
|
66
67
|
* FortiGate FortiOS
|
67
68
|
* HP Comware (HP A-series, H3C, 3Com)
|
68
69
|
* HP ProCurve
|
@@ -353,6 +354,20 @@ nodiff/$FQDN--show_version
|
|
353
354
|
nodiff/$FQDN--show_inventory
|
354
355
|
```
|
355
356
|
|
357
|
+
### RESTful API and Web Interface
|
358
|
+
|
359
|
+
The RESTful API and Web Interface is enabled by configuring the `rest:` parameter in the config file. This parameter can optionally contain a relative URI.
|
360
|
+
|
361
|
+
```
|
362
|
+
# Listen on http://127.0.0.1:8888/
|
363
|
+
rest: 127.0.0.1:8888
|
364
|
+
```
|
365
|
+
|
366
|
+
```
|
367
|
+
# Listen on http://10.0.0.1:8000/oxidized/
|
368
|
+
rest: 10.0.0.1:8000/oxidized
|
369
|
+
```
|
370
|
+
|
356
371
|
### Advanced Configuration
|
357
372
|
|
358
373
|
Below is an advanced example configuration. You will be able to (optinally) override options per device. The router.db format used is ```hostname:model:username:password:enable_password```. Hostname and model will be the only required options, all others override the global configuration sections.
|
data/extra/syslog.rb
CHANGED
data/lib/oxidized/input/ftp.rb
CHANGED
@@ -18,7 +18,7 @@ module Oxidized
|
|
18
18
|
def connect node
|
19
19
|
@node = node
|
20
20
|
@node.model.cfg['ftp'].each { |cb| instance_exec(&cb) }
|
21
|
-
@log = File.open(
|
21
|
+
@log = File.open(Oxidized::Config::Crash + "-#{@node.ip}-ftp", 'w') if CFG.input.debug?
|
22
22
|
@ftp = Net::FTP.new @node.ip, @node.auth[:username], @node.auth[:password]
|
23
23
|
connected?
|
24
24
|
end
|
data/lib/oxidized/input/ssh.rb
CHANGED
@@ -20,7 +20,7 @@ module Oxidized
|
|
20
20
|
@output = ''
|
21
21
|
@node.model.cfg['ssh'].each { |cb| instance_exec(&cb) }
|
22
22
|
secure = CFG.input.ssh.secure
|
23
|
-
@log = File.open(
|
23
|
+
@log = File.open(Oxidized::Config::Crash + "-#{@node.ip}-ssh", 'w') if CFG.input.debug?
|
24
24
|
port = vars(:ssh_port) || 22
|
25
25
|
@ssh = Net::SSH.start @node.ip, @node.auth[:username], :port => port.to_i,
|
26
26
|
:password => @node.auth[:password], :timeout => CFG.timeout,
|
@@ -16,11 +16,13 @@ module Oxidized
|
|
16
16
|
'Port' => port.to_i,
|
17
17
|
'Timeout' => @timeout,
|
18
18
|
'Model' => @node.model }
|
19
|
-
opt['Output_log'] =
|
19
|
+
opt['Output_log'] = Oxidized::Config::Crash + "-#{@node.ip}-telnet" if CFG.input.debug?
|
20
20
|
|
21
21
|
@telnet = Net::Telnet.new opt
|
22
|
-
|
23
|
-
|
22
|
+
if @node.auth[:username] and @node.auth[:username].length > 0
|
23
|
+
expect username
|
24
|
+
@telnet.puts @node.auth[:username]
|
25
|
+
end
|
24
26
|
expect password
|
25
27
|
@telnet.puts @node.auth[:password]
|
26
28
|
begin
|
data/lib/oxidized/model/asa.rb
CHANGED
@@ -23,16 +23,16 @@ class ASA < Oxidized::Model
|
|
23
23
|
comment cfg
|
24
24
|
end
|
25
25
|
|
26
|
+
cmd 'show inventory' do |cfg|
|
27
|
+
comment cfg
|
28
|
+
end
|
29
|
+
|
26
30
|
cmd 'more system:running-config' do |cfg|
|
27
31
|
cfg = cfg.each_line.to_a[3..-1].join
|
28
32
|
cfg.gsub! /^: [^\n]*\n/, ''
|
29
33
|
cfg
|
30
34
|
end
|
31
35
|
|
32
|
-
cmd 'show inventory' do |cfg|
|
33
|
-
comment cfg
|
34
|
-
end
|
35
|
-
|
36
36
|
cfg :ssh do
|
37
37
|
if vars :enable
|
38
38
|
post_login do
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class C4CMTS < Oxidized::Model
|
2
|
+
|
3
|
+
# Arris C4 CMTS
|
4
|
+
|
5
|
+
prompt /^([\w.@:\/-]+[#>]\s?)$/
|
6
|
+
comment '! '
|
7
|
+
|
8
|
+
cmd :all do |cfg|
|
9
|
+
cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
cmd :secret do |cfg|
|
13
|
+
cfg.gsub! /(.+)\s+encrypted-password\s+\w+\s+(.*)/, '\\1 <secret hidden> \\2'
|
14
|
+
cfg.gsub! /(snmp-server community)\s+".*"\s+(.*)/, '\\1 <secret hidden> \\2'
|
15
|
+
cfg.gsub! /(tacacs.*\s+key)\s+".*"\s+(.*)/, '\\1 <secret hidden> \\2'
|
16
|
+
cfg.gsub! /(cable authstring)\s+\w+\s+(.*)/, '\\1 <secret hidden> \\2'
|
17
|
+
cfg
|
18
|
+
end
|
19
|
+
|
20
|
+
cmd 'show environment' do |cfg|
|
21
|
+
cfg.gsub! /\s+[\-\d]+\s+C\s+[\(\s\d]+\s+\F\)/, '' # remove temperature readings
|
22
|
+
cfg.each_line.to_a[1..-2].join
|
23
|
+
comment cfg
|
24
|
+
end
|
25
|
+
|
26
|
+
cmd 'show version' do |cfg|
|
27
|
+
# remove uptime readings at char 55 and beyond
|
28
|
+
cfg = cfg.each_line.map{|line|line.rstrip.slice(0..54)}.join("\n") + "\n"
|
29
|
+
comment cfg
|
30
|
+
end
|
31
|
+
|
32
|
+
cmd 'show running-config' do |cfg|
|
33
|
+
cfg = cfg.each_line.to_a[1..-2].join
|
34
|
+
cfg
|
35
|
+
end
|
36
|
+
|
37
|
+
cfg :telnet do
|
38
|
+
username /^Username:/
|
39
|
+
password /^Password:/
|
40
|
+
end
|
41
|
+
|
42
|
+
cfg :telnet, :ssh do
|
43
|
+
if vars :enable
|
44
|
+
post_login do
|
45
|
+
send "enable\n"
|
46
|
+
send vars(:enable) + "\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
pre_logout 'exit'
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
class Comware < Oxidized::Model
|
2
2
|
# HP (A-series)/H3C/3Com Comware
|
3
3
|
|
4
|
-
prompt
|
4
|
+
# sometimes the prompt might have a leading nul
|
5
|
+
prompt /^\0*(<[\w.-]+>)$/
|
5
6
|
comment '# '
|
6
7
|
|
7
8
|
# example how to handle pager
|
@@ -38,7 +39,7 @@ class Comware < Oxidized::Model
|
|
38
39
|
end
|
39
40
|
|
40
41
|
cmd 'display version' do |cfg|
|
41
|
-
cfg = cfg.each_line.select {|l| not l.match /uptime/ }.join
|
42
|
+
cfg = cfg.each_line.select {|l| not l.match /uptime/i }.join
|
42
43
|
comment cfg
|
43
44
|
end
|
44
45
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class DNOS < Oxidized::Model
|
2
|
+
|
3
|
+
# Force10 DNOS model #
|
4
|
+
|
5
|
+
comment '! '
|
6
|
+
|
7
|
+
cmd :all do |cfg|
|
8
|
+
cfg.each_line.to_a[2..-2].join
|
9
|
+
end
|
10
|
+
|
11
|
+
cmd :secret do |cfg|
|
12
|
+
cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
|
13
|
+
cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>'
|
14
|
+
cfg
|
15
|
+
end
|
16
|
+
|
17
|
+
cmd 'show inventory' do |cfg|
|
18
|
+
comment cfg
|
19
|
+
end
|
20
|
+
|
21
|
+
cmd 'show inventory media' do |cfg|
|
22
|
+
comment cfg
|
23
|
+
end
|
24
|
+
|
25
|
+
cmd 'show running-config' do |cfg|
|
26
|
+
cfg = cfg.each_line.to_a[3..-1].join
|
27
|
+
cfg
|
28
|
+
end
|
29
|
+
|
30
|
+
cfg :telnet do
|
31
|
+
username /^Login:/
|
32
|
+
password /^Password:/
|
33
|
+
end
|
34
|
+
|
35
|
+
cfg :telnet, :ssh do
|
36
|
+
post_login 'terminal length 0'
|
37
|
+
post_login 'terminal width 0'
|
38
|
+
if vars :enable
|
39
|
+
post_login do
|
40
|
+
send "enable\n"
|
41
|
+
send vars(:enable) + "\n"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
pre_logout 'exit'
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -16,12 +16,9 @@ class IronWare < Oxidized::Model
|
|
16
16
|
#end
|
17
17
|
|
18
18
|
cmd :all do |cfg|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
cmd 'show running-config' do |cfg|
|
23
|
-
cfg = cfg.each_line.to_a[3..-1].join
|
24
|
-
cfg
|
19
|
+
# sometimes ironware inserts arbitrary whitespace after commands are
|
20
|
+
# issued on the CLI, from run to run. this normalises the output.
|
21
|
+
cfg.each_line.to_a[1..-2].drop_while { |e| e.match /^\s+$/ }.join
|
25
22
|
end
|
26
23
|
|
27
24
|
cmd 'show version' do |cfg|
|
@@ -36,7 +33,7 @@ class IronWare < Oxidized::Model
|
|
36
33
|
cfg.gsub! /(^((.*)Current temp(.*))$)/, '' #remove unwanted lines current temperature
|
37
34
|
cfg.gsub! /Speed = [A-Z]{3} \(\d{2}\%\)/, '' #remove unwanted lines Speed Fans
|
38
35
|
cfg.gsub! /current speed is [A-Z]{3} \(\d{2}\%\)/, ''
|
39
|
-
cfg.gsub!
|
36
|
+
cfg.gsub! /\d{2}\.\d deg-C/, 'XX.X deg-C'
|
40
37
|
if cfg.include? "TEMPERATURE"
|
41
38
|
sc = StringScanner.new cfg
|
42
39
|
out = ''
|
@@ -55,20 +52,28 @@ class IronWare < Oxidized::Model
|
|
55
52
|
end
|
56
53
|
|
57
54
|
cmd 'show module' do |cfg|
|
55
|
+
cfg.gsub! /^((Invalid input)|(Type \?)).*$/, '' # some ironware devices are fixed config
|
58
56
|
comment cfg
|
59
57
|
end
|
60
58
|
|
59
|
+
cmd 'show running-config' do |cfg|
|
60
|
+
arr = cfg.each_line.to_a
|
61
|
+
arr[2..-1].join unless arr.length < 2
|
62
|
+
end
|
63
|
+
|
61
64
|
cfg :telnet do
|
62
|
-
|
63
|
-
|
65
|
+
# match expected prompts on both older and newer
|
66
|
+
# versions of IronWare
|
67
|
+
username /^(Please Enter Login Name|Username):/
|
68
|
+
password /^(Please Enter )Password:/
|
64
69
|
end
|
65
70
|
|
66
71
|
#handle pager with enable
|
67
72
|
cfg :telnet, :ssh do
|
68
73
|
if vars :enable
|
69
74
|
post_login do
|
70
|
-
send "enable\n"
|
71
|
-
send vars(:enable) + "\n"
|
75
|
+
send "enable\r\n"
|
76
|
+
send vars(:enable) + "\r\n"
|
72
77
|
end
|
73
78
|
end
|
74
79
|
post_login ''
|
@@ -79,4 +84,4 @@ class IronWare < Oxidized::Model
|
|
79
84
|
pre_logout 'exit'
|
80
85
|
end
|
81
86
|
|
82
|
-
end
|
87
|
+
end
|
data/lib/oxidized/model/junos.rb
CHANGED
@@ -9,7 +9,7 @@ class JunOS < Oxidized::Model
|
|
9
9
|
cmd :all do |cfg|
|
10
10
|
# we don't need screen-scraping in ssh due to exec
|
11
11
|
cfg = cfg.lines.to_a[1..-2].join if telnet
|
12
|
-
cfg.lines.map { |line| line.rstrip }.join "\n"
|
12
|
+
cfg.lines.map { |line| line.rstrip }.join("\n") + "\n"
|
13
13
|
end
|
14
14
|
|
15
15
|
cmd :secret do |cfg|
|
data/lib/oxidized/model/nos.rb
CHANGED
@@ -26,7 +26,7 @@ class NOS < Oxidized::Model
|
|
26
26
|
end
|
27
27
|
|
28
28
|
cfg 'show system' do |cfg|
|
29
|
-
|
29
|
+
comment cfg.each_line.reject { |line| line.match /Time/ or line.match /speed/ }
|
30
30
|
end
|
31
31
|
|
32
32
|
cmd 'show running-config'
|
data/lib/oxidized/model/xos.rb
CHANGED
@@ -6,7 +6,9 @@ class XOS < Oxidized::Model
|
|
6
6
|
comment '# '
|
7
7
|
|
8
8
|
cmd :all do |cfg|
|
9
|
-
|
9
|
+
# xos inserts leading \r characters and other trailing white space.
|
10
|
+
# this deletes extraneous \r and trailing white space.
|
11
|
+
cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n"
|
10
12
|
end
|
11
13
|
|
12
14
|
cmd 'show version' do |cfg|
|
@@ -35,6 +37,7 @@ class XOS < Oxidized::Model
|
|
35
37
|
cfg :telnet, :ssh do
|
36
38
|
post_login 'disable clipaging'
|
37
39
|
pre_logout 'exit'
|
40
|
+
pre_logout 'n'
|
38
41
|
end
|
39
42
|
|
40
43
|
end
|
data/oxidized.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxidized
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: asetus
|
@@ -136,9 +136,11 @@ files:
|
|
136
136
|
- lib/oxidized/model/aos7.rb
|
137
137
|
- lib/oxidized/model/aosw.rb
|
138
138
|
- lib/oxidized/model/asa.rb
|
139
|
+
- lib/oxidized/model/c4cmts.rb
|
139
140
|
- lib/oxidized/model/ciscosmb.rb
|
140
141
|
- lib/oxidized/model/comware.rb
|
141
142
|
- lib/oxidized/model/cumulus.rb
|
143
|
+
- lib/oxidized/model/dnos.rb
|
142
144
|
- lib/oxidized/model/edgeos.rb
|
143
145
|
- lib/oxidized/model/eos.rb
|
144
146
|
- lib/oxidized/model/fabricos.rb
|