oxidized 0.29.1 → 0.37.0

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.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/.coderabbit.yaml +21 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +45 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. data/.github/ISSUE_TEMPLATE/support-request.md +39 -0
  6. data/.github/workflows/codeql.yml +4 -4
  7. data/.github/workflows/publishdocker.yml +108 -13
  8. data/.github/workflows/ruby.yml +3 -12
  9. data/.github/workflows/stale.yml +6 -1
  10. data/.gitignore +2 -0
  11. data/.rubocop.yml +69 -13
  12. data/.rubocop_todo.yml +13 -143
  13. data/CHANGELOG.md +431 -4
  14. data/CONTRIBUTING.md +189 -0
  15. data/Dockerfile +89 -34
  16. data/README.md +59 -188
  17. data/Rakefile +58 -12
  18. data/bin/oxidized +2 -5
  19. data/docs/Configuration.md +382 -149
  20. data/docs/Creating-Models.md +262 -10
  21. data/docs/DeviceSimulation.md +196 -0
  22. data/docs/Docker.md +246 -0
  23. data/docs/Hooks.md +146 -51
  24. data/docs/Inputs.md +237 -0
  25. data/docs/Issues.md +123 -0
  26. data/docs/Model-Notes/APC.md +72 -0
  27. data/docs/Model-Notes/Cumulus.md +5 -0
  28. data/docs/Model-Notes/EatonNetwork.md +18 -0
  29. data/docs/Model-Notes/ExaLink.md +43 -0
  30. data/docs/Model-Notes/FSOS.md +17 -0
  31. data/docs/Model-Notes/Fortinet.md +75 -0
  32. data/docs/Model-Notes/GrandstreamHT8xx.md +8 -0
  33. data/docs/Model-Notes/HPEAruba.md +32 -0
  34. data/docs/Model-Notes/IvantiConnectSecure.md +59 -0
  35. data/docs/Model-Notes/OS6.md +10 -0
  36. data/docs/Model-Notes/README.md +1 -20
  37. data/docs/Model-Notes/RouterOS.md +28 -0
  38. data/docs/Model-Notes/SikluMHTG.md +7 -0
  39. data/docs/Model-Notes/TrueNAS.md +23 -0
  40. data/docs/Model-Notes/XGS4600-Zyxel.md +5 -0
  41. data/docs/ModelUnitTests.md +219 -0
  42. data/docs/Outputs.md +102 -5
  43. data/docs/Release.md +102 -0
  44. data/docs/Ruby-API.md +135 -2
  45. data/docs/Sources.md +34 -0
  46. data/docs/Supported-OS-Types.md +207 -270
  47. data/docs/Troubleshooting.md +43 -1
  48. data/extra/device2yaml.rb +259 -0
  49. data/extra/gitdiff-msteams.sh +32 -5
  50. data/extra/hooks/modelrules.rb +55 -0
  51. data/extra/hooks/modelrulesadvanced.rb +167 -0
  52. data/extra/hooks/srcipmap.rb +54 -0
  53. data/extra/nagios_check_failing_nodes.rb +1 -1
  54. data/extra/oxidized.runit +1 -1
  55. data/extra/rest_client.rb +5 -4
  56. data/extra/syslog.rb +11 -6
  57. data/lib/oxidized/cli/support.rb +152 -0
  58. data/lib/oxidized/cli.rb +21 -6
  59. data/lib/oxidized/config/vars.rb +33 -14
  60. data/lib/oxidized/config.rb +28 -17
  61. data/lib/oxidized/core.rb +50 -8
  62. data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
  63. data/lib/oxidized/hook/exec.rb +5 -4
  64. data/lib/oxidized/hook/githubrepo.rb +55 -18
  65. data/lib/oxidized/hook/noophook.rb +2 -2
  66. data/lib/oxidized/hook/slackdiff.rb +50 -14
  67. data/lib/oxidized/hook/xmppdiff.rb +9 -9
  68. data/lib/oxidized/hook.rb +68 -16
  69. data/lib/oxidized/input/cli.rb +8 -3
  70. data/lib/oxidized/input/debugtext.rb +40 -0
  71. data/lib/oxidized/input/debugyaml.rb +82 -0
  72. data/lib/oxidized/input/exec.rb +2 -11
  73. data/lib/oxidized/input/ftp.rb +2 -19
  74. data/lib/oxidized/input/http.rb +67 -17
  75. data/lib/oxidized/input/input.rb +35 -14
  76. data/lib/oxidized/input/scp.rb +27 -0
  77. data/lib/oxidized/input/ssh.rb +59 -83
  78. data/lib/oxidized/input/sshbase.rb +102 -0
  79. data/lib/oxidized/input/telnet.rb +20 -19
  80. data/lib/oxidized/input/tftp.rb +8 -8
  81. data/lib/oxidized/job.rb +18 -7
  82. data/lib/oxidized/jobs.rb +11 -1
  83. data/lib/oxidized/logger.rb +51 -0
  84. data/lib/oxidized/manager.rb +18 -17
  85. data/lib/oxidized/model/acos.rb +2 -1
  86. data/lib/oxidized/model/addpack.rb +26 -0
  87. data/lib/oxidized/model/adtran.rb +5 -1
  88. data/lib/oxidized/model/adva.rb +3 -3
  89. data/lib/oxidized/model/airfiber.rb +1 -1
  90. data/lib/oxidized/model/aos7.rb +11 -0
  91. data/lib/oxidized/model/aoscx.rb +37 -29
  92. data/lib/oxidized/model/aosw.rb +39 -29
  93. data/lib/oxidized/model/apc_aos.rb +7 -2
  94. data/lib/oxidized/model/apcaos.rb +39 -0
  95. data/lib/oxidized/model/aricentiss.rb +9 -2
  96. data/lib/oxidized/model/arubainstant.rb +93 -0
  97. data/lib/oxidized/model/asa.rb +11 -10
  98. data/lib/oxidized/model/asternos.rb +22 -0
  99. data/lib/oxidized/model/asyncos.rb +3 -3
  100. data/lib/oxidized/model/audiocodes.rb +2 -2
  101. data/lib/oxidized/model/awplus.rb +15 -12
  102. data/lib/oxidized/model/axos.rb +1 -1
  103. data/lib/oxidized/model/bdcom.rb +1 -0
  104. data/lib/oxidized/model/c4cmts.rb +1 -2
  105. data/lib/oxidized/model/ciscosma.rb +1 -1
  106. data/lib/oxidized/model/ciscosmb.rb +6 -1
  107. data/lib/oxidized/model/cnos.rb +13 -10
  108. data/lib/oxidized/model/comtrol.rb +1 -1
  109. data/lib/oxidized/model/comware.rb +5 -3
  110. data/lib/oxidized/model/cumulus.rb +14 -2
  111. data/lib/oxidized/model/defacto.rb +26 -0
  112. data/lib/oxidized/model/dellx.rb +1 -1
  113. data/lib/oxidized/model/dlink.rb +5 -2
  114. data/lib/oxidized/model/dlinknextgen.rb +55 -0
  115. data/lib/oxidized/model/dnos.rb +3 -0
  116. data/lib/oxidized/model/dslcommands.rb +93 -0
  117. data/lib/oxidized/model/dslsetup.rb +102 -0
  118. data/lib/oxidized/model/eatonnetwork.rb +70 -0
  119. data/lib/oxidized/model/edgecos.rb +3 -1
  120. data/lib/oxidized/model/edgeos.rb +7 -6
  121. data/lib/oxidized/model/edgeswitch.rb +3 -1
  122. data/lib/oxidized/model/efos.rb +41 -0
  123. data/lib/oxidized/model/eltex.rb +4 -2
  124. data/lib/oxidized/model/enterasys800.rb +2 -2
  125. data/lib/oxidized/model/enterprise_sonic.rb +46 -0
  126. data/lib/oxidized/model/eos.rb +3 -1
  127. data/lib/oxidized/model/exalink.rb +36 -0
  128. data/lib/oxidized/model/f5os.rb +17 -0
  129. data/lib/oxidized/model/fabricos.rb +2 -2
  130. data/lib/oxidized/model/fastiron.rb +5 -3
  131. data/lib/oxidized/model/firebrick.rb +2 -2
  132. data/lib/oxidized/model/firelinuxos.rb +13 -6
  133. data/lib/oxidized/model/firewareos.rb +10 -1
  134. data/lib/oxidized/model/fortigate.rb +160 -0
  135. data/lib/oxidized/model/fortios.rb +38 -48
  136. data/lib/oxidized/model/fsos.rb +46 -0
  137. data/lib/oxidized/model/gaiaos.rb +4 -4
  138. data/lib/oxidized/model/garderos.rb +38 -0
  139. data/lib/oxidized/model/grandstreamht8xx.rb +19 -0
  140. data/lib/oxidized/model/h3c.rb +1 -1
  141. data/lib/oxidized/model/ibos.rb +1 -0
  142. data/lib/oxidized/model/ingate.rb +47 -0
  143. data/lib/oxidized/model/ios.rb +57 -30
  144. data/lib/oxidized/model/iosxr.rb +2 -2
  145. data/lib/oxidized/model/ironware.rb +7 -5
  146. data/lib/oxidized/model/ivanti.rb +54 -0
  147. data/lib/oxidized/model/junos.rb +12 -5
  148. data/lib/oxidized/model/kornfeldos.rb +33 -0
  149. data/lib/oxidized/model/lenovonos.rb +2 -0
  150. data/lib/oxidized/model/linksyssrw.rb +3 -3
  151. data/lib/oxidized/model/linuxgeneric.rb +4 -2
  152. data/lib/oxidized/model/macros.rb +60 -0
  153. data/lib/oxidized/model/mimosab11.rb +34 -0
  154. data/lib/oxidized/model/ml66.rb +33 -0
  155. data/lib/oxidized/model/mlnxos.rb +18 -14
  156. data/lib/oxidized/model/model.rb +98 -103
  157. data/lib/oxidized/model/mtrlrfs.rb +1 -0
  158. data/lib/oxidized/model/ndms.rb +6 -0
  159. data/lib/oxidized/model/netgear.rb +14 -3
  160. data/lib/oxidized/model/netonix.rb +1 -1
  161. data/lib/oxidized/model/netscaler.rb +1 -1
  162. data/lib/oxidized/model/nodegrid.rb +1 -1
  163. data/lib/oxidized/model/nsxdfw.rb +31 -0
  164. data/lib/oxidized/model/nsxfirewall.rb +2 -1
  165. data/lib/oxidized/model/nxos.rb +20 -15
  166. data/lib/oxidized/model/ocnos.rb +42 -0
  167. data/lib/oxidized/model/onefinity.rb +18 -0
  168. data/lib/oxidized/model/openbsd.rb +1 -1
  169. data/lib/oxidized/model/opengear.rb +36 -1
  170. data/lib/oxidized/model/openwrt.rb +6 -6
  171. data/lib/oxidized/model/opnsense.rb +9 -1
  172. data/lib/oxidized/model/os6.rb +48 -0
  173. data/lib/oxidized/model/outputs.rb +5 -0
  174. data/lib/oxidized/model/panos.rb +2 -0
  175. data/lib/oxidized/model/perle.rb +41 -0
  176. data/lib/oxidized/model/pfsense.rb +9 -0
  177. data/lib/oxidized/model/powerconnect.rb +32 -11
  178. data/lib/oxidized/model/procurve.rb +6 -2
  179. data/lib/oxidized/model/qtech.rb +3 -1
  180. data/lib/oxidized/model/quantaos.rb +8 -6
  181. data/lib/oxidized/model/rgos.rb +33 -0
  182. data/lib/oxidized/model/riverbed.rb +104 -0
  183. data/lib/oxidized/model/routeros.rb +18 -11
  184. data/lib/oxidized/model/saos.rb +18 -1
  185. data/lib/oxidized/model/saos10.rb +38 -0
  186. data/lib/oxidized/model/siklu.rb +1 -1
  187. data/lib/oxidized/model/siklumhtg.rb +22 -0
  188. data/lib/oxidized/model/sixwind.rb +28 -0
  189. data/lib/oxidized/model/slxos.rb +3 -3
  190. data/lib/oxidized/model/smartbyte.rb +48 -0
  191. data/lib/oxidized/model/sonicos.rb +27 -20
  192. data/lib/oxidized/model/speedtouch.rb +1 -1
  193. data/lib/oxidized/model/sros.rb +3 -3
  194. data/lib/oxidized/model/srosmd.rb +1 -1
  195. data/lib/oxidized/model/supermicro.rb +1 -1
  196. data/lib/oxidized/model/telco.rb +1 -1
  197. data/lib/oxidized/model/tmos.rb +1 -0
  198. data/lib/oxidized/model/tnsr.rb +57 -0
  199. data/lib/oxidized/model/tplink.rb +5 -5
  200. data/lib/oxidized/model/trango.rb +4 -2
  201. data/lib/oxidized/model/truenas.rb +64 -3
  202. data/lib/oxidized/model/ucs.rb +1 -1
  203. data/lib/oxidized/model/unifiap.rb +144 -0
  204. data/lib/oxidized/model/uplinkolt.rb +46 -0
  205. data/lib/oxidized/model/voltaire.rb +1 -1
  206. data/lib/oxidized/model/voss.rb +3 -0
  207. data/lib/oxidized/model/vrp.rb +5 -1
  208. data/lib/oxidized/model/vyatta.rb +9 -3
  209. data/lib/oxidized/model/vyos.rb +37 -0
  210. data/lib/oxidized/model/xos.rb +10 -1
  211. data/lib/oxidized/model/zhoneolt.rb +4 -2
  212. data/lib/oxidized/model/zynos.rb +67 -3
  213. data/lib/oxidized/model/zynosadsl.rb +14 -0
  214. data/lib/oxidized/model/zynoscli.rb +1 -1
  215. data/lib/oxidized/model/zynosgs.rb +2 -0
  216. data/lib/oxidized/model/zynosmgs.rb +32 -0
  217. data/lib/oxidized/node.rb +99 -64
  218. data/lib/oxidized/nodes.rb +40 -19
  219. data/lib/oxidized/output/file.rb +80 -43
  220. data/lib/oxidized/output/git.rb +295 -151
  221. data/lib/oxidized/output/gitcrypt.rb +193 -185
  222. data/lib/oxidized/output/http.rb +63 -51
  223. data/lib/oxidized/output/output.rb +20 -4
  224. data/lib/oxidized/signals.rb +44 -0
  225. data/lib/oxidized/source/csv.rb +49 -49
  226. data/lib/oxidized/source/http.rb +76 -63
  227. data/lib/oxidized/source/jsonfile.rb +68 -0
  228. data/lib/oxidized/source/source.rb +73 -18
  229. data/lib/oxidized/source/sql.rb +71 -59
  230. data/lib/oxidized/version.rb +6 -4
  231. data/lib/oxidized/worker.rb +57 -29
  232. data/lib/oxidized.rb +4 -24
  233. data/lib/refinements.rb +21 -1
  234. data/oxidized.gemspec +45 -21
  235. metadata +248 -41
  236. data/lib/oxidized/model/timos.rb +0 -10
data/docs/Inputs.md ADDED
@@ -0,0 +1,237 @@
1
+ # Inputs
2
+ ## Index
3
+ * Configuration
4
+ * [SSH](#ssh)
5
+ * [SCP](#scp)
6
+ * [FTP](#ftp)
7
+ * telnet
8
+ * http
9
+ * tftp
10
+ * exec
11
+ * [Debugging](#debugging)
12
+
13
+ ## SSH
14
+ ### Disabling SSH exec channels
15
+
16
+ Oxidized uses exec channels to make information extraction simpler, but there
17
+ are some situations where this doesn't work well, e.g. configuring devices. This
18
+ feature can be turned off by setting the `ssh_no_exec`
19
+ variable.
20
+
21
+ ```yaml
22
+ vars:
23
+ ssh_no_exec: true
24
+ ```
25
+
26
+ ### Disabling SSH keepalives
27
+
28
+ Oxidized SSH input makes use of SSH keepalives to prevent timeouts from slower
29
+ devices and to quickly tear down stale sessions in larger deployments. There
30
+ have been reports of SSH keepalives breaking compatibility with certain OS
31
+ types. They can be disabled using the `ssh_no_keepalive` variable on a per-node
32
+ basis (by specifying it in the source) or configured application-wide.
33
+
34
+ ```yaml
35
+ vars:
36
+ ssh_no_keepalive: true
37
+ ```
38
+
39
+ ### SSH Auth Methods
40
+
41
+ By default, Oxidized registers the following auth methods: `none`, `publickey` and `password`. However you can configure this globally, by groups, models or nodes.
42
+
43
+ ```yaml
44
+ vars:
45
+ auth_methods: [ "none", "publickey", "password", "keyboard-interactive" ]
46
+ ```
47
+
48
+ ### Public Key Authentication with SSH
49
+
50
+ Instead of password-based login, Oxidized can make use of key-based SSH
51
+ authentication.
52
+
53
+ You can tell Oxidized to use one or more private keys globally, or specify the
54
+ key to be used on a per-node basis. The latter can be done by mapping the
55
+ `ssh_keys` variable through the active source.
56
+
57
+ Global:
58
+
59
+ ```yaml
60
+ vars:
61
+ ssh_keys: "~/.ssh/id_rsa"
62
+ ```
63
+
64
+ Per-Node:
65
+
66
+ ```yaml
67
+ # ...
68
+ map:
69
+ name: 0
70
+ model: 1
71
+ vars_map:
72
+ enable: 2
73
+ ssh_keys: 3
74
+ # ...
75
+ ```
76
+
77
+ If you are using a non-standard path, especially when copying the private key
78
+ via a secured channel, make sure that the permissions are set correctly:
79
+
80
+ ```bash
81
+ foo@bar:~$ ls -la ~/.ssh/
82
+ total 20
83
+ drwx------ 2 oxidized oxidized 4096 Mar 13 17:03 .
84
+ drwx------ 5 oxidized oxidized 4096 Mar 13 21:40 ..
85
+ -r-------- 1 oxidized oxidized 103 Mar 13 17:03 authorized_keys
86
+ -rw------- 1 oxidized oxidized 399 Mar 13 17:02 id_ed25519
87
+ -rw-r--r-- 1 oxidized oxidized 94 Mar 13 17:02 id_ed25519.pub
88
+ ```
89
+
90
+ Finally, multiple private keys can be specified as an array of file paths, such
91
+ as `["~/.ssh/id_rsa", "~/.ssh/id_another_rsa"]`.
92
+
93
+ ### SSH Proxy Command
94
+
95
+ Oxidized can `ssh` through a proxy as well. To do so we just need to set
96
+ `ssh_proxy` variable with the proxy host information and optionally set the
97
+ `ssh_proxy_port` with the SSH port if it is not listening on port 22.
98
+
99
+ This can be provided on a per-node basis by mapping the proper fields from your
100
+ source.
101
+
102
+ An example for a `csv` input source that maps the 4th field as the `ssh_proxy`
103
+ value and the 5th field as `ssh_proxy_port`.
104
+
105
+ ```yaml
106
+ # ...
107
+ map:
108
+ name: 0
109
+ model: 1
110
+ vars_map:
111
+ enable: 2
112
+ ssh_proxy: 3
113
+ ssh_proxy_port: 4
114
+ # ...
115
+ ```
116
+
117
+ ### SSH enabling legacy algorithms
118
+
119
+ When connecting to older firmware over SSH, it is sometimes necessary to enable
120
+ legacy/disabled settings like KexAlgorithms, HostKeyAlgorithms, MAC or the
121
+ Encryption.
122
+
123
+ These settings can be provided on a per-node basis by mapping the ssh_kex,
124
+ ssh_host_key, ssh_hmac and the ssh_encryption fields from you source.
125
+
126
+ ```yaml
127
+ # ...
128
+ map:
129
+ name: 0
130
+ model: 1
131
+ vars_map:
132
+ enable: 2
133
+ ssh_kex: 3
134
+ ssh_host_key: 4
135
+ ssh_hmac: 5
136
+ ssh_encryption: 6
137
+ # ...
138
+ ```
139
+
140
+ ### Custom SSH port
141
+ Set the variable `ssh_port` to the desired value (default is 22).
142
+
143
+ ### SSH Host key verification
144
+ With the configuration `secure', you can set the ssh key verification:
145
+ - `true`: strict host verification, looking up the known host files
146
+ - `false` (default): disable host verification, accept any ssh key
147
+
148
+ ```
149
+ input:
150
+ ssh:
151
+ secure: true
152
+ ```
153
+
154
+ ## SCP
155
+ ### SSH Host key verification (SCP)
156
+ Same as for [SSH host key verification](#ssh-host-key-verification)
157
+
158
+ ```
159
+ input:
160
+ scp:
161
+ secure: true
162
+ ```
163
+
164
+ ### Custom SCP port
165
+ Set the variable `ssh_port` to the desired value (default is 22).
166
+
167
+ ## FTP
168
+ ### FTP Passive Mode
169
+
170
+ Oxidized uses ftp passive mode by default. Some devices require passive mode to
171
+ be disabled. To do so, we can set `input.ftp.passive` to false - this will make
172
+ use of FTP active mode.
173
+
174
+ ```yaml
175
+ input:
176
+ ftp:
177
+ passive: false
178
+ ```
179
+
180
+ ## HTTP
181
+ ### Supported HTTP Methods
182
+
183
+ The HTTP input supports the following HTTP methods:
184
+ - `:get` - for GET requests
185
+ - `:post` - for POST requests
186
+
187
+ These methods are used internally by models that require HTTP-based
188
+ configuration retrieval. Models can use `get_http()` and `post_http()` methods
189
+ provided by the HTTP input.
190
+
191
+ Example usage in a model:
192
+
193
+ ```ruby
194
+ cfg :http do
195
+ post_response = post_http('/some/path', payload, 'Some-Extra-Header' => 'value')
196
+ get_response = get_http('/some/path')
197
+ end
198
+ ```
199
+
200
+ HTTP input can be enabled by adding this block to the configuration file:
201
+
202
+ ```yaml
203
+ input:
204
+ http:
205
+ scheme: https
206
+ ssl_verify: true
207
+ timeout: 30
208
+ ```
209
+
210
+ ## Debugging
211
+ In case a model plugin doesn't work correctly (ios, procurve, etc.), you can
212
+ enable live debugging of SSH and Telnet sessions with the `debug` option of
213
+ the `input` section.
214
+
215
+ Starting with version 0.37.0, `debug` can take different values:
216
+ - `text`: log input and output to a text file (ssh, telnet)
217
+ - `yaml`: produce a yaml simulation file (ssh, scp)
218
+ - `library`: activate debug logging of the underlying library
219
+ - a combination of the options above (`text, yaml`)
220
+ - `true`; activate all debugging options (Only option for versions prior 0.37.0)
221
+
222
+ The log files will be created in `~/.config/oxidized/logs/` (or `$OXIDIZED_LOGS/logs/`).
223
+
224
+ The following example will log an active ssh/telnet session to
225
+ `~/.config/oxidized/logs/<IP-Address>-<PROTOCOL>-<timestamp>.txt` and for ssh
226
+ `~/.config/oxidized/logs/<IP-Address>-<PROTOCOL>-<timestamp>.yaml`. A new file
227
+ is created for each session.
228
+
229
+ ```yaml
230
+ input:
231
+ default: ssh, telnet
232
+ debug: yaml, text
233
+ ssh:
234
+ secure: false
235
+ http:
236
+ ssl_verify: true
237
+ ```
data/docs/Issues.md ADDED
@@ -0,0 +1,123 @@
1
+ # Writing good issues
2
+ If you're experiencing a problem with Oxidized or need a new feature, you can
3
+ [submit an issue on github](https://github.com/ytti/oxidized/issues). We have
4
+ a great community where users help each other through the issue system.
5
+
6
+ This guide provides tips on writing your issue to make it easier for the
7
+ community and developers to understand and respond effectively.
8
+
9
+ Why write good issues?
10
+ - A clear and detailed issue improves the chances of getting your problem
11
+ resolved.
12
+ - By spending time to write a good issue, you save developers time, contributing
13
+ to Oxidized’s progress without writing a line of code.
14
+
15
+ ## Rules
16
+ The project receives too many incomplete issues, unnecessarily taking time that
17
+ could be invested in new code. Therefore, issues will be worked on with the
18
+ following rules:
19
+
20
+ - Use the predefined templates for bugs, feature requests and support requests.
21
+ - If you don't provide the necessary information (read this file, fill in the
22
+ questions in the templates), expect your issue to be closed without a comment.
23
+ - Inactive issues will be marked "stale" automatically after 90 days. Issues
24
+ are not closed automatically; this is a manual action by a maintainer.
25
+ - A feature request may be closed after some time of inactivity, as obviously
26
+ no one has found the time to implement it. Consider contributing code in a
27
+ Pull Request instead.
28
+ - While it is OK to ask for help (using the support request template), don't be
29
+ disappointed if no one finds the time to answer your question. Stale questions
30
+ (after 90 days) will be closed without a comment.
31
+
32
+ ## Submit to the correct project
33
+ Choose the appropriate GitHub project based on your issue:
34
+
35
+ - For issues with the web frontend or REST API, go to
36
+ [oxidized-web](https://github.com/ytti/oxidized-web/).
37
+ - For issues with oxidized-script, use
38
+ [oxidized-script](https://github.com/ytti/oxidized-script). (note: as of
39
+ November 2024, oxidized-script is not actively maintained).
40
+ - For issues with third-party software relying on Oxidized, open an issue in
41
+ that specific project.
42
+ - For issues with Oxidized itself, go to
43
+ [oxidized](https://github.com/ytti/oxidized).
44
+
45
+ ## Use the latest version
46
+ If you are using an old version of oxidized, you may encounter issues that have
47
+ been solved. No support will be provided for older versions of oxidized.
48
+
49
+ If you can, please also test against the latest git version, or at least read
50
+ [CHANGELOG.md](/CHANGELOG.md) to see if your problem has been solved on master.
51
+
52
+ ## Format your issue
53
+ - Use [GitHub Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) to format your issue.
54
+ - Preview your text before submitting to ensure it renders correctly.
55
+ - Avoid screenshots of text. Instead, use [code formating](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#quoting-code) for any relevant code snippets.
56
+
57
+ ## Choose your title well
58
+ Keep the title brief yet descriptive. Aim to summarize the main issue or request in a few words.
59
+
60
+ ## Provide detailled informations
61
+ Include as many relevant details as possible. At a minimum, specify:
62
+
63
+ - Oxidized version and operating system.
64
+ - Which model (oxidized name AND Manufacturer name) is the issue about.
65
+ - Relevant parts of your Oxidized configuration and a brief explanation of your setup.
66
+ - Output of the error, if relevant.
67
+ - For issues related to specific devices, consider creating a YAML Simulation file (instructions below).
68
+
69
+ Also, provide clear steps to reproduce the issue, if applicable.
70
+
71
+ ## Making feature requests
72
+ Feature requests are welcome, but please understand that unaddressed requests
73
+ may be closed after some time. If you need a feature urgently, consider
74
+ contributing code via a pull request (PR) or hiring a developer.
75
+
76
+ ## Sumbit a YAML Simulation File
77
+ To help developers troubleshoot device-specific issues, you may be asked to submit a
78
+ [YAML simulation file](/docs/DeviceSimulation.md#creating-a-yaml-file-with-device2yamlrb) for your device.
79
+
80
+ Here's a brief overview how to do it, you can find more details in the link
81
+ above.
82
+ - Fork Oxidized on github
83
+ - Install dependencies (git and Ruby's Net::SSH):
84
+ ```
85
+ # Adapt when not using a debian-based distro
86
+ sudo apt install git ruby-net-ssh
87
+ ```
88
+ - Clone your forked Oxidized repository:
89
+ ```
90
+ git clone git@github.com:<your github user>/oxidized.git
91
+ ```
92
+ - run the `extra/device2yaml.rb` script (you’ll be provided with the command to
93
+ run) from the repository root:
94
+
95
+ ```
96
+ extra/device2yaml.rb oxidized@r61 -c "terminal length 0
97
+ terminal width 0
98
+ show version
99
+ show vtp status
100
+ show inventory
101
+ show running-config
102
+ exit" -o spec/model/data/ios:C8200L_16.12.1:simulation.yaml
103
+ ```
104
+
105
+ - The script waits 5 seconds between commands, and outputs the response of the
106
+ device. You can press "ESC" if you see the prompt and want to pass to next
107
+ command without waiting for the timeout.
108
+ - The result will be stored in `spec/model/data/`.
109
+ - Replace any sensitive information with placeholder values in the output file.
110
+ - Commit & push the file to github
111
+ ```
112
+ git add spec/model/data/ios:C8200L_16.12.1:simulation.yaml
113
+ git commit -m "Device simulation for C8200L"
114
+ git push
115
+ ```
116
+ - Create a pull request (PR) in GitHub, referencing the issue number (e.g.,
117
+ "YAML simulation file for issue #1234").
118
+
119
+
120
+
121
+
122
+
123
+
@@ -0,0 +1,72 @@
1
+ # APC Configuration
2
+ The configuration of APC Network Management Cards can be downloaded using FTP
3
+ and SCP. You can retrieve serial numbers and OS version information through
4
+ an SSH connection.
5
+
6
+ APC OS does not have the ability to display the config.ini within an SSH shell.
7
+ A ticket was opened with APC support to enable "cat config.ini"
8
+ within an SSH shell, but APC declined to implement this feature.
9
+
10
+ To overcome this limitation, a capability to run against multiple inputs (SSH + SCP)
11
+ has been implemented in Oxidized and in the [model ApcAos](/lib/oxidized/model/apcaos.rb).
12
+
13
+ The old model apc_aos (SCP/FTP only) is deprecated and will be removed in a
14
+ future release. Migrate to ApcAos.
15
+
16
+ ## How do I activate FTP/SCP input?
17
+ To download the configuration with FTP or SCP, you must activate it
18
+ as an input in the Oxidized configuration. If you don't activate the input,
19
+ Oxidized will fail for the node with an error.
20
+
21
+ You probably also need to increase the default timeout to something about 60
22
+ seconds, as the APC are really slow, and need about 30 seconds to complete.
23
+
24
+ The configuration can be done either globally or only for the ApcAos model.
25
+
26
+ ### Global Configuration
27
+ The global configuration would look like this. Note that Oxidized will try every
28
+ input type in the given order until it succeeds, or it will report a failure.
29
+ ```yaml
30
+ timeout: 60
31
+ input:
32
+ default: ssh, ftp, scp
33
+ ```
34
+ The order in the configuration is relevant. With this configuration, the ApcAos
35
+ model will run SSH first, then it will try FTP, and if FTP fails SCP.
36
+
37
+ ### Model-Specific Configuration
38
+
39
+ Configuration for activating only the SCP input for ApcAos only:
40
+ ```yaml
41
+ input:
42
+ default: ssh
43
+ models:
44
+ apcaos:
45
+ input: ssh, scp
46
+ timeout: 60
47
+ ```
48
+
49
+ ### Setting Specific Credentials
50
+ You can also set a specific username and password for ApcAos only:
51
+ ```yaml
52
+ username: default-user
53
+ password: default-password
54
+ input:
55
+ default: ssh
56
+ models:
57
+ ApcAos:
58
+ username: apc-user
59
+ password: apc-password
60
+ input: ssh, scp
61
+ timeout: 60
62
+ ```
63
+
64
+ ## Why do I partially get CR + LF?
65
+ The config.ini file has a DOS-Format (CR + LF), and is saved without
66
+ modifications, so that it can be uploaded to the device.
67
+
68
+ Outputs from ssh are stored without CR, so the first part of the file is
69
+ without CR and config.ini with CR + LF.
70
+
71
+ This is expected behavior and should not affect the functionality of the backup
72
+ or restore process.
@@ -11,6 +11,9 @@ A variable has been added to enable users running Cumulus Linux > 3.4.0 to targe
11
11
  ## NCLU
12
12
  It is possible to switch to [NCLU](https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/System-Configuration/Network-Command-Line-Utility-NCLU/) as a configuration collecting method, by setting `cumulus_use_nclu` to true
13
13
 
14
+ ## NVUE
15
+ It is also possible to use [NVUE](https://docs.nvidia.com/networking-ethernet-software/knowledge-base/Setup-and-Getting-Started/NVUE-Cheat-Sheet/) as a configuration collecting method, by setting `cumulus_use_nvue` to true.
16
+
14
17
  ### Example usage
15
18
 
16
19
  ```yaml
@@ -43,4 +46,6 @@ The default value for `cumulus_routing_daemon` is `quagga` so existing installat
43
46
 
44
47
  The default value for `cumulus_use_nclu` is `false`, in case NCLU is not installed.
45
48
 
49
+ The default value for `cumulus_use_nvue` is `false`, in case NVUE is not installed.
50
+
46
51
  Back to [Model-Notes](README.md)
@@ -0,0 +1,18 @@
1
+ # EatonNetwork Configuration
2
+
3
+ This model uses the command `save_configuration -p <passphrase>` to get the backup config. The `-p` option is a required passphrase used to encrypted sensitive parts of the config data, the encrypted data is nondeterministic and changes with each run. The passphrase used is the auth password for the node.
4
+
5
+ See the [Eaton Network-M3 user's guide](https://www.eaton.com/content/dam/eaton/products/backup-power-ups-surge-it-power-distribution/power-management-software-connectivity/eaton-gigabit-network-card/network-m3/resources/eaton-network-m3-user-guide.pdf) section 7.7.14 (page 260) for more information.
6
+
7
+ To not have the backup change on each for all `eatonnetwork` node run set a model var in the config for the `eatonnetwork` model to [remove secrets](../Configuration.md#removing-secrets):
8
+
9
+ ```yaml
10
+ models:
11
+ eatonnetwork:
12
+ vars:
13
+ remove_secret: true
14
+ ```
15
+
16
+ See the [Eaton Network-M3 user's guide](https://www.eaton.com/content/dam/eaton/products/backup-power-ups-surge-it-power-distribution/power-management-software-connectivity/eaton-gigabit-network-card/network-m3/resources/eaton-network-m3-user-guide.pdf) section 3.20 (page 111) for details on JSON configuration structure, and restoring without sensitive/secrets.
17
+
18
+ Back to [Model-Notes](README.md)
@@ -0,0 +1,43 @@
1
+ # Cisco Nexus 3550-F (ExaLink Fusion)
2
+
3
+ The Cisco Nexus 3550-F (formerly Exablaze ExaLink Fusion) is an ultra-low-latency
4
+ Layer 1/2 switch platform based on FPGA technology, primarily used in high-frequency
5
+ trading and HPC environments. It runs a custom Linux-based OS with a proprietary CLI
6
+ and JSON RPC API.
7
+
8
+ ## Device Configuration
9
+
10
+ Create a read-only user for Oxidized on the device:
11
+
12
+ ```
13
+ admin@N3550-F> configure user oxidized password <password>
14
+ admin@N3550-F> configure user oxidized privilege read-only
15
+ ```
16
+
17
+ ## Oxidized Configuration
18
+
19
+ ```yaml
20
+ source:
21
+ default: csv
22
+ csv:
23
+ file: "/home/oxidized/.config/oxidized/router.db"
24
+ delimiter: !ruby/regexp /:/
25
+ map:
26
+ name: 0
27
+ model: 1
28
+ ```
29
+
30
+ Example `router.db` entry:
31
+
32
+ ```bash
33
+ myswitch.example.com:exalink
34
+ ```
35
+
36
+ ## Notes
37
+
38
+ - Both SSH and Telnet are supported. SSH is recommended.
39
+ - The model collects `show version` (excluding uptime to avoid noisy diffs),
40
+ `show port`, and `show running-config`.
41
+ - Timestamps (`!Time:`) are stripped from the running config to avoid noisy diffs.
42
+ - The device prompt format is `hostname#` or `hostname>`.
43
+ - This model was developed and tested against software version 1.16.0.
@@ -0,0 +1,17 @@
1
+ # Fiberstore (fs.com) FSOS notes
2
+
3
+ This has been tested against the following models and OS versions
4
+
5
+ |Model |OS Version and Build |
6
+ |--------------------|------------------------------|
7
+ |S3400-48T4SP |Version 2.0.2J Build 81736 |
8
+ |S3400-48T4SP |Version 2.0.2J Build 95262 |
9
+ |S3400-48T6SP |Version 2.2.0F Build 109661 |
10
+ |S3400-48T4SP |Version 2.0.2J Build 120538 |
11
+ |S3410-24TS-P |S3410_FSOS 11.4(1)B74S5 |
12
+ |S5850-48T4Q |Version 7.0.4.34 |
13
+ |S5800-48MBQ |Version 7.0.4.21 |
14
+ |S5810-48TS-P |S5810_FSOS 11.4(1)B74S8, Release(10200711) |
15
+ |S5860-20SQ |S5860_FSOS 12.4(1)B0101P1S4 |
16
+
17
+ Back to [Model-Notes](README.md)
@@ -0,0 +1,75 @@
1
+ # Fortinet models
2
+ There are two models for Fortinet devices:
3
+ - fortigate: for the FortiGate firewalls
4
+ - fortios: for VM-Based appliances (FortiManager, FortiADC, FortiAnalyzer...)
5
+
6
+ # Notes for both models
7
+ ## Configuration changes / hiding passwords
8
+ Fortigate and Fortios re-encrypt their passwords every time the configuration is shown.
9
+ This results in a lot of apparent configuration changes on every pull.
10
+
11
+ To avoid this, you have two options:
12
+ - remove secrets
13
+ - save significant changes only
14
+
15
+ ### Remove secrets
16
+ If you don't want to have a new version every time the configuration is
17
+ downloaded, you can hide all secrets. Beware that you won't have a full backup, as all passwords will be replaced with <configuration removed>
18
+
19
+ ```yaml
20
+ models:
21
+ fortigate:
22
+ vars:
23
+ remove_secret: true
24
+ ```
25
+
26
+ ### Save significant changes only
27
+ You can [store the configuration only on significant changes](/docs/Configuration.md#store-configuration-only-on-significant-changes)
28
+ by setting the [variable](#options-credentials-vars-etc-precedence)
29
+ `output_store_mode` to `on_significant`. On FortiGate and FortiOS, this
30
+ prevents Oxidized from saving a configuration when there were only changes to
31
+ the encrypted passwords. Beware that you won't have the last backup if you only
32
+ changed a password.
33
+
34
+ ```yaml
35
+ vars:
36
+ output_store_mode: on_significant
37
+ ```
38
+
39
+ # Notes for the FortiGate model
40
+ ## Create user oxidized with ED25519 public key
41
+ You can use a user/password for retrieving the configuration or use a SSH public key:
42
+
43
+ ```text
44
+ config system admin
45
+ edit oxidized
46
+ set trusthost1 192.0.2.1 255.255.255.255
47
+ set accprofile "super_admin_readonly"
48
+ set ssh-public-key1 "ssh-ed25519 AAAAThisIsJustAnExampleKey_UseYourOxidizedPUBLICKEY oxidized@librenms"
49
+ end
50
+ ```
51
+
52
+ ## config vs. full config
53
+ On FortiGate, you can get a configuration without default values (`show`) or
54
+ including all default values (`show full-configuration`).
55
+
56
+ The full configuration can be long and may cause timeouts.
57
+ Starting with with oxidized 0.30.1, the default is to get the short configuration.
58
+
59
+ If you need the full configuration, you can activate it in oxidized config file:
60
+ ```yaml
61
+ models:
62
+ fortigate:
63
+ vars:
64
+ fullconfig: true
65
+ ```
66
+ ## Autoupdate
67
+ You can get the result of `diagnose autoupdate version` by setting the [variable](#options-credentials-vars-etc-precedence) `fortigate_autoupdate` to `true`:
68
+
69
+ ```yaml
70
+ vars:
71
+ fortigate_autoupdate: true
72
+ ```
73
+
74
+ Note that the variable `fortios_autoupdate` is deprecated and will be removed
75
+ in a future Version of Oxidized. Use `fortigate_autoupdate` instead.
@@ -0,0 +1,8 @@
1
+ # Grandstream HT8xx
2
+
3
+ You need to have enabled access to device by SSH.
4
+ Connection using user/password for retrieve the configuration containing XML file with all params stored in device memory.
5
+
6
+ Tested on hardware: v1 and software version: 1.0.61.2.
7
+
8
+ Back to [Model-Notes](README.md)
@@ -0,0 +1,32 @@
1
+ # HPE Aruba Networking devices
2
+ HPE Aruba offers various networking devices with different operating systems.
3
+
4
+ ## HPE Aruba Networking Instant Mode (Aruba Instant)
5
+ [Aruba Instant](https://www.arubanetworks.com/techdocs/ArubaDocPortal/content/cons-instant-home.htm)
6
+ runs on IAPs (Instant Access points).
7
+
8
+ The Oxidized model is [ArubaInstant](/lib/oxidized/model/arubainstant.rb).
9
+ When run on the virtual WLAN controller, it will also collect the list of the
10
+ WLAN-AP linked to the controller.
11
+
12
+ The aosw model for AOS 8 used to be used for Aruba Instant, but it does not work
13
+ as well and may stop working in the future.
14
+
15
+ ## HPE Aruba Networking Wireless Operating System 8 (AOS 8)
16
+ [AOS 8](https://www.arubanetworks.com/techdocs/ArubaDocPortal/content/cons-aos-home.htm)
17
+ runs on WLAN controllers (mobility controllers) and controller-managed access
18
+ points.
19
+
20
+ The Oxidized model is [aosw](/lib/oxidized/model/aosw.rb).
21
+
22
+ ## HPE Aruba Networking CX Switch Operating System (AOS-CX)
23
+ [AOS-CX](https://www.arubanetworks.com/techdocs/AOS-CX/help_portal/Content/home.htm)
24
+ is the operating system for the newer CX-Series.
25
+
26
+ The Oxidized model is [aoscx](/lib/oxidized/model/aoscx.rb).
27
+
28
+ ## Older Models
29
+ Older Devices like [ProCurve](/lib/oxidized/model/procurve.rb) or 3Com/Comware
30
+ are listed under the Vendor "HP" in the
31
+ [Supported OS Types](/docs/Supported-OS-Types.md) list.
32
+