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/README.md CHANGED
@@ -1,29 +1,26 @@
1
1
  # Oxidized
2
2
 
3
3
  [![Build Status](https://github.com/ytti/oxidized/actions/workflows/ruby.yml/badge.svg)](https://github.com/ytti/oxidized/actions/workflows/ruby.yml)
4
- [![codecov.io](https://codecov.io/gh/ytti/oxidized/coverage.svg?branch=master)](https://codecov.io/gh/ytti/oxidized?branch=master)
5
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/5a90cb22db6a4d5ea23ad0dfb53fe03a)](https://www.codacy.com/app/ytti/oxidized?utm_source=github.com&utm_medium=referral&utm_content=ytti/oxidized&utm_campaign=Badge_Grade)
6
- [![Code Climate](https://codeclimate.com/github/ytti/oxidized/badges/gpa.svg)](https://codeclimate.com/github/ytti/oxidized)
7
4
  [![Gem Version](https://badge.fury.io/rb/oxidized.svg)](http://badge.fury.io/rb/oxidized)
8
5
  [![Join the chat at https://gitter.im/oxidized/Lobby](https://badges.gitter.im/oxidized/Lobby.svg)](https://gitter.im/oxidized/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
9
6
 
10
7
  Oxidized is a network device configuration backup tool. It's a RANCID replacement!
11
8
 
12
- Light and extensible, Oxidized supports over 130 operating system types.
9
+ It is light and extensible and supports over 130 operating system types.
13
10
 
14
11
  Feature highlights:
15
12
 
16
13
  * Automatically adds/removes threads to meet configured retrieval interval
17
- * Restful API to a move node immediately to head-of-queue (GET/POST /node/next/[NODE])
14
+ * Restful API to a move node immediately to head-of-queue (GET/PUT /node/next/[NODE])
18
15
  * Syslog udp+file example to catch config change events (IOS/JunOS) and trigger a config fetch
19
16
  * Will signal which IOS/JunOS user made the change, can then be used by output modules (via POST)
20
- * The `git` output module uses this info - 'git blame' will show who changed each line, and when
17
+ * The `git` output module uses this info - 'git blame' will show who changed each line
21
18
  * Restful API to reload list of nodes (GET /reload)
22
19
  * Restful API to fetch configurations (/node/fetch/[NODE] or /node/fetch/group/[NODE])
23
20
  * Restful API to show list of nodes (GET /nodes)
24
21
  * Restful API to show list of version for a node (/node/version[NODE]) and diffs
25
22
 
26
- Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU#t=3h) video on YouTube!
23
+ Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU?t=3h) video on YouTube!
27
24
 
28
25
  > :warning: [Maintainer Wanted!](#help-needed) :warning:
29
26
  >
@@ -34,11 +31,10 @@ Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU#t=3h
34
31
  1. [Supported OS Types](docs/Supported-OS-Types.md)
35
32
  2. [Installation](#installation)
36
33
  * [Debian and Ubuntu](#debian-and-ubuntu)
37
- * [CentOS, Oracle Linux, Red Hat Linux](#centos-oracle-linux-red-hat-linux)
34
+ * [Rocky Linux, Red Hat Enterprise Linux](#rocky-linux-red-hat-enterprise-linux)
38
35
  * [FreeBSD](#freebsd)
39
36
  * [Build from Git](#build-from-git)
40
- * [Docker](#running-with-docker)
41
- * [Installing Ruby 2.3 using RVM](#installing-ruby-23-using-rvm)
37
+ * [Docker & Podman](docs/Docker.md)
42
38
  3. [Initial Configuration](#configuration)
43
39
  4. [Configuration](docs/Configuration.md)
44
40
  * [Debugging](docs/Configuration.md#debugging)
@@ -67,7 +63,8 @@ Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU#t=3h
67
63
  * [Hook: ciscosparkdiff](docs/Hooks.md#hook-type-ciscosparkdiff)
68
64
  5. [Creating and Extending Models](docs/Creating-Models.md)
69
65
  6. [Help](#help)
70
- 7. [Ruby API](docs/Ruby-API.md#ruby-api)
66
+ 7. [Help Needed](#help-needed)
67
+ 8. [Ruby API](docs/Ruby-API.md#ruby-api)
71
68
  * [Input](docs/Ruby-API.md#input)
72
69
  * [Output](docs/Ruby-API.md#output)
73
70
  * [Source](docs/Ruby-API.md#source)
@@ -76,8 +73,7 @@ Check out the [Oxidized TREX 2014 presentation](http://youtu.be/kBQ_CTUuqeU#t=3h
76
73
  ## Installation
77
74
 
78
75
  ### Debian and Ubuntu
79
-
80
- Debian "buster" or newer and Ubuntu 17.10 (artful) or newer are recommended. On Ubuntu, begin by enabling the `universe`
76
+ Debian 12 "bookworm" or newer and Ubuntu 22.04 (Jammy Jellyfish) or newer are recommended. On Ubuntu, begin by enabling the `universe`
81
77
  repository (required for libssh2-1-dev):
82
78
 
83
79
  ```shell
@@ -87,197 +83,96 @@ add-apt-repository universe
87
83
  Install the dependencies:
88
84
 
89
85
  ```shell
90
- apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++
86
+ apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++ libyaml-dev libzstd-dev
91
87
  ```
92
88
 
93
- Finally, install the gems:
89
+ Finally, install Oxidized:
94
90
 
95
91
  ```shell
96
92
  gem install oxidized
97
- gem install oxidized-script oxidized-web # If you don't install oxidized-web, ensure "rest" is removed from your Oxidized config.
98
93
  ```
99
94
 
100
- ### CentOS, Oracle Linux, Red Hat Linux
101
-
102
- On CentOS 6 and 7 / RHEL 6 and 7, begin by installing Ruby 2.3 or greater. This can be accomplished in one of several ways:
103
-
104
- Install Ruby 2.3 from [SCL](https://www.softwarecollections.org/en/scls/rhscl/rh-ruby23/):
105
-
95
+ You can also install one or both of the optional gems. They are not required
96
+ to run Oxidized:
106
97
  ```shell
107
- yum install centos-release-scl
108
- yum install rh-ruby30 rh-ruby30-ruby-devel
109
- scl enable rh-ruby30 bash
98
+ gem install oxidized-web # Web interface and rest API
99
+ gem install oxidized-script # Script-based input/output extensions
110
100
  ```
111
101
 
112
- The following additional packages will be required to build the dependencies:
102
+ ### Rocky Linux, Red Hat Enterprise Linux
103
+ These instructions has been verified on Rocky Linux 9, Rocky Linux 10 and Fedora.
113
104
 
105
+ On Rocky Linux 9, you need to install/enable EPEL, CRB and Ruby 3.1:
114
106
  ```shell
115
- yum install make cmake which sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c++
107
+ dnf install epel-release
108
+ dnf config-manager --set-enabled crb
109
+ dnf module enable ruby:3.1
116
110
  ```
117
111
 
118
- Alternatively, install Ruby 2.6 via RVM by following the instructions:
119
-
120
- Make sure you dont have any leftover ruby:
121
- ```yum erase ruby```
122
-
123
- Then, install gpg key and rvm
124
-
112
+ Then you need the required packages for oxidized:
125
113
  ```shell
126
- sudo gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
127
- curl -sSL https://get.rvm.io | bash -s stable
128
- source /etc/profile.d/rvm.sh
129
- rvm requirements run
130
- rvm install 3.0
131
- rvm use 3.0
114
+ dnf -y install ruby ruby-devel sqlite-devel openssl-devel pkgconf-pkg-config cmake libssh-devel libicu-devel zlib-devel gcc-c++ libyaml-devel which
132
115
  ```
133
116
 
134
- Install oxidized requirements:
135
- ```yum install make cmake which sqlite-devel openssl-devel libssh2-devel gcc libicu-devel gcc-c++```
136
-
137
- Install the gems:
138
- ```gem install oxidized oxidized-web```
139
-
140
- You need to wrap the gem and reference the wrap in the systemctl service file:
141
- ```rvm wrapper oxidized```
142
-
143
- You can see where the wrapped gem is via
144
- ```rvm wrapper show oxidized```
145
- Use that path in the oxidized.service file, restart the systemctl daemon, run oxidized by hand once, edit config file, start service.
146
-
147
- ### FreeBSD
148
-
149
- [Use RVM to install Ruby v2.3](#installing-ruby-23-using-rvm), then install all required packages and gems:
117
+ Finally, install Oxidized:
150
118
 
151
119
  ```shell
152
- pkg install cmake pkgconf
153
120
  gem install oxidized
154
- gem install oxidized-script oxidized-web
155
- ```
156
-
157
- Oxidized is also available via [FreeBSD ports](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=203374):
158
-
159
- ```shell
160
- pkg install rubygem-oxidized rubygem-oxidized-script rubygem-oxidized-web
161
- ```
162
-
163
- ### Build from Git
164
-
165
- ```shell
166
- git clone https://github.com/ytti/oxidized.git
167
- cd oxidized/
168
- gem install bundler
169
- rake install
170
- ```
171
-
172
- ### Running with Docker
173
-
174
- Currently, Docker Hub automatically builds the master branch as [oxidized/oxidized](https://hub.docker.com/r/oxidized/oxidized/), you can make use of this container or build your own.
175
-
176
- To build your own, clone git repo:
177
-
178
- ```shell
179
- git clone https://github.com/ytti/oxidized
180
- ```
181
-
182
- Then, build the container locally (requires docker 17.05.0-ce or higher):
183
-
184
- ```shell
185
- docker build -q -t oxidized/oxidized:latest oxidized/
186
121
  ```
187
122
 
188
- Once you've built the container (or chosen to make use of the automatically built container in Docker Hub, which will be downloaded for you by docker on the first `run` command had you not built it), proceed as follows:
189
-
190
- Create a configuration directory in the host system:
191
-
123
+ You can also install one or both of the optional gems. They are not required
124
+ to run Oxidized:
192
125
  ```shell
193
- mkdir /etc/oxidized
126
+ gem install oxidized-web # Web interface and rest API
127
+ gem install oxidized-script # Script-based input/output extensions
194
128
  ```
195
129
 
196
- Run the container for the first time to initialize the config:
197
-
198
- _Note: this step in only required for creating the Oxidized configuration file and can be skipped if you already have one._
199
-
200
- ```shell
201
- docker run --rm -v /etc/oxidized:/home/oxidized/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized:latest oxidized
202
- ```
203
-
204
- If the RESTful API and Web Interface are enabled, on the docker host running the container
205
- edit `/etc/oxidized/config` and modify `rest: 127.0.0.1:8888` to `rest: 0.0.0.0:8888`. This will bind port 8888 to all interfaces, and expose the port so that it could be accessed externally. [(Issue #445)](https://github.com/ytti/oxidized/issues/445)
206
-
207
- Alternatively, you can use docker-compose to launch the oxidized container:
208
-
209
- ```yaml
210
- # docker-compose.yml
211
- # docker-compose file example for oxidized that will start along with docker daemon
212
- ---
213
- version: "3"
214
- services:
215
- oxidized:
216
- restart: always
217
- image: oxidized/oxidized:latest
218
- ports:
219
- - 8888:8888/tcp
220
- environment:
221
- CONFIG_RELOAD_INTERVAL: 600
222
- volumes:
223
- - config:/home/oxidized/.config/oxidized/
224
- volumes:
225
- config:
226
- ```
227
-
228
- Create the `/etc/oxidized/router.db` (see [CSV Source](docs/Sources.md#source-csv) for further info):
130
+ ### FreeBSD
131
+ > :warning: These installation instructions have been tested on FreeBSD 14.2, but
132
+ oxidized itself has not been tested on it.
229
133
 
134
+ First install ruby and rubyXX-gems (Find out the name of the package with `pkg search gems`):
230
135
  ```shell
231
- vim /etc/oxidized/router.db
136
+ pkg instal ruby
137
+ pkg instal ruby32-gems
232
138
  ```
233
139
 
234
- Run container again to start oxidized with your configuration:
235
-
140
+ Then install the dependencies of oxidized an oxidized-web:
236
141
  ```shell
237
- docker run -v /etc/oxidized:/home/oxidized/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized:latest
238
- oxidized[1]: Oxidized starting, running as pid 1
239
- oxidized[1]: Loaded 1 nodes
240
- Puma 2.13.4 starting...
241
- * Min threads: 0, max threads: 16
242
- * Environment: development
243
- * Listening on tcp://0.0.0.0:8888
142
+ pkg install ruby ruby-gems git sqlite3 libssh2 cmake pkgconf gmake
143
+ pkg install libyaml icu # Dependencies for oxidized-web
244
144
  ```
245
145
 
246
- If you want to have the config automatically reloaded (e.g. when using a http source that changes):
146
+ Finally, install Oxidized:
247
147
 
248
148
  ```shell
249
- docker run -v /etc/oxidized:/home/oxidized/.config/oxidized -p 8888:8888/tcp -e CONFIG_RELOAD_INTERVAL=3600 -t oxidized/oxidized:latest
149
+ gem install oxidized
250
150
  ```
251
151
 
252
- If you need to use an internal CA (e.g. to connect to an private github instance):
253
-
152
+ You can also install one or both of the optional gems. They are not required
153
+ to run Oxidized:
254
154
  ```shell
255
- docker run -v /etc/oxidized:/home/oxidized/.config/oxidized -v /path/to/MY-CA.crt:/usr/local/share/ca-certificates/MY-CA.crt -p 8888:8888/tcp -e UPDATE_CA_CERTIFICATES=true -t oxidized/oxidized:latest
155
+ gem install oxidized-web # Web interface and rest API
156
+ gem install oxidized-script # Script-based input/output extensions
256
157
  ```
257
158
 
258
- ### Installing Ruby 2.3 using RVM
259
-
260
- Install Ruby 2.3 build dependencies
159
+ Oxidized is also available via [FreeBSD ports](https://ports.freebsd.org/cgi/ports.cgi?query=oxidized):
261
160
 
262
161
  ```shell
263
- yum install curl gcc-c++ patch readline readline-devel zlib zlib-devel
264
- yum install libyaml-devel libffi-devel openssl-devel make cmake
265
- yum install bzip2 autoconf automake libtool bison iconv-devel libssh2-devel libicu-devel
162
+ pkg install rubygem-oxidized rubygem-oxidized-script rubygem-oxidized-web
266
163
  ```
267
164
 
268
- Install RVM
165
+ ### Build from Git
269
166
 
270
167
  ```shell
271
- curl -L get.rvm.io | bash -s stable
168
+ git clone https://github.com/ytti/oxidized.git
169
+ cd oxidized/
170
+ gem install bundler
171
+ rake install
272
172
  ```
273
173
 
274
- Setup RVM environment and compile and install Ruby 2.3 and set it as default
275
-
276
- ```shell
277
- source /etc/profile.d/rvm.sh
278
- rvm install 2.3
279
- rvm use --default 2.3
280
- ```
174
+ ### Running with Docker or Podman
175
+ See [docs/Docker.md](docs/Docker.md)
281
176
 
282
177
  ## Configuration
283
178
 
@@ -289,7 +184,7 @@ It is recommended practice to run Oxidized using its own username. This usernam
289
184
  useradd -s /bin/bash -m oxidized
290
185
  ```
291
186
 
292
- > It is recommended __not__ to run Oxidized as root.
187
+ > It is recommended __not__ to run Oxidized as root. After creating a dedicated user, switch to the oxidized user using su oxidized to ensure that Oxidized is run under the correct user context.
293
188
 
294
189
  To initialize a default configuration in your home directory `~/.config/oxidized/config`, simply run `oxidized` once. If you don't further configure anything from the output and source sections, it'll extend the examples on a subsequent `oxidized` execution. This is useful to see what options for a specific source or output backend are available.
295
190
 
@@ -391,38 +286,14 @@ If you need help with Oxidized then we have a few methods you can use to get in
391
286
 
392
287
  ## Help Needed
393
288
 
394
- As things stand right now, `oxidized` is maintained by a single person. A great
395
- many [contributors](https://github.com/ytti/oxidized/graphs/contributors) have
396
- helped further the software, however contributions are not the same as ongoing
397
- owner- and maintainer-ship. It appears that many companies use the software to
398
- manage their network infrastructure, this is great news! But without additional
399
- help to maintain the software and put out releases, the future of oxidized
400
- might be less bright. The current pace of development and the much needed
401
- refactoring simply are not sustainable if they are to be driven by a single
402
- person.
403
-
404
- ## Maintainers
405
-
406
- If you would like to be a maintainer for Oxidized then please read through the below and see if it's something you would like to help with. It's not a requirement that you can tick all the boxes below but it helps :)
407
-
408
- * Triage on issues, review pull requests and help answer any questions from users.
409
- * Above average knowledge of the Ruby programming language.
410
- * Professional experience with both oxidized and some other config backup tool (like rancid).
411
- * Ability to keep a cool head, and enjoy interaction with end users! :)
412
- * A desire and passion to help drive `oxidized` towards its `1.x.x` stage of life
413
- * Help refactor the code
414
- * Rework the core infrastructure
415
- * Permission from your employer to contribute to open source projects
416
-
417
- ## YES, I WANT TO HELP
418
-
419
- Awesome! Simply send an e-mail to Saku Ytti at <saku@ytti.fi>.
289
+ As things stand right now, `oxidized` is maintained by very few people.
290
+ We would appreciate more individuals and companies getting involved in Oxidized.
420
291
 
421
- ## Further reading
292
+ Beyond software development, documentation or maintenance of Oxidized, you could
293
+ become a model maintainer, which can be done with little burden and would be a
294
+ big help to the community.
422
295
 
423
- Brian Anderson (from Rust fame) wrote an [excellent
424
- post](http://brson.github.io/2017/04/05/minimally-nice-maintainer) on what it
425
- means to be a maintainer.
296
+ Interested? Have a look at [CONTRIBUTING.md](CONTRIBUTING.md).
426
297
 
427
298
  ## License and Copyright
428
299
 
data/Rakefile CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
+ require 'time'
3
4
  require_relative 'lib/oxidized/version'
4
5
 
5
- gemspec = eval(File.read(Dir['*.gemspec'].first))
6
+ gemspec = Gem::Specification.load(Dir['*.gemspec'].first)
6
7
  gemfile = [gemspec.name, gemspec.version].join('-') + '.gem'
7
8
 
8
9
  # Integrate Rubocop if available
@@ -10,7 +11,6 @@ begin
10
11
  require 'rubocop/rake_task'
11
12
 
12
13
  RuboCop::RakeTask.new
13
- task(:default).prerequisites << task(:rubocop)
14
14
  rescue LoadError
15
15
  task :rubocop do
16
16
  puts 'Install rubocop to run its rake tasks'
@@ -27,8 +27,10 @@ task :test do
27
27
  Rake::TestTask.new do |t|
28
28
  t.libs << 'spec'
29
29
  t.test_files = FileList['spec/**/*_spec.rb']
30
- t.warning = true
31
- t.verbose = true
30
+ t.ruby_opts = ['-W:deprecated']
31
+ # Don't display ambiguity warning between regexp and division in models
32
+ t.warning = false
33
+ t.verbose = false
32
34
  end
33
35
  end
34
36
 
@@ -40,11 +42,6 @@ task :version_set do
40
42
  Bundler::GemHelper.instance.gemspec.version = Oxidized::VERSION
41
43
  end
42
44
 
43
- # desc 'Install gem'
44
- # task install: :build do
45
- # system "sudo -Es sh -c \'umask 022; gem install gems/#{gemfile}\'"
46
- # end
47
-
48
45
  desc 'Remove gems'
49
46
  task :clean do
50
47
  FileUtils.rm_rf 'pkg'
@@ -52,7 +49,7 @@ end
52
49
 
53
50
  desc 'Tag the release'
54
51
  task :tag do
55
- system "git tag #{gemspec.version}"
52
+ system "git tag #{gemspec.version} -m 'Release #{gemspec.version}'"
56
53
  end
57
54
 
58
55
  desc 'Push to rubygems'
@@ -73,13 +70,62 @@ task :chmod do
73
70
  extra/oxidized.runit
74
71
  extra/syslog.rb
75
72
  extra/update-ca-certificates.runit
73
+ extra/device2yaml.rb
76
74
  ]
77
75
  dirs = []
78
- %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }.each do |file|
76
+ %x(git ls-files -z).split("\x0").reject { |f| f.match(/^(test|spec|features)\//) }.each do |file|
79
77
  dirs.push(File.dirname(file))
80
78
  xbit.include?(file) ? File.chmod(0o0755, file) : File.chmod(0o0644, file)
81
79
  end
82
80
  dirs.sort.uniq.each { |dir| File.chmod(0o0755, dir) }
83
81
  end
84
82
 
85
- task default: :test
83
+ # Build the container image with docker or podman
84
+ def command_available?(command)
85
+ system("which #{command} > /dev/null 2>&1")
86
+ end
87
+
88
+ def docker_needs_root?
89
+ !system('docker info > /dev/null 2>&1')
90
+ end
91
+
92
+ desc 'Build the container image with docker or podman'
93
+ task :build_container do
94
+ branch_name = %x(git rev-parse --abbrev-ref HEAD).chop.gsub '/', '_'
95
+ sha_hash = %x(git rev-parse --short HEAD).chop
96
+ sha_hash_long = %x(git rev-parse HEAD).chop
97
+ image_tag = "#{branch_name}-#{sha_hash}"
98
+ created_time = Time.now.iso8601
99
+
100
+ # Build-Args for consistent labels
101
+ build_args = [
102
+ "--label org.opencontainers.image.title=oxidized",
103
+ "--label org.opencontainers.image.description='Local build of Oxidized'",
104
+ "--label org.opencontainers.image.url=https://github.com/ytti/oxidized",
105
+ "--label org.opencontainers.image.source=https://github.com/ytti/oxidized",
106
+ "--label org.opencontainers.image.created=#{created_time}",
107
+ "--label org.opencontainers.image.ref.name=#{image_tag}",
108
+ "--label org.opencontainers.image.licenses=Apache-2.0",
109
+ "--label org.opencontainers.image.version=#{image_tag}",
110
+ "--label org.opencontainers.image.revision=#{sha_hash_long}",
111
+ "-t oxidized:#{image_tag}",
112
+ "-t oxidized:latest"
113
+ ].join(' ')
114
+
115
+ # Prefer podman if available as it runs rootless
116
+ if command_available?('podman')
117
+ sh "podman build #{build_args} ."
118
+ elsif command_available?('docker')
119
+ if docker_needs_root?
120
+ puts 'docker needs root to build the image. Using sudo...'
121
+ sh "sudo docker build #{build_args} ."
122
+ else
123
+ sh "docker build #{build_args} ."
124
+ end
125
+ else
126
+ puts 'You need Podman or Docker to build the container image.'
127
+ exit 1
128
+ end
129
+ end
130
+
131
+ task default: %i[rubocop test]
data/bin/oxidized CHANGED
@@ -1,13 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # FIX ME, killing oxidized needs -9
4
- trap("INT") { exit } # sinatra will otherwise steal this from us
5
-
6
3
  begin
7
4
  require_relative '../lib/oxidized/cli'
8
5
  Oxidized::CLI.new.run
9
- rescue StandardError => error
10
- warn error.to_s
6
+ rescue StandardError => e
7
+ warn e
11
8
  debug = Oxidized.config.debug rescue true
12
9
  raise if debug
13
10