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.
- checksums.yaml +4 -4
- data/.coderabbit.yaml +21 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +45 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- data/.github/ISSUE_TEMPLATE/support-request.md +39 -0
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/publishdocker.yml +108 -13
- data/.github/workflows/ruby.yml +3 -12
- data/.github/workflows/stale.yml +6 -1
- data/.gitignore +2 -0
- data/.rubocop.yml +69 -13
- data/.rubocop_todo.yml +13 -143
- data/CHANGELOG.md +431 -4
- data/CONTRIBUTING.md +189 -0
- data/Dockerfile +89 -34
- data/README.md +59 -188
- data/Rakefile +58 -12
- data/bin/oxidized +2 -5
- data/docs/Configuration.md +382 -149
- data/docs/Creating-Models.md +262 -10
- data/docs/DeviceSimulation.md +196 -0
- data/docs/Docker.md +246 -0
- data/docs/Hooks.md +146 -51
- data/docs/Inputs.md +237 -0
- data/docs/Issues.md +123 -0
- data/docs/Model-Notes/APC.md +72 -0
- data/docs/Model-Notes/Cumulus.md +5 -0
- data/docs/Model-Notes/EatonNetwork.md +18 -0
- data/docs/Model-Notes/ExaLink.md +43 -0
- data/docs/Model-Notes/FSOS.md +17 -0
- data/docs/Model-Notes/Fortinet.md +75 -0
- data/docs/Model-Notes/GrandstreamHT8xx.md +8 -0
- data/docs/Model-Notes/HPEAruba.md +32 -0
- data/docs/Model-Notes/IvantiConnectSecure.md +59 -0
- data/docs/Model-Notes/OS6.md +10 -0
- data/docs/Model-Notes/README.md +1 -20
- data/docs/Model-Notes/RouterOS.md +28 -0
- data/docs/Model-Notes/SikluMHTG.md +7 -0
- data/docs/Model-Notes/TrueNAS.md +23 -0
- data/docs/Model-Notes/XGS4600-Zyxel.md +5 -0
- data/docs/ModelUnitTests.md +219 -0
- data/docs/Outputs.md +102 -5
- data/docs/Release.md +102 -0
- data/docs/Ruby-API.md +135 -2
- data/docs/Sources.md +34 -0
- data/docs/Supported-OS-Types.md +207 -270
- data/docs/Troubleshooting.md +43 -1
- data/extra/device2yaml.rb +259 -0
- data/extra/gitdiff-msteams.sh +32 -5
- data/extra/hooks/modelrules.rb +55 -0
- data/extra/hooks/modelrulesadvanced.rb +167 -0
- data/extra/hooks/srcipmap.rb +54 -0
- data/extra/nagios_check_failing_nodes.rb +1 -1
- data/extra/oxidized.runit +1 -1
- data/extra/rest_client.rb +5 -4
- data/extra/syslog.rb +11 -6
- data/lib/oxidized/cli/support.rb +152 -0
- data/lib/oxidized/cli.rb +21 -6
- data/lib/oxidized/config/vars.rb +33 -14
- data/lib/oxidized/config.rb +28 -17
- data/lib/oxidized/core.rb +50 -8
- data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
- data/lib/oxidized/hook/exec.rb +5 -4
- data/lib/oxidized/hook/githubrepo.rb +55 -18
- data/lib/oxidized/hook/noophook.rb +2 -2
- data/lib/oxidized/hook/slackdiff.rb +50 -14
- data/lib/oxidized/hook/xmppdiff.rb +9 -9
- data/lib/oxidized/hook.rb +68 -16
- data/lib/oxidized/input/cli.rb +8 -3
- data/lib/oxidized/input/debugtext.rb +40 -0
- data/lib/oxidized/input/debugyaml.rb +82 -0
- data/lib/oxidized/input/exec.rb +2 -11
- data/lib/oxidized/input/ftp.rb +2 -19
- data/lib/oxidized/input/http.rb +67 -17
- data/lib/oxidized/input/input.rb +35 -14
- data/lib/oxidized/input/scp.rb +27 -0
- data/lib/oxidized/input/ssh.rb +59 -83
- data/lib/oxidized/input/sshbase.rb +102 -0
- data/lib/oxidized/input/telnet.rb +20 -19
- data/lib/oxidized/input/tftp.rb +8 -8
- data/lib/oxidized/job.rb +18 -7
- data/lib/oxidized/jobs.rb +11 -1
- data/lib/oxidized/logger.rb +51 -0
- data/lib/oxidized/manager.rb +18 -17
- data/lib/oxidized/model/acos.rb +2 -1
- data/lib/oxidized/model/addpack.rb +26 -0
- data/lib/oxidized/model/adtran.rb +5 -1
- data/lib/oxidized/model/adva.rb +3 -3
- data/lib/oxidized/model/airfiber.rb +1 -1
- data/lib/oxidized/model/aos7.rb +11 -0
- data/lib/oxidized/model/aoscx.rb +37 -29
- data/lib/oxidized/model/aosw.rb +39 -29
- data/lib/oxidized/model/apc_aos.rb +7 -2
- data/lib/oxidized/model/apcaos.rb +39 -0
- data/lib/oxidized/model/aricentiss.rb +9 -2
- data/lib/oxidized/model/arubainstant.rb +93 -0
- data/lib/oxidized/model/asa.rb +11 -10
- data/lib/oxidized/model/asternos.rb +22 -0
- data/lib/oxidized/model/asyncos.rb +3 -3
- data/lib/oxidized/model/audiocodes.rb +2 -2
- data/lib/oxidized/model/awplus.rb +15 -12
- data/lib/oxidized/model/axos.rb +1 -1
- data/lib/oxidized/model/bdcom.rb +1 -0
- data/lib/oxidized/model/c4cmts.rb +1 -2
- data/lib/oxidized/model/ciscosma.rb +1 -1
- data/lib/oxidized/model/ciscosmb.rb +6 -1
- data/lib/oxidized/model/cnos.rb +13 -10
- data/lib/oxidized/model/comtrol.rb +1 -1
- data/lib/oxidized/model/comware.rb +5 -3
- data/lib/oxidized/model/cumulus.rb +14 -2
- data/lib/oxidized/model/defacto.rb +26 -0
- data/lib/oxidized/model/dellx.rb +1 -1
- data/lib/oxidized/model/dlink.rb +5 -2
- data/lib/oxidized/model/dlinknextgen.rb +55 -0
- data/lib/oxidized/model/dnos.rb +3 -0
- data/lib/oxidized/model/dslcommands.rb +93 -0
- data/lib/oxidized/model/dslsetup.rb +102 -0
- data/lib/oxidized/model/eatonnetwork.rb +70 -0
- data/lib/oxidized/model/edgecos.rb +3 -1
- data/lib/oxidized/model/edgeos.rb +7 -6
- data/lib/oxidized/model/edgeswitch.rb +3 -1
- data/lib/oxidized/model/efos.rb +41 -0
- data/lib/oxidized/model/eltex.rb +4 -2
- data/lib/oxidized/model/enterasys800.rb +2 -2
- data/lib/oxidized/model/enterprise_sonic.rb +46 -0
- data/lib/oxidized/model/eos.rb +3 -1
- data/lib/oxidized/model/exalink.rb +36 -0
- data/lib/oxidized/model/f5os.rb +17 -0
- data/lib/oxidized/model/fabricos.rb +2 -2
- data/lib/oxidized/model/fastiron.rb +5 -3
- data/lib/oxidized/model/firebrick.rb +2 -2
- data/lib/oxidized/model/firelinuxos.rb +13 -6
- data/lib/oxidized/model/firewareos.rb +10 -1
- data/lib/oxidized/model/fortigate.rb +160 -0
- data/lib/oxidized/model/fortios.rb +38 -48
- data/lib/oxidized/model/fsos.rb +46 -0
- data/lib/oxidized/model/gaiaos.rb +4 -4
- data/lib/oxidized/model/garderos.rb +38 -0
- data/lib/oxidized/model/grandstreamht8xx.rb +19 -0
- data/lib/oxidized/model/h3c.rb +1 -1
- data/lib/oxidized/model/ibos.rb +1 -0
- data/lib/oxidized/model/ingate.rb +47 -0
- data/lib/oxidized/model/ios.rb +57 -30
- data/lib/oxidized/model/iosxr.rb +2 -2
- data/lib/oxidized/model/ironware.rb +7 -5
- data/lib/oxidized/model/ivanti.rb +54 -0
- data/lib/oxidized/model/junos.rb +12 -5
- data/lib/oxidized/model/kornfeldos.rb +33 -0
- data/lib/oxidized/model/lenovonos.rb +2 -0
- data/lib/oxidized/model/linksyssrw.rb +3 -3
- data/lib/oxidized/model/linuxgeneric.rb +4 -2
- data/lib/oxidized/model/macros.rb +60 -0
- data/lib/oxidized/model/mimosab11.rb +34 -0
- data/lib/oxidized/model/ml66.rb +33 -0
- data/lib/oxidized/model/mlnxos.rb +18 -14
- data/lib/oxidized/model/model.rb +98 -103
- data/lib/oxidized/model/mtrlrfs.rb +1 -0
- data/lib/oxidized/model/ndms.rb +6 -0
- data/lib/oxidized/model/netgear.rb +14 -3
- data/lib/oxidized/model/netonix.rb +1 -1
- data/lib/oxidized/model/netscaler.rb +1 -1
- data/lib/oxidized/model/nodegrid.rb +1 -1
- data/lib/oxidized/model/nsxdfw.rb +31 -0
- data/lib/oxidized/model/nsxfirewall.rb +2 -1
- data/lib/oxidized/model/nxos.rb +20 -15
- data/lib/oxidized/model/ocnos.rb +42 -0
- data/lib/oxidized/model/onefinity.rb +18 -0
- data/lib/oxidized/model/openbsd.rb +1 -1
- data/lib/oxidized/model/opengear.rb +36 -1
- data/lib/oxidized/model/openwrt.rb +6 -6
- data/lib/oxidized/model/opnsense.rb +9 -1
- data/lib/oxidized/model/os6.rb +48 -0
- data/lib/oxidized/model/outputs.rb +5 -0
- data/lib/oxidized/model/panos.rb +2 -0
- data/lib/oxidized/model/perle.rb +41 -0
- data/lib/oxidized/model/pfsense.rb +9 -0
- data/lib/oxidized/model/powerconnect.rb +32 -11
- data/lib/oxidized/model/procurve.rb +6 -2
- data/lib/oxidized/model/qtech.rb +3 -1
- data/lib/oxidized/model/quantaos.rb +8 -6
- data/lib/oxidized/model/rgos.rb +33 -0
- data/lib/oxidized/model/riverbed.rb +104 -0
- data/lib/oxidized/model/routeros.rb +18 -11
- data/lib/oxidized/model/saos.rb +18 -1
- data/lib/oxidized/model/saos10.rb +38 -0
- data/lib/oxidized/model/siklu.rb +1 -1
- data/lib/oxidized/model/siklumhtg.rb +22 -0
- data/lib/oxidized/model/sixwind.rb +28 -0
- data/lib/oxidized/model/slxos.rb +3 -3
- data/lib/oxidized/model/smartbyte.rb +48 -0
- data/lib/oxidized/model/sonicos.rb +27 -20
- data/lib/oxidized/model/speedtouch.rb +1 -1
- data/lib/oxidized/model/sros.rb +3 -3
- data/lib/oxidized/model/srosmd.rb +1 -1
- data/lib/oxidized/model/supermicro.rb +1 -1
- data/lib/oxidized/model/telco.rb +1 -1
- data/lib/oxidized/model/tmos.rb +1 -0
- data/lib/oxidized/model/tnsr.rb +57 -0
- data/lib/oxidized/model/tplink.rb +5 -5
- data/lib/oxidized/model/trango.rb +4 -2
- data/lib/oxidized/model/truenas.rb +64 -3
- data/lib/oxidized/model/ucs.rb +1 -1
- data/lib/oxidized/model/unifiap.rb +144 -0
- data/lib/oxidized/model/uplinkolt.rb +46 -0
- data/lib/oxidized/model/voltaire.rb +1 -1
- data/lib/oxidized/model/voss.rb +3 -0
- data/lib/oxidized/model/vrp.rb +5 -1
- data/lib/oxidized/model/vyatta.rb +9 -3
- data/lib/oxidized/model/vyos.rb +37 -0
- data/lib/oxidized/model/xos.rb +10 -1
- data/lib/oxidized/model/zhoneolt.rb +4 -2
- data/lib/oxidized/model/zynos.rb +67 -3
- data/lib/oxidized/model/zynosadsl.rb +14 -0
- data/lib/oxidized/model/zynoscli.rb +1 -1
- data/lib/oxidized/model/zynosgs.rb +2 -0
- data/lib/oxidized/model/zynosmgs.rb +32 -0
- data/lib/oxidized/node.rb +99 -64
- data/lib/oxidized/nodes.rb +40 -19
- data/lib/oxidized/output/file.rb +80 -43
- data/lib/oxidized/output/git.rb +295 -151
- data/lib/oxidized/output/gitcrypt.rb +193 -185
- data/lib/oxidized/output/http.rb +63 -51
- data/lib/oxidized/output/output.rb +20 -4
- data/lib/oxidized/signals.rb +44 -0
- data/lib/oxidized/source/csv.rb +49 -49
- data/lib/oxidized/source/http.rb +76 -63
- data/lib/oxidized/source/jsonfile.rb +68 -0
- data/lib/oxidized/source/source.rb +73 -18
- data/lib/oxidized/source/sql.rb +71 -59
- data/lib/oxidized/version.rb +6 -4
- data/lib/oxidized/worker.rb +57 -29
- data/lib/oxidized.rb +4 -24
- data/lib/refinements.rb +21 -1
- data/oxidized.gemspec +45 -21
- metadata +248 -41
- data/lib/oxidized/model/timos.rb +0 -10
data/README.md
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
# Oxidized
|
|
2
2
|
|
|
3
3
|
[](https://github.com/ytti/oxidized/actions/workflows/ruby.yml)
|
|
4
|
-
[](https://codecov.io/gh/ytti/oxidized?branch=master)
|
|
5
|
-
[](https://www.codacy.com/app/ytti/oxidized?utm_source=github.com&utm_medium=referral&utm_content=ytti/oxidized&utm_campaign=Badge_Grade)
|
|
6
|
-
[](https://codeclimate.com/github/ytti/oxidized)
|
|
7
4
|
[](http://badge.fury.io/rb/oxidized)
|
|
8
5
|
[](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
|
-
|
|
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/
|
|
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
|
|
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
|
|
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
|
-
* [
|
|
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](
|
|
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. [
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
107
|
+
dnf install epel-release
|
|
108
|
+
dnf config-manager --set-enabled crb
|
|
109
|
+
dnf module enable ruby:3.1
|
|
116
110
|
```
|
|
117
111
|
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
136
|
+
pkg instal ruby
|
|
137
|
+
pkg instal ruby32-gems
|
|
232
138
|
```
|
|
233
139
|
|
|
234
|
-
|
|
235
|
-
|
|
140
|
+
Then install the dependencies of oxidized an oxidized-web:
|
|
236
141
|
```shell
|
|
237
|
-
|
|
238
|
-
|
|
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
|
-
|
|
146
|
+
Finally, install Oxidized:
|
|
247
147
|
|
|
248
148
|
```shell
|
|
249
|
-
|
|
149
|
+
gem install oxidized
|
|
250
150
|
```
|
|
251
151
|
|
|
252
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
165
|
+
### Build from Git
|
|
269
166
|
|
|
270
167
|
```shell
|
|
271
|
-
|
|
168
|
+
git clone https://github.com/ytti/oxidized.git
|
|
169
|
+
cd oxidized/
|
|
170
|
+
gem install bundler
|
|
171
|
+
rake install
|
|
272
172
|
```
|
|
273
173
|
|
|
274
|
-
|
|
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
|
|
395
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
31
|
-
t
|
|
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(
|
|
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
|
-
|
|
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 =>
|
|
10
|
-
warn
|
|
6
|
+
rescue StandardError => e
|
|
7
|
+
warn e
|
|
11
8
|
debug = Oxidized.config.debug rescue true
|
|
12
9
|
raise if debug
|
|
13
10
|
|