oxidized 0.30.1 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +2 -2
  3. data/.github/workflows/stale.yml +4 -2
  4. data/.rubocop.yml +18 -2
  5. data/.rubocop_todo.yml +5 -12
  6. data/CHANGELOG.md +61 -1
  7. data/CONTRIBUTING.md +5 -0
  8. data/Dockerfile +82 -21
  9. data/README.md +5 -21
  10. data/Rakefile +3 -2
  11. data/docs/Configuration.md +36 -12
  12. data/docs/Creating-Models.md +45 -4
  13. data/docs/Hooks.md +34 -0
  14. data/docs/Issues.md +91 -0
  15. data/docs/Model-Notes/Cumulus.md +5 -0
  16. data/docs/Model-Notes/FSOS.md +5 -0
  17. data/docs/Model-Notes/FortiOS.md +21 -5
  18. data/docs/Model-Notes/HPEAruba.md +31 -0
  19. data/docs/Model-Notes/OS6.md +10 -0
  20. data/docs/Model-Notes/RouterOS.md +15 -0
  21. data/docs/Model-Notes/SikluMHTG.md +7 -0
  22. data/docs/Outputs.md +2 -0
  23. data/docs/Release.md +18 -15
  24. data/docs/Sources.md +21 -0
  25. data/docs/Supported-OS-Types.md +11 -5
  26. data/docs/Troubleshooting.md +35 -0
  27. data/examples/device-simulation/README.md +173 -0
  28. data/examples/device-simulation/cmdsets/aoscx +9 -0
  29. data/examples/device-simulation/cmdsets/arubainstant +5 -0
  30. data/examples/device-simulation/cmdsets/asa +7 -0
  31. data/examples/device-simulation/cmdsets/ios +7 -0
  32. data/examples/device-simulation/cmdsets/nxos +5 -0
  33. data/examples/device-simulation/cmdsets/routeros +5 -0
  34. data/examples/device-simulation/cmdsets/srosmd +11 -0
  35. data/examples/device-simulation/device2yaml.rb +225 -0
  36. data/examples/device-simulation/yaml/aoscx_R0X25A-6410_FL.10.10.1100.yaml +2281 -0
  37. data/examples/device-simulation/yaml/aoscx_R8N85A-C6000-48G-CL4_PL.10.08.1010.yaml +451 -0
  38. data/examples/device-simulation/yaml/arubainstant_IAP515_8.10.0.6_VWLC.yaml +213 -0
  39. data/examples/device-simulation/yaml/asa_5512_9.12-4-67_single-context.yaml +531 -0
  40. data/examples/device-simulation/yaml/asr920_16.8.1b.yaml +1122 -0
  41. data/examples/device-simulation/yaml/garderos_R7709_003_006_068.yaml +101 -0
  42. data/examples/device-simulation/yaml/iosxe_C9200L-24P-4G_17.09.04a.yaml +514 -0
  43. data/examples/device-simulation/yaml/iosxe_C9800-L-F-K9_17.06.05.yaml +417 -0
  44. data/examples/device-simulation/yaml/riverbed_915.yaml +123 -0
  45. data/examples/device-simulation/yaml/routeros_CHR_7.10.1.yaml +145 -0
  46. data/examples/device-simulation/yaml/routeros_CHR_7.16.yaml +79 -0
  47. data/examples/device-simulation/yaml/routeros_L009UiGS_7.15.2.yaml +353 -0
  48. data/examples/podman-compose/Makefile +60 -17
  49. data/examples/podman-compose/README.md +63 -27
  50. data/examples/podman-compose/docker-compose.yml +11 -2
  51. data/examples/podman-compose/gitserver/.gitignore +1 -0
  52. data/examples/podman-compose/gitserver/Dockerfile +14 -0
  53. data/examples/podman-compose/model-simulation/Dockerfile-model +1 -1
  54. data/examples/podman-compose/model-simulation/asternos.sh +2 -0
  55. data/examples/podman-compose/oxidized-config/.gitignore +2 -0
  56. data/examples/podman-compose/oxidized-config/config +1 -1
  57. data/examples/podman-compose/oxidized-config/config_csv-file +46 -0
  58. data/examples/podman-compose/oxidized-config/config_csv-gitserver +56 -0
  59. data/examples/podman-compose/oxidized-ssh/.gitignore +1 -0
  60. data/lib/oxidized/config.rb +7 -1
  61. data/lib/oxidized/hook/githubrepo.rb +37 -7
  62. data/lib/oxidized/hook/slackdiff.rb +29 -7
  63. data/lib/oxidized/input/http.rb +1 -0
  64. data/lib/oxidized/input/telnet.rb +1 -1
  65. data/lib/oxidized/manager.rb +17 -16
  66. data/lib/oxidized/model/aoscx.rb +16 -2
  67. data/lib/oxidized/model/aosw.rb +7 -1
  68. data/lib/oxidized/model/arubainstant.rb +90 -0
  69. data/lib/oxidized/model/audiocodes.rb +2 -2
  70. data/lib/oxidized/model/cnos.rb +13 -10
  71. data/lib/oxidized/model/cumulus.rb +3 -0
  72. data/lib/oxidized/model/dlink.rb +1 -0
  73. data/lib/oxidized/model/dlinknextgen.rb +3 -0
  74. data/lib/oxidized/model/edgecos.rb +2 -1
  75. data/lib/oxidized/model/eos.rb +2 -0
  76. data/lib/oxidized/model/f5os.rb +17 -0
  77. data/lib/oxidized/model/firewareos.rb +10 -1
  78. data/lib/oxidized/model/fortios.rb +24 -1
  79. data/lib/oxidized/model/garderos.rb +43 -0
  80. data/lib/oxidized/model/h3c.rb +1 -1
  81. data/lib/oxidized/model/ibos.rb +1 -0
  82. data/lib/oxidized/model/ios.rb +20 -12
  83. data/lib/oxidized/model/iosxr.rb +1 -1
  84. data/lib/oxidized/model/lenovonos.rb +2 -0
  85. data/lib/oxidized/model/linuxgeneric.rb +1 -1
  86. data/lib/oxidized/model/netgear.rb +1 -1
  87. data/lib/oxidized/model/nodegrid.rb +1 -1
  88. data/lib/oxidized/model/nsxdfw.rb +30 -0
  89. data/lib/oxidized/model/nxos.rb +2 -1
  90. data/lib/oxidized/model/os6.rb +48 -0
  91. data/lib/oxidized/model/rgos.rb +1 -1
  92. data/lib/oxidized/model/riverbed.rb +104 -0
  93. data/lib/oxidized/model/routeros.rb +2 -2
  94. data/lib/oxidized/model/saos.rb +18 -1
  95. data/lib/oxidized/model/siklumhtg.rb +22 -0
  96. data/lib/oxidized/model/uplinkolt.rb +46 -0
  97. data/lib/oxidized/model/vyatta.rb +2 -2
  98. data/lib/oxidized/model/xos.rb +7 -0
  99. data/lib/oxidized/node.rb +30 -18
  100. data/lib/oxidized/nodes.rb +13 -5
  101. data/lib/oxidized/output/file.rb +45 -42
  102. data/lib/oxidized/output/git.rb +185 -160
  103. data/lib/oxidized/output/gitcrypt.rb +188 -186
  104. data/lib/oxidized/output/http.rb +53 -51
  105. data/lib/oxidized/output/output.rb +6 -4
  106. data/lib/oxidized/source/csv.rb +44 -49
  107. data/lib/oxidized/source/http.rb +63 -81
  108. data/lib/oxidized/source/jsonfile.rb +63 -0
  109. data/lib/oxidized/source/source.rb +43 -18
  110. data/lib/oxidized/source/sql.rb +66 -59
  111. data/lib/oxidized/version.rb +2 -2
  112. data/oxidized.gemspec +22 -16
  113. metadata +111 -15
@@ -6,6 +6,14 @@ A user may wish to extend an existing model to collect the output of additional
6
6
 
7
7
  This methodology allows local site changes to be preserved during Oxidized version updates / gem updates. It also enables convenient local development of new models.
8
8
 
9
+ ## Index
10
+ - [Creating a new model](#creating-a-new-model)
11
+ - [Extending an existing model with a new command](#extending-an-existing-model-with-a-new-command)
12
+ - [Create unit tests for the model](#create-unit-tests-for-the-model)
13
+ - [Advanced features](#advanced-features)
14
+ - [Monkey-patching blocks in existing models](#monkey-patching-blocks-in-existing-models)
15
+ - [Help](#help)
16
+
9
17
  ## Creating a new model
10
18
 
11
19
  An Oxidized model, at minimum, requires just three elements:
@@ -21,13 +29,19 @@ class RootWare < Oxidized::Model
21
29
  using Refinements
22
30
 
23
31
  cmd 'show complete-config'
32
+
33
+ cfg :ssh do
34
+ pre_logout 'exit'
35
+ end
36
+ end
24
37
  ```
25
38
 
26
39
  This model, as-is will:
27
40
 
28
- * Log into the device and expect the default prompt.
41
+ * Log into the device with ssh and expect the default prompt.
29
42
  * Upon matching it, execute the command `show complete-config`
30
43
  * Collect the output.
44
+ * Logout with the command `exit`
31
45
 
32
46
  It is often useful to, at minimum, define the following additional elements for any newly introduced module:
33
47
 
@@ -72,6 +86,33 @@ Intuitively, it is also possible to:
72
86
  * Create a completely new model, with a new name, for a new operating system type.
73
87
  * Testing/validation of an updated model from the [Oxidized GitHub repo models](https://github.com/ytti/oxidized/tree/master/lib/oxidized/model) by placing an updated model in the proper location without disrupting the gem-supplied model files.
74
88
 
89
+ ## Create unit tests for the model
90
+ > :warning: model unit tests are still a work in progress and need some polishing.
91
+
92
+ If you want the model to be integrated into oxidized, you can
93
+ [submit a pull request on github](https://github.com/ytti/oxidized/pulls).
94
+ This is a greatly appreciated submission, as there are probably other users
95
+ using the same network device as you are.
96
+
97
+ A good (and optional) practice for submissions is to provide a
98
+ [unit test for your model](/spec/model). This reduces the risk that further
99
+ developments could break it, and facilitates debugging issues without having
100
+ access to a physical network device for the model.
101
+
102
+ In order to simulate the device in the unit test, you need a
103
+ [YAML simulation file](/examples/device-simulation/), have a look at the
104
+ link for an explanation on how to create one.
105
+
106
+ Creating the unit test itself is explained in
107
+ [README.md in the model unit test directory](/spec/model/README.md).
108
+
109
+ Remember - producing a YAML simulation file and/or writing a unit test is
110
+ optional.
111
+ The most value comes from the YAML simulation file. The unit
112
+ test can be written by someone else, but you need access to the device for the
113
+ YAML simulation file. If you encounter problems, open an issue or ask for help
114
+ in your pull request.
115
+
75
116
  ## Advanced features
76
117
 
77
118
  The loosely-coupled architecture of Oxidized allows for easy extensibility in more advanced use cases as well.
@@ -124,19 +165,19 @@ Examples:
124
165
 
125
166
  ```ruby
126
167
  cmd :secret, clear: true do
127
- ... "(new code for secret removal which replaces the existing :secret definition in the model)" ...
168
+ # ... "(new code for secret removal which replaces the existing :secret definition in the model)" ...
128
169
  end
129
170
  ```
130
171
 
131
172
  ```ruby
132
173
  cmd 'show version', clear: true do |cfg|
133
- ... "(new code for parsing 'show version', replaces the existing definition in the model)" ...
174
+ # ... "(new code for parsing 'show version', replaces the existing definition in the model)" ...
134
175
  end
135
176
  ```
136
177
 
137
178
  ```ruby
138
179
  cmd :ssh, prepend: true do
139
- ... "(code that should run first, before any code in the existing :ssh definition in the model)" ...
180
+ # ... "(code that should run first, before any code in the existing :ssh definition in the model)" ...
140
181
  end
141
182
  ```
142
183
 
data/docs/Hooks.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  You can define an arbitrary number of hooks that subscribe to different events. The hook system is modular and different kind of hook types can be enabled.
4
4
 
5
+ 1. [Events](#events)
6
+ 2. Hook types
7
+ * [exec](#hook-type-exec)
8
+ * [githubrepo](#hook-type-githubrepo)
9
+ * [awssns](#hook-type-awssns)
10
+ * [slackdiff](#hook-type-slackdiff)
11
+ * [ciscosparkdiff](#ciscosparkdiff)
12
+ * [xmppdiff](#hook-type-xmppdiff)
13
+
5
14
  ## Configuration
6
15
 
7
16
  Following configuration keys need to be defined for all hooks:
@@ -184,6 +193,31 @@ hooks:
184
193
  privatekey: /root/.ssh/id_rsa
185
194
  ```
186
195
 
196
+ ### Custom branch name
197
+ Githubrepo will use the branch name used in the
198
+ [git output](Outputs.md#output-git) as a remote branch name. When creating the
199
+ git repository for the first time, Oxidized uses the default branch name
200
+ configured in git with `git config --global init.defaultBranch <Name>`. The
201
+ default is `master`.
202
+
203
+ If you need to rename the branch name after Oxidized has created it, you may do
204
+ it manually. Be aware that you may break things. Make backups and do not
205
+ complain if something goes wrong!
206
+
207
+ 1. Stop oxidized (no one should access the git repository while doing the
208
+ following steps)
209
+ 2. Make a backup of your oxidized data, especially the git repository
210
+ 3. Change directory to your oxidized git repository (as configured in oxidized
211
+ configuration file)
212
+ 4. Inspect the current branches with `git branch -avv`
213
+ 5. Rename the default branch with `git branch -m <NewName>`
214
+ 6. Remove the reference to the old remote branch with
215
+ `git branch -r -d origin/<OldName>`
216
+ 6. Inspect the change with `git branch -avv`
217
+ 7. Restart oxidized - you're done!
218
+
219
+ Note that you will also have to clean your remote git repository.
220
+
187
221
  ## Hook type: awssns
188
222
 
189
223
  The `awssns` hook publishes messages to AWS SNS topics. This allows you to notify other systems of device configuration changes, for example a config orchestration pipeline. Multiple services can subscribe to the same AWS topic.
data/docs/Issues.md ADDED
@@ -0,0 +1,91 @@
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 resolved.
11
+ - By spending time to write a good issue, you save developers time, contributing
12
+ to Oxidized’s progress without writing a line of code.
13
+
14
+ ## Submit to the correct project
15
+ Choose the appropriate GitHub project based on your issue:
16
+
17
+ - For issues with the web frontend or REST API, go to
18
+ [oxidized-web](https://github.com/ytti/oxidized-web/).
19
+ - For issues with oxidized-script, use
20
+ [oxidized-script](https://github.com/ytti/oxidized-script). (note: as of
21
+ November 2024, oxidized-script is not actively maintained).
22
+ - For issues with third-party software relying on Oxidized, open an issue in
23
+ that specific project.
24
+ - For issues with Oxidized itself, go to
25
+ [oxidized](https://github.com/ytti/oxidized).
26
+
27
+ ## Format your issue
28
+ - 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.
29
+ - Preview your text before submitting to ensure it renders correctly.
30
+ - 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.
31
+
32
+ ## Choose your title well
33
+ Keep the title brief yet descriptive. Aim to summarize the main issue or request in a few words.
34
+
35
+ ## Provide detailled informations
36
+ Include as many relevant details as possible. At a minimum, specify:
37
+
38
+ - Oxidized version and operating system.
39
+ - Relevant parts of your Oxidized configuration and a brief explanation of your setup.
40
+ - Output of the error, if relevant.
41
+ - For issues related to specific devices, consider creating a YAML Simulation file (instructions below).
42
+
43
+ Also, provide clear steps to reproduce the issue, if applicable.
44
+
45
+ ## Making feature requests
46
+ Feature requests are welcome, but please understand that unaddressed requests
47
+ may be closed after some time. If you need a feature urgently, consider
48
+ contributing code via a pull request (PR) or hiring a developer.
49
+
50
+ ## Sumbit a YAML Simulation File
51
+ To help developers troubleshoot device-specific issues, you may be asked to submit a
52
+ [YAML simulation file](https://github.com/ytti/oxidized/blob/master/examples/device-simulation/README.md#creating-a-yaml-file-with-device2yamlrb) for your device.
53
+
54
+ Here's a brief overview how to do it, you can find more details in the link
55
+ above.
56
+ - Fork Oxidized on github
57
+ - Install dependencies (git and Ruby's Net::SSH):
58
+ ```
59
+ # Adapt when not using a debian-based distro
60
+ sudo apt install git ruby-net-ssh
61
+ ```
62
+ - Clone your forked Oxidized repository:
63
+ ```
64
+ git clone git@github.com:<your github user>/oxidized.git
65
+ ```
66
+ - run the device2yaml.rb script (you’ll be provided with the command set and
67
+ output filename to use)
68
+ ```
69
+ cd oxidized/examples/device-simulation
70
+ # Replace user and devicename to appropriate values
71
+ ./device2yaml.rb user@devicename -c cmdsets/ios -o yaml/asr900_26.8.1b.yaml
72
+ ```
73
+ - The script waits 5 seconds between commands, and outputs the response of the
74
+ device. You can press "ESC" if you see the prompt and want to pass to next
75
+ command without waiting for the timeout.
76
+ - The result will be stored in `oxidized/examples/device-simulation/yaml/`.
77
+ - Replace any sensitive information with placeholder values in the output file.
78
+ - Commit & push the file to github
79
+ ```
80
+ git add yaml/asr900_26.8.1b.yaml
81
+ git commit -m "Device simulation for ASR900"
82
+ git push
83
+ ```
84
+ - Create a pull request (PR) in GitHub, referencing the issue number (e.g.,
85
+ "YAML simulation file for issue #1234").
86
+
87
+
88
+
89
+
90
+
91
+
@@ -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)
@@ -7,5 +7,10 @@ This has been tested against the following models and OS versions
7
7
  |S3400-48T4SP |Version 2.0.2J Build 81736 |
8
8
  |S3400-48T4SP |Version 2.0.2J Build 95262 |
9
9
  |S3400-48T6SP |Version 2.2.0F Build 109661 |
10
+ |S3410-24TS-P |S3410_FSOS 11.4(1)B74S5 |
11
+ |S5850-48T4Q |Version 7.0.4.34 |
12
+ |S5800-48MBQ |Version 7.0.4.21 |
13
+ |S5810-48TS-P |S5810_FSOS 11.4(1)B74S8, Release(10200711) |
14
+ |S5860-20SQ |S5860_FSOS 12.4(1)B0101P1S4 |
10
15
 
11
16
  Back to [Model-Notes](README.md)
@@ -1,18 +1,24 @@
1
1
  # FortiOS Configuration
2
2
 
3
- Create user oxidized with ED25519 public key
3
+ ## Create user oxidized with ED25519 public key
4
+ You can use a user/password for retrieving the configuration or use a SSH public key:
4
5
 
5
6
  ```text
6
7
  config system admin
7
8
  edit oxidized
8
9
  set trusthost1 192.0.2.1 255.255.255.255
9
10
  set accprofile "super_admin_readonly"
10
- set ssh-public-key1 "ssh-ed25519 AAAAThisIsJustAnExmapleKey_UseYourOxidizedPUBLICKEY oxidized@librenms"
11
+ set ssh-public-key1 "ssh-ed25519 AAAAThisIsJustAnExampleKey_UseYourOxidizedPUBLICKEY oxidized@librenms"
11
12
  end
12
13
  ```
13
14
 
14
15
 
15
- Fortigate procdues a lot of config changes. I recommend filtering using
16
+ ## Configuration changes / hiding passwords
17
+ Fortigate reencrypts its passwords every time the configuration is shown.
18
+ This produces a lot of config changes.
19
+ If you don't want to have a new version every time the configuration is
20
+ downloaded, you can hide all secrets. Beware that you won't have a full backup,
21
+ as all passwords will be replaced with <configuration removed>
16
22
 
17
23
  ```yaml
18
24
  models:
@@ -21,8 +27,18 @@ models:
21
27
  remove_secret: true
22
28
  ```
23
29
 
30
+ ## config vs. full config
31
+ On fortios, you can get a configuration without default values (`show .`) or
32
+ including all the default values (`show full-configuration`).
24
33
 
34
+ The full configuration can be quite long and produce time-outs.
35
+ Beginning with oxidized 0.30.1, the default is to get the short configuration.
25
36
 
26
- Oxidized can now retrieve your configuration!
37
+ If you need the full configuration, you can activate it in oxidized config file:
38
+ ```yaml
39
+ models:
40
+ fortios:
41
+ vars:
42
+ fullconfig: true
43
+ ```
27
44
 
28
- Back to [Model-Notes](README.md)
@@ -0,0 +1,31 @@
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 or 3Com/Comware are listed under the Vendor "HP" in
30
+ the [Supported OS Types](docs/Supported-OS-Types.md) list.
31
+
@@ -0,0 +1,10 @@
1
+ # OS6 Configuration
2
+
3
+ The commands Oxidized executes are:
4
+
5
+ 1. terminal length 0
6
+ 2. show version
7
+ 3. show interfaces transceiver properties
8
+ 4. show running-config
9
+
10
+ Back to [Model-Notes](README.md)
@@ -0,0 +1,15 @@
1
+ # Mikrotik RouterOS Configuration
2
+
3
+ RouterOS 7.12 and later support ED25519 keys.
4
+
5
+ Create a key pair, save the public key (``id_ed25519.pub``) and save it on flash. Create a user
6
+ and attach the public key.
7
+
8
+ ```text
9
+ [admin@mikrotik] > /user add name=oxidized group=read disabled=no
10
+ [admin@mikrotik] > /user ssh-keys import public-key-file=id_ed25519.pub user=oxidized
11
+ ```
12
+
13
+ Oxidized can now retrieve your configuration!
14
+
15
+ Back to [Model-Notes](README.md)
@@ -0,0 +1,7 @@
1
+ # Siklu Multihaul Terragraph Radio Line
2
+
3
+ The Siklu Multihaul TG radios use a different command set than the other Siklu radios.
4
+
5
+ To use this model, your source must designate the model as siklumhtg instead of siklu. It also requires that the MH-TG radio be running at least version 2.1.2.
6
+
7
+ Back to [Model-Notes](README.md)
data/docs/Outputs.md CHANGED
@@ -63,6 +63,8 @@ output:
63
63
 
64
64
  ```
65
65
 
66
+ Over time, your Git repository will expand, potentially leading to performance issues. For instructions on how to address this, see [git performance issues with large device counts](Troubleshooting.md#git-performance-issues-with-large-device-counts).
67
+
66
68
  ## Output: Git-Crypt
67
69
 
68
70
  This uses the gem git and system git-crypt interfaces. Have a look at [GIT-Crypt](https://www.agwa.name/projects/git-crypt/) documentation to know how to install it.
data/docs/Release.md CHANGED
@@ -5,45 +5,48 @@ This document is targeted at oxidized maintainers. It describes the release proc
5
5
  Run `git diff 0.30.0..master` (where `0.30.0` is to be changed to the last release) and review
6
6
  all the changes that have been done. Have a specific look at changes you don't understand.
7
7
 
8
+ For a graphical compare, use `git difftool -d 0.30.0..master`.
9
+
8
10
  ## Test, test test!
9
11
  Test the git code and the container against as much device types an environments as you can.
10
12
 
11
13
  Do not integrate late PRs into master if they do not fix issues for the release. The must wait for the next release.
12
14
 
13
15
  ## Version numbering
14
- Oxidized versions are nummered like 0.major.minor
15
- - major is incremented when releasing new features. minor is then set to 0
16
- - minor is incremented when releasing fixes only, just after a major version.
16
+ Oxidized versions are nummered like major.minor.patch
17
+ - currently, the major version is 0.
18
+ - minor is incremented when releasing new features.
19
+ - patch is incremented when releasing fixes only.
17
20
 
18
- ## Release
21
+ ## Prepare the release in your working repository
19
22
  1. Checkout the master branch of oxidized. Make sure you are up to date with origin.
20
23
  2. Change the version in lib/oxidized/version.rb
21
24
  3. Change CHANGELOG.md to replace [Unreleased] with [0.xx.yy – 202Y-MM-DD]
22
25
  4. Run `git diff` to check your changes
23
26
  5. Commit the changes to the local git repository with a commit message “chore(release): release version 0.xx.yy”
24
27
  6. Tag the commit with `git tag -a 0.xx.yy -m "Release 0.xx.yy"`
25
- 7. Push the change and the tag to github:
28
+ 7. Build the gem with ‘rake build’
29
+ 8. Run `git diff` to check if there have been more changes (there shouldn't)
30
+ 9. Install an test the gem locally
31
+ ```
32
+ gem install --user-install pkg/oxidized-0.30.0.gem
33
+ ~/.local/share/gem/ruby/3.1.0/bin/oxidized
34
+ ```
35
+
36
+ ## Release in github
37
+ Push the change and the tag to github:
26
38
  ```
27
39
  git push
28
40
  git push origin 0.xx.yy
29
41
  ```
30
42
 
31
- ## Release in github
32
43
  Make a release from the tag in github
33
44
  - Thank the contributors
34
45
  - Only describe major changes, and refer to CHANGELOG.md
35
46
  - List new contributors (generated automatically)
36
47
 
37
48
  ## Release in rubygems
38
- 1. Build the gem with ‘rake build
39
- 2. Install an test the gem locally
40
- ```
41
- gem install --user-install pkg/oxidized-0.30.0.gem
42
- ~/.local/share/gem/ruby/3.1.0/bin/oxidized
43
- ```
44
- 3. Push the gem with ‘rake push’
45
-
46
- You need an account at rubygems which is allowed to push oxidized
49
+ Push the gem with ‘rake push
47
50
 
48
51
  ## Release in docker.io
49
52
  The OCI-Containter is automatically build and pushed to docker.io by github
data/docs/Sources.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Sources
2
2
 
3
+ Note: in all sources, the map attribute `name` is mandatory. It is used to identify the node and
4
+ for example choose the filename for the configuration output.
5
+
3
6
  ## Source: CSV
4
7
 
5
8
  One line per device, colon separated. If `ip` isn't present, a DNS lookup will be done against `name`. For large installations, setting `ip` will dramatically reduce startup time.
@@ -55,6 +58,24 @@ and within: `~/.gnupg/gpg.conf`
55
58
  pinentry-mode loopback
56
59
  ```
57
60
 
61
+ ## Source: JSONFile
62
+
63
+ One object per device. Supports GPG encryption like the CSV Source.
64
+
65
+ ```yaml
66
+ source:
67
+ default: jsonfile
68
+ jsonfile:
69
+ file: /var/lib/oxidized/router.json
70
+ map:
71
+ name: hostname
72
+ model: os
73
+ username: username
74
+ password: password
75
+ vars_map:
76
+ enable: enable
77
+ ```
78
+
58
79
  ## Source: SQL
59
80
 
60
81
  Oxidized uses the `sequel` ruby gem. You can use a variety of databases that aren't explicitly listed. For more information visit https://github.com/jeremyevans/sequel Make sure you have the correct adapter!
@@ -20,8 +20,9 @@
20
20
  |Arbor Networks |ArbOS |[arbos](/lib/oxidized/model/arbos.rb) | |[ArbOS](Model-Notes/ArbOS.md)
21
21
  |Arista |EOS |[eos](/lib/oxidized/model/eos.rb) | |[EOS](Model-Notes/EOS.md)
22
22
  |Arris |C4CMTS |[c4cmts](/lib/oxidized/model/c4cmts.rb)
23
- |Aruba |AOS-CX |[aoscx](/lib/oxidized/model/aoscx.rb) |@robertcheramy
24
- | |AOSW |[Aaosw](/lib/oxidized/model/aosw.rb)
23
+ |Aruba |AOS-CX |[aoscx](/lib/oxidized/model/aoscx.rb) |@robertcheramy |[HPE Aruba](Model-Notes/HPEAruba.md)
24
+ | |AOSW |[aosw](/lib/oxidized/model/aosw.rb) |[HPE Aruba](Model-Notes/HPEAruba.md)
25
+ | |ArubaInstant |[arubainstant](/lib/oxidized/model/arubainstant.rb)|@robertcheramy |[HPE Aruba](Model-Notes/HPEAruba.md)
25
26
  |Asterfusion |AsterNOS |[asternos](/lib/oxidized/model/asternos.rb)
26
27
  |AudioCodes |AudioCodes |[audiocodes](/lib/oxidized/model/audiocodes.rb)
27
28
  | |MediaPack MP-1xx, Mediant1000 |[audiocodesmp](/lib/oxidized/model/audiocodesmp.rb)
@@ -70,6 +71,7 @@
70
71
  |DELL |PowerConnect |[powerconnect](/lib/oxidized/model/powerconnect.rb)
71
72
  | |AOSW |[aosw](/lib/oxidized/model/aosw.rb) | |Same model as Aruba Wireless
72
73
  | |DellX |[dellx](/lib/oxidized/model/dellx.rb)
74
+ | |Dell EMC Networking OS6 |[os6](/lib/oxidized/model/os6.rb) | |[Dell EMC Networking OS6](Model-Notes/OS6.md)
73
75
  | |Dell EMC Networking OS10 |[os10](/lib/oxidized/model/os10.rb) | |[Dell EMC Networking OS10](Model-Notes/OS10.md)
74
76
  |D-Link |D-Link |[dlink](/lib/oxidized/model/dlink.rb)
75
77
  | |D-Link cisco like CLI |[dlinknextgen](/lib/oxidized/model/dlinknextgen.rb)
@@ -82,7 +84,8 @@
82
84
  | |Enterasys 800-Series |[enterasys800](/lib/oxidized/model/enterasys800.rb)
83
85
  | |WM |[mtrlrfs](/lib/oxidized/model/mtrlrfs.rb)
84
86
  | |XOS, ExtremeWare |[xos](/lib/oxidized/model/xos.rb)
85
- |F5 |TMOS |[tmos](/lib/oxidized/model/tmos.rb)
87
+ |F5 |F5OS |[tmos](/lib/oxidized/model/f5os.rb)
88
+ | |TMOS |[tmos](/lib/oxidized/model/tmos.rb)
86
89
  |Fiberstore (fs.com) |S3400 |[fsos](/lib/oxidized/model/fsos.rb) | |[FSOS](Model-Notes/FSOS.md)
87
90
  | |S3800 |[gcombnps](/lib/oxidized/model/gcombnps.rb)
88
91
  | |S3900 |[edgecos](/lib/oxidized/model/edgecos.rb)
@@ -119,7 +122,7 @@
119
122
  |Linuxgeneric |CentOS |[linuxgeneric](/lib/oxidized/model/linuxgeneric.rb)| |[LinuxGeneric](Model-Notes/LinuxGeneric.md)
120
123
  |Mellanox |MLNX-OS |[mlnxos](/lib/oxidized/model/mlnxos.rb)
121
124
  | |Voltaire |[voltaire](/lib/oxidized/model/voltaire.rb)
122
- |Mikrotik |RouterOS |[routeros](/lib/oxidized/model/routeros.rb)
125
+ |Mikrotik |RouterOS |[routeros](/lib/oxidized/model/routeros.rb) | |[RouterOS](Model-Notes/RouterOS.md)
123
126
  | |SwOS and SwOS Lite |[swos](/lib/oxidized/model/swos.rb)
124
127
  |Mimosa |Mimosa (B11) |[mimosab11](/lib/oxidized/model/mimosab11.rb)
125
128
  |Motorola |RFS |[mtrlrfs](/lib/oxidized/model/mtrlrfs.rb)
@@ -145,7 +148,8 @@
145
148
  |Ruijie Networks |RGOS |[rgos](/lib/oxidized/model/rgos.rb)
146
149
  |QTECH |QSW-2800, QSW-3400, QSW-3450, QSW-3500|[qtech](/lib/oxidized/model/qtech.rb)
147
150
  |Quanta |Quanta / VxWorks 6.6 (1.1.0.8)|[quantaos](/lib/oxidized/model/quantaos.rb)
148
- |Siklu |EtherHaul |[siklu](/lib/oxidized/model/siklu.rb)
151
+ |Siklu |EtherHaul |[siklu](/lib/oxidized/model/siklu.rb) |@bdg-robert
152
+ | |Multihaul TG |[siklumhtg](/lib/oxidized/model/siklumhtg.rb) |@bdg-robert |[Siklu Multihaul TG](Model-Notes/SikluMHTG.md)
149
153
  |Seiko Solutions |SmartCS, SmartCS mini |[smartcs](/lib/oxidized/model/smartcs.rb)
150
154
  |SonicWALL |SonicOS |[sonicos](/lib/oxidized/model/sonicos.rb)
151
155
  |SNR |SNR-S300G, S2xxx, S3xxx, S4xxx|[dcnos](/lib/oxidized/model/dcnos.rb)
@@ -165,8 +169,10 @@
165
169
  | |Edgeos |[edgeos](/lib/oxidized/model/edgeos.rb)
166
170
  | |EdgeSwitch |[edgeswitch](/lib/oxidized/model/edgeswitch.rb)
167
171
  | |AirFiber |[airfiber](/lib/oxidized/model/airfiber.rb)
172
+ |Uplink |EP4440-DP |[EP4440](/lib/oxidized/model/uplinkolt.rb) | |Might support all EP4440 series
168
173
  |VMWare |NSX Edge (configuration) |[nsxconfig](/lib/oxidized/model/nsxconfig.rb)
169
174
  | |NSX Edge (firewall rules) |[nsxfirewall](/lib/oxidized/model/nsxfirewall.rb)
175
+ | |NSX Distributed Firewall |[nsxdfw](/lib/oxidized/model/nsxdfw.rb)
170
176
  |Watchguard |Fireware OS |[firewareos](/lib/oxidized/model/firewareos.rb)
171
177
  |Westell |Westell 8178G, Westell 8266G |[weos](/lib/oxidized/model/weos.rb)
172
178
  |YAMAHA |YAMAHA NVR/RTX Series |[yamaha](/lib/oxidized/model/yamaha.rb)
@@ -1,4 +1,9 @@
1
1
  # Troubleshooting
2
+ ## Table of contents
3
+ 1. [Connects but no/partial configuration collected](#oxidized-connects-to-a-supported-device-but-no-or-partial-configuration-is-collected)
4
+ 2. [No push to remote git repository](#oxidized-does-not-push-to-a-remote-git-repository-hook-githubrepo)
5
+ 3. [Git performance issues with large device counts](#git-performance-issues-with-large-device-counts)
6
+ 4. [Oxidized ignores the changes I made to its git repository](#oxidized-ignores-the-changes-i-made-to-its-git-repository)
2
7
 
3
8
  ## Oxidized connects to a supported device but no (or partial) configuration is collected
4
9
 
@@ -80,3 +85,33 @@ If you are running oxidized in a container, you need to map /home/oxidized/.ssh
80
85
  container to a local repository and save the known_hosts in the local repository. You can
81
86
  find an example how to do this under [examples/podman-compose](/examples/podman-compose/)
82
87
 
88
+ ## Git performance issues with large device counts
89
+ When you use git to store your configurations, the size of your repository will
90
+ grow over time. This growth can lead to performance issues. To resolve these issues, you should perform a Git garbage collection on your repository.
91
+
92
+ Follow these steps to do so:
93
+
94
+ 1. Stop oxidized (no one should access the git repository while running garbage collection)
95
+ 2. Make a backup of your oxidized data, especially the Git repository
96
+ 3. Change directory your oxidized git repository (as configured in oxidized configuration file)
97
+ 4. Execute the command `git gc` to run the garbage collection
98
+ 5. Restart oxidized - you're done!
99
+
100
+ ## Oxidized ignores the changes I made to its git repository
101
+ First of all: you shouldn't manipulate the git repository of oxidized. Don't
102
+ create it, don't modify it, leave it alone. You can break things. You have
103
+ been warned.
104
+
105
+ In some situations, you may need to make changes to the git repository of
106
+ oxidized. Stop oxidized, make backups, and be sure you know exactly what you
107
+ are doing. You have been warned.
108
+
109
+ If you simply clone the git repository, make changes and push them, oxidized
110
+ will ignore these modifications. This is because oxidized caches the HEAD tree
111
+ in the index and `git push` does not update the index because the repository is
112
+ a bare repo and not a working directory repository.
113
+
114
+ So, you have to update the index manually. For this, go into oxidized repo, and
115
+ run `git ls-tree -r HEAD | git update-index --index-info`. While you're at it,
116
+ consider running `git gc`, as oxidized cannot garbage collect the repo (this
117
+ is not supported in [Rugged](https://github.com/libgit2/rugged)).