oxidized 0.30.0 → 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 +70 -0
  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 +65 -0
  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 +112 -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 ADDED
@@ -0,0 +1,65 @@
1
+ # How to release a new version of Oxidized?
2
+ This document is targeted at oxidized maintainers. It describes the release process.
3
+
4
+ ## Review changes
5
+ Run `git diff 0.30.0..master` (where `0.30.0` is to be changed to the last release) and review
6
+ all the changes that have been done. Have a specific look at changes you don't understand.
7
+
8
+ For a graphical compare, use `git difftool -d 0.30.0..master`.
9
+
10
+ ## Test, test test!
11
+ Test the git code and the container against as much device types an environments as you can.
12
+
13
+ Do not integrate late PRs into master if they do not fix issues for the release. The must wait for the next release.
14
+
15
+ ## Version numbering
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.
20
+
21
+ ## Prepare the release in your working repository
22
+ 1. Checkout the master branch of oxidized. Make sure you are up to date with origin.
23
+ 2. Change the version in lib/oxidized/version.rb
24
+ 3. Change CHANGELOG.md to replace [Unreleased] with [0.xx.yy – 202Y-MM-DD]
25
+ 4. Run `git diff` to check your changes
26
+ 5. Commit the changes to the local git repository with a commit message “chore(release): release version 0.xx.yy”
27
+ 6. Tag the commit with `git tag -a 0.xx.yy -m "Release 0.xx.yy"`
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:
38
+ ```
39
+ git push
40
+ git push origin 0.xx.yy
41
+ ```
42
+
43
+ Make a release from the tag in github
44
+ - Thank the contributors
45
+ - Only describe major changes, and refer to CHANGELOG.md
46
+ - List new contributors (generated automatically)
47
+
48
+ ## Release in rubygems
49
+ Push the gem with ‘rake push’
50
+
51
+ ## Release in docker.io
52
+ The OCI-Containter is automatically build and pushed to docker.io by github
53
+
54
+ ## Update CHANGELOG.md for next release
55
+ Add
56
+ ```
57
+ ## [Unreleased]
58
+
59
+ ### Added
60
+
61
+ ### Changed
62
+
63
+ ### Fixed
64
+
65
+ ```
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)).