oxidized 0.25.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +30 -9
  3. data/.rubocop_todo.yml +16 -637
  4. data/.travis.yml +2 -3
  5. data/CHANGELOG.md +14 -0
  6. data/Dockerfile +7 -5
  7. data/README.md +18 -14
  8. data/Rakefile +2 -2
  9. data/bin/console +1 -1
  10. data/bin/oxidized +2 -2
  11. data/docs/Configuration.md +6 -0
  12. data/docs/Model-Notes/README.md +1 -0
  13. data/docs/Model-Notes/SmartAX-Huawei.md +35 -0
  14. data/docs/Supported-OS-Types.md +12 -0
  15. data/extra/nagios_check_failing_nodes.rb +1 -1
  16. data/extra/rest_client.rb +6 -8
  17. data/extra/syslog.rb +33 -33
  18. data/lib/oxidized/cli.rb +25 -26
  19. data/lib/oxidized/config.rb +9 -9
  20. data/lib/oxidized/config/vars.rb +3 -7
  21. data/lib/oxidized/core.rb +4 -7
  22. data/lib/oxidized/hook.rb +16 -17
  23. data/lib/oxidized/hook/awssns.rb +4 -4
  24. data/lib/oxidized/hook/exec.rb +16 -20
  25. data/lib/oxidized/hook/githubrepo.rb +8 -14
  26. data/lib/oxidized/hook/noophook.rb +1 -1
  27. data/lib/oxidized/hook/xmppdiff.rb +1 -1
  28. data/lib/oxidized/input/cli.rb +12 -12
  29. data/lib/oxidized/input/ftp.rb +8 -8
  30. data/lib/oxidized/input/http.rb +37 -14
  31. data/lib/oxidized/input/input.rb +6 -6
  32. data/lib/oxidized/input/ssh.rb +31 -31
  33. data/lib/oxidized/input/telnet.rb +24 -24
  34. data/lib/oxidized/input/tftp.rb +9 -10
  35. data/lib/oxidized/jobs.rb +7 -7
  36. data/lib/oxidized/manager.rb +13 -13
  37. data/lib/oxidized/model/acos.rb +2 -2
  38. data/lib/oxidized/model/aireos.rb +3 -3
  39. data/lib/oxidized/model/aos7.rb +1 -1
  40. data/lib/oxidized/model/aosw.rb +12 -14
  41. data/lib/oxidized/model/apc_aos.rb +1 -1
  42. data/lib/oxidized/model/aricentiss.rb +6 -8
  43. data/lib/oxidized/model/asa.rb +1 -1
  44. data/lib/oxidized/model/audiocodesmp.rb +28 -0
  45. data/lib/oxidized/model/awplus.rb +9 -9
  46. data/lib/oxidized/model/boss.rb +1 -1
  47. data/lib/oxidized/model/ciscosmb.rb +1 -1
  48. data/lib/oxidized/model/ciscovpn3k.rb +11 -0
  49. data/lib/oxidized/model/comware.rb +1 -1
  50. data/lib/oxidized/model/cumulus.rb +3 -1
  51. data/lib/oxidized/model/dellx.rb +5 -5
  52. data/lib/oxidized/model/edgeos.rb +1 -1
  53. data/lib/oxidized/model/edgeswitch.rb +1 -1
  54. data/lib/oxidized/model/fabricos.rb +1 -1
  55. data/lib/oxidized/model/fortios.rb +5 -5
  56. data/lib/oxidized/model/ftos.rb +1 -1
  57. data/lib/oxidized/model/gcombnps.rb +7 -7
  58. data/lib/oxidized/model/grandstream.rb +9 -0
  59. data/lib/oxidized/model/hatteras.rb +8 -8
  60. data/lib/oxidized/model/ios.rb +22 -40
  61. data/lib/oxidized/model/ironware.rb +1 -1
  62. data/lib/oxidized/model/junos.rb +1 -1
  63. data/lib/oxidized/model/mlnxos.rb +1 -1
  64. data/lib/oxidized/model/model.rb +32 -38
  65. data/lib/oxidized/model/netgearxs716.rb +23 -0
  66. data/lib/oxidized/model/netonix.rb +1 -1
  67. data/lib/oxidized/model/netscaler.rb +1 -1
  68. data/lib/oxidized/model/nos.rb +2 -2
  69. data/lib/oxidized/model/nxos.rb +1 -1
  70. data/lib/oxidized/model/openbsd.rb +3 -2
  71. data/lib/oxidized/model/outputs.rb +4 -4
  72. data/lib/oxidized/model/planet.rb +4 -4
  73. data/lib/oxidized/model/powerconnect.rb +8 -8
  74. data/lib/oxidized/model/procurve.rb +2 -1
  75. data/lib/oxidized/model/quantaos.rb +3 -3
  76. data/lib/oxidized/model/raisecom.rb +19 -0
  77. data/lib/oxidized/model/siklu.rb +1 -1
  78. data/lib/oxidized/model/slxos.rb +1 -1
  79. data/lib/oxidized/model/smartax.rb +25 -0
  80. data/lib/oxidized/model/sros.rb +4 -4
  81. data/lib/oxidized/model/tdre.rb +30 -0
  82. data/lib/oxidized/model/tmos.rb +3 -0
  83. data/lib/oxidized/model/trango.rb +17 -37
  84. data/lib/oxidized/model/voltaire.rb +1 -1
  85. data/lib/oxidized/model/voss.rb +1 -1
  86. data/lib/oxidized/model/vyatta.rb +1 -1
  87. data/lib/oxidized/model/xos.rb +1 -1
  88. data/lib/oxidized/model/zhoneolt.rb +1 -1
  89. data/lib/oxidized/node.rb +42 -46
  90. data/lib/oxidized/node/stats.rb +6 -6
  91. data/lib/oxidized/nodes.rb +42 -42
  92. data/lib/oxidized/output/file.rb +16 -20
  93. data/lib/oxidized/output/git.rb +68 -78
  94. data/lib/oxidized/output/gitcrypt.rb +77 -91
  95. data/lib/oxidized/output/http.rb +17 -19
  96. data/lib/oxidized/output/output.rb +1 -1
  97. data/lib/oxidized/source/csv.rb +3 -3
  98. data/lib/oxidized/source/http.rb +11 -14
  99. data/lib/oxidized/source/source.rb +3 -3
  100. data/lib/oxidized/source/sql.rb +16 -18
  101. data/lib/oxidized/string.rb +10 -10
  102. data/lib/oxidized/version.rb +4 -4
  103. data/lib/oxidized/worker.rb +15 -15
  104. data/oxidized.gemspec +6 -9
  105. metadata +32 -25
@@ -2,10 +2,9 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  before_install:
5
- - gem install bundler
5
+ - gem install bundler
6
6
  rvm:
7
- - 2.1
8
- - 2.2
9
7
  - 2.3
10
8
  - 2.4
11
9
  - 2.5
10
+ - 2.6
@@ -2,6 +2,20 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## 0.26.0
6
+
7
+ * FEATURE: add Cisco VPN3000 model (@baznikin)
8
+ * FEATURE: add NetGear PROSafe Smart switches model (@baznikin)
9
+ * FEATURE: Added possibility to pass root logs directory as environment variable (@Glorf)
10
+ * FEATURE: add OneAccess TDRE (1645) model (@starrsl)
11
+ * FEATURE: add Audiocodes MediaPack MP-1xx and Mediant 1000 model (@pedjaj)
12
+ * FEATURE: add raisecom RAX model (@vitalisator)
13
+ * FEATURE: add huawei smartax model (@nyash)
14
+ * FEATURE: add grandstream model
15
+ * MISC: prompt updates in siklu, netonix, netscaler models
16
+ * MISC: minimal supported ruby is now 2.3, net-ssh dependency ~> 5, rubocop ~> 0.65.0
17
+ * FIX: in git comparison we might mistakenly always detect change due to !utf8 vs. utf8 encoding of a char
18
+
5
19
  ## 0.25.0
6
20
 
7
21
  * FEATURE: add viptela model (@bobthebutcher)
data/Dockerfile CHANGED
@@ -3,8 +3,10 @@ FROM phusion/baseimage:0.11
3
3
  LABEL maintainer="Samer Abdel-Hafez <sam@arahant.net>"
4
4
 
5
5
  # set up dependencies for the build process
6
- RUN apt-get -yq update && \
7
- apt-get -yq install ruby2.5 ruby2.5-dev libssl1.1 libssl-dev pkg-config make cmake libssh2-1 libssh2-1-dev git g++ libffi-dev ruby-bundler libicu60 libicu-dev libsqlite3-0 libsqlite3-dev libmysqlclient20 libmysqlclient-dev
6
+ RUN apt-get -yq update \
7
+ && apt-get -yq --no-install-recommends install ruby2.5 ruby2.5-dev libssl1.1 libssl-dev pkg-config make cmake libssh2-1 libssh2-1-dev git g++ libffi-dev ruby-bundler libicu60 libicu-dev libsqlite3-0 libsqlite3-dev libmysqlclient20 libmysqlclient-dev \
8
+ && apt-get clean \
9
+ && rm -rf /var/lib/apt/lists/*
8
10
 
9
11
  # dependencies for hooks
10
12
  RUN gem install aws-sdk slack-api xmpp4r cisco_spark --no-ri --no-rdoc
@@ -29,9 +31,9 @@ RUN rm -rf /tmp/oxidized
29
31
  RUN apt-get -yq --purge autoremove ruby-dev pkg-config make cmake ruby-bundler libssl-dev libssh2-1-dev libicu-dev libsqlite3-dev libmysqlclient-dev
30
32
 
31
33
  # add runit services
32
- ADD extra/oxidized.runit /etc/service/oxidized/run
33
- ADD extra/auto-reload-config.runit /etc/service/auto-reload-config/run
34
- ADD extra/update-ca-certificates.runit /etc/service/update-ca-certificates/run
34
+ COPY extra/oxidized.runit /etc/service/oxidized/run
35
+ COPY extra/auto-reload-config.runit /etc/service/auto-reload-config/run
36
+ COPY extra/update-ca-certificates.runit /etc/service/update-ca-certificates/run
35
37
 
36
38
  VOLUME ["/root/.config/oxidized"]
37
39
  EXPOSE 8888/tcp
data/README.md CHANGED
@@ -37,7 +37,7 @@ Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU#t=3h
37
37
  * [FreeBSD](#freebsd)
38
38
  * [Build from Git](#build-from-git)
39
39
  * [Docker](#running-with-docker)
40
- * [Installing Ruby 2.1.2 using RVM](#installing-ruby-212-using-rvm)
40
+ * [Installing Ruby 2.3 using RVM](#installing-ruby-23-using-rvm)
41
41
  3. [Initial Configuration](#configuration)
42
42
  4. [Configuration](docs/Configuration.md)
43
43
  * [Debugging](docs/Configuration.md#debugging)
@@ -86,7 +86,7 @@ add-apt-repository universe
86
86
  Install the dependencies:
87
87
 
88
88
  ```shell
89
- apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev
89
+ apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++
90
90
  ```
91
91
 
92
92
  Finally, install the gems:
@@ -98,21 +98,25 @@ gem install oxidized-script oxidized-web # If you don't install oxidized-web, en
98
98
 
99
99
  ### CentOS, Oracle Linux, Red Hat Linux
100
100
 
101
- On CentOS 6 / RHEL 6, begin by installing Ruby 2.0 or greater. For Ruby 2.1.2 installation instructions see [Installing Ruby 2.1.2 using RVM](#installing-ruby-212-using-rvm).
101
+ On CentOS 6 and 7 / RHEL 6 and 7, begin by installing Ruby 2.3 or greater. This can be accomplished in one of two ways:
102
102
 
103
- If you've installed Ruby 2.0 or greater via a 3rd party package rather than the RVM instructions, additional dependencies will be required:
103
+ Install Ruby 2.3 from [SCL](https://www.softwarecollections.org/en/scls/rhscl/rh-ruby23/):
104
104
 
105
105
  ```shell
106
- yum install make cmake which sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c++
106
+ yum install centos-release-scl
107
+ yum install rh-ruby23
108
+ scl enable rh-ruby23 bash
107
109
  ```
108
110
 
109
- RHEL 7 / CentOS 7 will work out of the box with the following package list:
111
+ The following additional packages will be required to build the dependencies:
110
112
 
111
113
  ```shell
112
114
  yum install make cmake which sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c++
113
115
  ```
114
116
 
115
- Now let's install oxidized via Rubygems:
117
+ Alternatively, install Ruby 2.3 by following the instructions at [Installing Ruby 2.3 using RVM](#installing-ruby-23-using-rvm).
118
+
119
+ Finally, install oxidized via Rubygems:
116
120
 
117
121
  ```shell
118
122
  gem install oxidized
@@ -121,7 +125,7 @@ gem install oxidized-script oxidized-web # if you don't install oxidized-web, ma
121
125
 
122
126
  ### FreeBSD
123
127
 
124
- [Use RVM to install Ruby v2.1.2](#installing-ruby-212-using-rvm), then install all required packages and gems:
128
+ [Use RVM to install Ruby v2.3](#installing-ruby-23-using-rvm), then install all required packages and gems:
125
129
 
126
130
  ```shell
127
131
  pkg install cmake pkgconf
@@ -225,9 +229,9 @@ If you need to use an internal CA (e.g. to connect to an private github instance
225
229
  docker run -v /etc/oxidized:/root/.config/oxidized -v /path/to/MY-CA.crt:/usr/local/share/ca-certificates/MY-CA.crt -p 8888:8888/tcp -e UPDATE_CA_CERTIFICATES=true -t oxidized/oxidized:latest
226
230
  ```
227
231
 
228
- ### Installing Ruby 2.1.2 using RVM
232
+ ### Installing Ruby 2.3 using RVM
229
233
 
230
- Install Ruby 2.1.2 build dependencies
234
+ Install Ruby 2.3 build dependencies
231
235
 
232
236
  ```shell
233
237
  yum install curl gcc-c++ patch readline readline-devel zlib zlib-devel
@@ -241,12 +245,12 @@ Install RVM
241
245
  curl -L get.rvm.io | bash -s stable
242
246
  ```
243
247
 
244
- Setup RVM environment and compile and install Ruby 2.1.2 and set it as default
248
+ Setup RVM environment and compile and install Ruby 2.3 and set it as default
245
249
 
246
250
  ```shell
247
251
  source /etc/profile.d/rvm.sh
248
- rvm install 2.1.2
249
- rvm use --default 2.1.2
252
+ rvm install 2.3
253
+ rvm use --default 2.3
250
254
  ```
251
255
 
252
256
  ## Configuration
@@ -286,7 +290,7 @@ Oxidized supports [CSV](docs/Configuration.md#source-csv), [SQLite](docs/Config
286
290
 
287
291
  Possible outputs are either [File](docs/Configuration.md#output-file), [GIT](docs/Configuration.md#output-git), [GIT-Crypt](docs/Configuration.md#output-git-crypt) and [HTTP](docs/Configuration.md#output-http). The file backend takes a destination directory as argument and will keep a file per device, with most recent running version of a device. The GIT backend (recommended) will initialize an empty GIT repository in the specified path and create a new commit on every configuration change. The GIT-Crypt backend will also initialize a GIT repository but every configuration push to it will be encrypted on the fly by using `git-crypt` tool. Take a look at the [Configuration](docs/Configuration.md) for more details.
288
292
 
289
- Maps define how to map a model's fields to model [model fields](https://github.com/ytti/oxidized/tree/master/lib/oxidized/model). Most of the settings should be self explanatory, log is ignored if `use_syslog`(requires Ruby >= 2.0) is set to `true`.
293
+ Maps define how to map a model's fields to model [model fields](https://github.com/ytti/oxidized/tree/master/lib/oxidized/model). Most of the settings should be self explanatory, log is ignored if `use_syslog` is set to `true`.
290
294
 
291
295
  First create the directory where the CSV `output` is going to store device configs and start Oxidized once.
292
296
 
data/Rakefile CHANGED
@@ -32,7 +32,7 @@ task :test do
32
32
  end
33
33
  end
34
34
 
35
- task :build => :version_set
35
+ task build: :version_set
36
36
  task :version_set do
37
37
  Oxidized.version_set
38
38
  Bundler::GemHelper.instance.gemspec.version = Oxidized::VERSION
@@ -54,7 +54,7 @@ task :tag do
54
54
  end
55
55
 
56
56
  desc 'Push to rubygems'
57
- task :push => :tag do
57
+ task push: :tag do
58
58
  system "gem push pkg/#{file}"
59
59
  end
60
60
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- lib = File.expand_path('../../lib', __FILE__)
3
+ lib = File.expand_path('../lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  require 'oxidized'
@@ -6,8 +6,8 @@ trap("INT") { exit } # sinatra will otherwise steal this from us
6
6
  begin
7
7
  require_relative '../lib/oxidized/cli'
8
8
  Oxidized::CLI.new.run
9
- rescue => error
10
- warn "#{error}"
9
+ rescue StandardError => error
10
+ warn error.to_s
11
11
  debug = Oxidized.config.debug rescue true
12
12
  raise if debug
13
13
  end
@@ -262,3 +262,9 @@ Names can instead be passed verbatim to the input:
262
262
  ```yaml
263
263
  resolve_dns: false
264
264
  ```
265
+
266
+ ## Environment variables
267
+
268
+ You can use some environment variables to change default root directories values.
269
+ * `OXIDIZED_HOME` may be used to set oxidized configuration directory, which defaults to `~/.config/oxidized`
270
+ * `OXIDIZED_LOGS` may be used to set oxidzied logs and crash directories root, which default to `~/.config/oxidized`
@@ -12,6 +12,7 @@ Arbor Networks|[ArbOS](ArbOS.md)|27 Feb 2018
12
12
  Arista|[EOS](EOS.md)|05 Feb 2018
13
13
  Cumulus|[Cumulus](Cumulus.md)|11 Jun 2018
14
14
  Huawei|[VRP](VRP-Huawei.md)|17 Nov 2017
15
+ Huawei|[SmartAX series](SmartAX-Huawei.md)|21 Jan 2019
15
16
  Juniper|[MX/QFX/EX/SRX/J Series](JunOS.md)|18 Jan 2018
16
17
  Netgear|[Netgear](Netgear.md)|11 Apr 2018
17
18
  Nokia|[Nokia ISAM](Nokia.md)|22 Aug 2018
@@ -0,0 +1,35 @@
1
+ # Huawei SmartAX GPON/EPON/DOCSIS network access devices
2
+
3
+ It is necessary to disable SSH keepalives in Oxidized for configuration retrieval via SSH to work properly.
4
+
5
+ To disable SSH keepalives globally edit the config's vars section and add:
6
+
7
+ ```yaml
8
+ vars:
9
+ ssh_no_keepalive: true
10
+ ```
11
+
12
+ To disable SSH keepalives per device edit the config's source section and map ssh_no_keepalive to a column inside router.db file.
13
+
14
+ ```yaml
15
+ source:
16
+ default: csv
17
+ csv:
18
+ file: ~/.config/oxidized/router.db
19
+ delimiter: !ruby/regexp /:/
20
+ map:
21
+ name: 0
22
+ model: 1
23
+ username: 2
24
+ password: 3
25
+ vars_map:
26
+ ssh_no_keepalive: 4
27
+ ```
28
+
29
+ ```text
30
+ # router.db
31
+ 10.0.0.1:smartax:someusername:somepassword:true
32
+ 10.0.0.2:ios:someusername:somepassword:false
33
+ ```
34
+
35
+ Back to [Model-Notes](README.md)
@@ -16,6 +16,7 @@
16
16
  * Wireless
17
17
  * Allied Telesis
18
18
  * [Alliedware Plus](/lib/oxidized/model/awplus.rb)
19
+ * [AT-8000S, AT-8000GS series](/lib/oxidized/model/powerconnect.rb)
19
20
  * Alvarion
20
21
  * [BreezeACCESS](/lib/oxidized/model/alvarion.rb)
21
22
  * APC
@@ -30,6 +31,7 @@
30
31
  * [AOSW](/lib/oxidized/model/aosw.rb)
31
32
  * AudioCodes
32
33
  * [AudioCodes](/lib/oxdized/model/audiocodes.rb)
34
+ * [MediaPack MP-1xx, Mediant1000](/lib/oxdized/model/audiocodesmp.rb)
33
35
  * Avaya
34
36
  * [VOSS (VSP Operating System Software)](/lib/oxidized/model/voss.rb)
35
37
  * [BOSS (Baystack Operating System Software)](/lib/oxidized/model/boss.rb)
@@ -61,6 +63,7 @@
61
63
  * [SMA](/lib/oxidized/model/ciscosma.rb)
62
64
  * [SMB (Nikola series)](/lib/oxidized/model/ciscosmb.rb)
63
65
  * [UCS](/lib/oxidized/model/ucs.rb)
66
+ * [VPN3000](/lib/oxidized/model/ciscovpn3k.rb)
64
67
  * Citrix
65
68
  * [NetScaler (Virtual Applicance)](/lib/oxidized/model/netscaler.rb)
66
69
  * Coriant (former Tellabs)
@@ -109,6 +112,8 @@
109
112
  * [PRIMERGY Blade switch 1/10Gbe](/lib/oxidized/model/fujitsupy.rb)
110
113
  * GCOM Technologies
111
114
  * [Broadband Network Platform Software](/lib/oxidized/model/gcombnps.rb)
115
+ * Grandstream Networks
116
+ * [GSX](/lib/oxidized/model/grandstream.rb)
112
117
  * Hatteras
113
118
  * [Hatteras](/lib/oxidized/model/hatteras.rb)
114
119
  * Hillstone Networks
@@ -122,6 +127,7 @@
122
127
  * [MSA](/lib/oxidized/model/hpemsa.rb)
123
128
  * Huawei
124
129
  * [VRP](/lib/oxidized/model/vrp.rb)
130
+ * [SmartAX series](/lib/oxidized/model/smartax.rb)
125
131
  * Juniper
126
132
  * [JunOS](/lib/oxidized/model/junos.rb)
127
133
  * [ScreenOS (Netscreen)](/lib/oxidized/model/screenos.rb)
@@ -137,12 +143,14 @@
137
143
  * [FiberDriver](/lib/oxidized/model/fiberdriver.rb)
138
144
  * Netgear
139
145
  * [Netgear](/lib/oxidized/model/netgear.rb)
146
+ * [Netgear PROSafe Smart switches](/lib/oxidized/model/netgearxs716.rb)
140
147
  * Netonix
141
148
  * [WISP Switch (As Netonix)](/lib/oxidized/model/netonix.rb)
142
149
  * Nokia (formerly TiMetra, Alcatel, Alcatel-Lucent)
143
150
  * [SR OS (TiMOS)](/lib/oxidized/model/sros.rb)
144
151
  * OneAccess
145
152
  * [OneOS](/lib/oxidized/model/oneos.rb)
153
+ * [TDRE](/lib/oxidized/model/tdre.rb)
146
154
  * [OpenBSD](/lib/oxidized/model/openbsd.rb)
147
155
  * Opengear
148
156
  * [Opengear](/lib/oxidized/model/opengear.rb)
@@ -154,6 +162,8 @@
154
162
  * [pfSense](/lib/oxidized/model/pfsense.rb)
155
163
  * Radware
156
164
  * [AlteonOS](/lib/oxidized/model/alteonos.rb)
165
+ * Raisecom
166
+ * [Raisecom](/lib/oxidized/model/raisecom.rb)
157
167
  * Quanta
158
168
  * [Quanta / VxWorks 6.6 (1.1.0.8)](/lib/oxidized/model/quantaos.rb)
159
169
  * Siklu
@@ -171,6 +181,8 @@
171
181
  * [Trango](/lib/oxidized/model/trango.rb)
172
182
  * TPLink
173
183
  * [TPLink](/lib/oxidized/model/tplink.rb)
184
+ * [TL-SL5428](/lib/oxidized/model/edgecos.rb)
185
+ * [TL-SL3428](/lib/oxidized/model/powerconnect.rb)
174
186
  * Ubiquiti
175
187
  * [AirOS](/lib/oxidized/model/airos.rb)
176
188
  * [Edgeos](/lib/oxidized/model/edgeos.rb)
@@ -10,7 +10,7 @@ pending = false
10
10
  critical_nodes = []
11
11
  pending_nodes = []
12
12
 
13
- json = JSON.load(open("http://localhost:8888/nodes.json"))
13
+ json = JSON.parse(open("http://localhost:8888/nodes.json"))
14
14
  json.each do |node|
15
15
  if not node['last'].nil?
16
16
  if node['last']['status'] != 'success'
@@ -9,36 +9,34 @@ module Oxidized
9
9
  Root = Root = ENV['OXIDIZED_HOME'] || File.join(ENV['HOME'], '.config', 'oxidized')
10
10
  end
11
11
 
12
- CFGS = Asetus.new :name => 'oxidized', :load => false, :key_to_s => true
12
+ CFGS = Asetus.new name: 'oxidized', load: false, key_to_s: true
13
13
  CFGS.default.rest = '127.0.0.1:8888'
14
14
 
15
15
  begin
16
16
  CFGS.load
17
- rescue => error
17
+ rescue StandardError => error
18
18
  raise InvalidConfig, "Error loading config: #{error.message}"
19
19
  end
20
20
 
21
21
  restcfg = CFGS.cfg.rest
22
- unless restcfg.match(/^http:\/\//)
23
- restcfg.insert(0, 'http://')
24
- end
22
+ restcfg.insert(0, 'http://') unless restcfg =~ /^http:\/\//
25
23
 
26
24
  HOST = URI(restcfg).host
27
25
  PORT = URI(restcfg).port
28
26
  PATH = URI(restcfg).path
29
27
 
30
28
  class << self
31
- def next opt = {}, host = HOST, port = PORT
29
+ def next(opt = {}, host = HOST, port = PORT)
32
30
  web = new host, port
33
31
  web.next opt
34
32
  end
35
33
  end
36
34
 
37
- def initialize host = HOST, port = PORT
35
+ def initialize(host = HOST, port = PORT)
38
36
  @web = Net::HTTP.new host, port
39
37
  end
40
38
 
41
- def next opt
39
+ def next(opt)
42
40
  data = JSON.dump opt
43
41
  @web.put PATH + '/node/next/' + opt[:name].to_s, data
44
42
  end
@@ -32,14 +32,14 @@ module Oxidized
32
32
  Root = File.join ENV['HOME'], '.config', 'oxidized'
33
33
  end
34
34
 
35
- CFGS = Asetus.new :name => 'oxidized', :load => false, :key_to_s => true
35
+ CFGS = Asetus.new name: 'oxidized', load: false, key_to_s: true
36
36
  CFGS.default.syslogd.port = 514
37
37
  CFGS.default.syslogd.file = 'messages'
38
38
  CFGS.default.syslogd.resolve = true
39
39
 
40
40
  begin
41
41
  CFGS.load
42
- rescue => error
42
+ rescue StandardError => error
43
43
  raise InvalidConfig, "Error loading config: #{error.message}"
44
44
  ensure
45
45
  CFG = CFGS.cfg # convenienence, instead of Config.cfg.password, CFG.password
@@ -48,24 +48,24 @@ module Oxidized
48
48
  class SyslogMonitor
49
49
  NAME_MAP = {
50
50
  /(.*)\.ip\.tdc\.net/ => '\1',
51
- /(.*)\.ip\.fi/ => '\1',
52
- }
51
+ /(.*)\.ip\.fi/ => '\1'
52
+ }.freeze
53
53
  MSG = {
54
- :ios => /%SYS-(SW[0-9]+-)?5-CONFIG_I:/,
55
- :junos => 'UI_COMMIT:',
56
- :eos => /%SYS-5-CONFIG_I:/,
57
- :nxos => /%VSHD-5-VSHD_SYSLOG_CONFIG_I:/,
58
- }
54
+ ios: /%SYS-(SW[0-9]+-)?5-CONFIG_I:/,
55
+ junos: 'UI_COMMIT:',
56
+ eos: /%SYS-5-CONFIG_I:/,
57
+ nxos: /%VSHD-5-VSHD_SYSLOG_CONFIG_I:/
58
+ }.freeze
59
59
 
60
60
  class << self
61
- def udp port = Oxidized::CFG.syslogd.port, listen = 0
61
+ def udp(port = Oxidized::CFG.syslogd.port, listen = 0)
62
62
  io = UDPSocket.new
63
63
  io.bind listen, port
64
64
  new io, :udp
65
65
  end
66
66
 
67
- def file syslog_file = Oxidized::CFG.syslogd.file
68
- io = open syslog_file, 'r'
67
+ def file(syslog_file = Oxidized::CFG.syslogd.file)
68
+ io = File.open syslog_file, 'r'
69
69
  io.seek 0, IO::SEEK_END
70
70
  new io, :file
71
71
  end
@@ -73,43 +73,43 @@ module Oxidized
73
73
 
74
74
  private
75
75
 
76
- def initialize io, mode = :udp
76
+ def initialize(io, mode = :udp)
77
77
  @mode = mode
78
78
  run io
79
79
  end
80
80
 
81
- def rest opt
81
+ def rest(opt)
82
82
  Oxidized::RestClient.next opt
83
83
  end
84
84
 
85
- def ios ip, log, i
85
+ def ios(ipaddr, log, index)
86
86
  # TODO: we need to fetch 'ip/name' in mode == :file here
87
- user = log[i + 5]
87
+ user = log[index + 5]
88
88
  from = log[-1][1..-2]
89
- rest(:user => user, :from => from, :model => 'ios', :ip => ip,
90
- :name => getname(ip))
89
+ rest(user: user, from: from, model: 'ios', ip: ipaddr,
90
+ name: getname(ipaddr))
91
91
  end
92
92
 
93
- def jnpr ip, log, i
93
+ def jnpr(ipaddr, log, index)
94
94
  # TODO: we need to fetch 'ip/name' in mode == :file here
95
- user = log[i + 2][1..-2]
96
- msg = log[(i + 6)..-1].join(' ')[10..-2]
95
+ user = log[index + 2][1..-2]
96
+ msg = log[(index + 6)..-1].join(' ')[10..-2]
97
97
  msg = nil if msg == 'none'
98
- rest(:user => user, :msg => msg, :model => 'jnpr', :ip => ip,
99
- :name => getname(ip))
98
+ rest(user: user, msg: msg, model: 'jnpr', ip: ipaddr,
99
+ name: getname(ipaddr))
100
100
  end
101
101
 
102
- def handle_log log, ip
102
+ def handle_log(log, ipaddr)
103
103
  log = log.to_s.split ' '
104
- if i = log.find_index { |e| e.match(MSG[:ios]) }
105
- ios ip, log, i
106
- elsif i = log.index(MSG[:junos])
107
- jnpr ip, log, i
104
+ if (i = log.find_index { |e| e.match(MSG[:ios]) })
105
+ ios ipaddr, log, i
106
+ elsif (i = log.index(MSG[:junos]))
107
+ jnpr ipaddr, log, i
108
108
  end
109
109
  end
110
110
 
111
- def run io
112
- while true
111
+ def run(io)
112
+ loop do
113
113
  log = select [io]
114
114
  log, ip = log.first.first, nil
115
115
  if @mode == :udp
@@ -127,11 +127,11 @@ module Oxidized
127
127
  end
128
128
  end
129
129
 
130
- def getname ip
130
+ def getname(ipaddr)
131
131
  if Oxidized::CFG.syslogd.resolve == false
132
- ip
132
+ ipddr
133
133
  else
134
- name = (Resolv.getname ip.to_s rescue ip)
134
+ name = (Resolv.getname ipaddr.to_s rescue ipadr)
135
135
  NAME_MAP.each { |re, sub| name.sub! re, sub }
136
136
  name
137
137
  end