oxidized 0.32.1 → 0.34.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/.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/publishdocker.yml +35 -16
- data/.github/workflows/ruby.yml +4 -2
- data/.gitignore +2 -0
- data/.rubocop.yml +29 -8
- data/.rubocop_todo.yml +1 -60
- data/CHANGELOG.md +103 -2
- data/CONTRIBUTING.md +20 -10
- data/Dockerfile +37 -64
- data/README.md +47 -141
- data/Rakefile +9 -11
- data/docs/Configuration.md +236 -27
- data/docs/DeviceSimulation.md +19 -7
- data/docs/Docker.md +245 -0
- data/docs/Issues.md +27 -1
- data/docs/Model-Notes/EatonNetwork.md +18 -0
- data/docs/Model-Notes/HPEAruba.md +3 -2
- data/docs/ModelUnitTests.md +35 -25
- data/docs/Outputs.md +83 -2
- data/docs/Release.md +34 -24
- data/docs/Supported-OS-Types.md +7 -0
- data/docs/Troubleshooting.md +4 -13
- data/extra/device2yaml.rb +24 -9
- data/extra/rest_client.rb +3 -2
- data/extra/syslog.rb +8 -3
- data/lib/oxidized/cli.rb +7 -3
- data/lib/oxidized/config/vars.rb +22 -14
- data/lib/oxidized/config.rb +3 -2
- data/lib/oxidized/core.rb +30 -8
- data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
- data/lib/oxidized/hook/exec.rb +5 -4
- data/lib/oxidized/hook/githubrepo.rb +23 -17
- data/lib/oxidized/hook/noophook.rb +2 -2
- data/lib/oxidized/hook/slackdiff.rb +9 -8
- data/lib/oxidized/hook/xmppdiff.rb +9 -9
- data/lib/oxidized/hook.rb +10 -8
- data/lib/oxidized/input/cli.rb +8 -3
- data/lib/oxidized/input/exec.rb +1 -1
- data/lib/oxidized/input/ftp.rb +2 -2
- data/lib/oxidized/input/http.rb +6 -6
- data/lib/oxidized/input/input.rb +1 -0
- data/lib/oxidized/input/scp.rb +2 -2
- data/lib/oxidized/input/ssh.rb +21 -14
- data/lib/oxidized/input/telnet.rb +3 -3
- data/lib/oxidized/input/tftp.rb +1 -1
- data/lib/oxidized/job.rb +7 -4
- data/lib/oxidized/logger.rb +51 -0
- data/lib/oxidized/model/acos.rb +1 -0
- data/lib/oxidized/model/aos7.rb +9 -0
- data/lib/oxidized/model/aoscx.rb +2 -0
- data/lib/oxidized/model/aosw.rb +22 -17
- data/lib/oxidized/model/aricentiss.rb +2 -2
- data/lib/oxidized/model/asa.rb +3 -3
- data/lib/oxidized/model/awplus.rb +13 -10
- data/lib/oxidized/model/eatonnetwork.rb +65 -0
- data/lib/oxidized/model/edgecos.rb +2 -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 +1 -1
- data/lib/oxidized/model/fabricos.rb +1 -1
- data/lib/oxidized/model/fastiron.rb +3 -1
- data/lib/oxidized/model/firelinuxos.rb +12 -3
- data/lib/oxidized/model/fortios.rb +5 -4
- data/lib/oxidized/model/gaiaos.rb +4 -4
- data/lib/oxidized/model/ingate.rb +47 -0
- data/lib/oxidized/model/ios.rb +16 -5
- data/lib/oxidized/model/ironware.rb +1 -1
- data/lib/oxidized/model/junos.rb +4 -0
- data/lib/oxidized/model/linksyssrw.rb +3 -3
- data/lib/oxidized/model/mlnxos.rb +14 -7
- data/lib/oxidized/model/model.rb +4 -3
- data/lib/oxidized/model/netgear.rb +8 -0
- data/lib/oxidized/model/nsxdfw.rb +2 -1
- data/lib/oxidized/model/nsxfirewall.rb +2 -1
- data/lib/oxidized/model/nxos.rb +2 -2
- data/lib/oxidized/model/openwrt.rb +6 -6
- data/lib/oxidized/model/powerconnect.rb +31 -10
- data/lib/oxidized/model/procurve.rb +3 -1
- data/lib/oxidized/model/qtech.rb +3 -1
- data/lib/oxidized/model/quantaos.rb +8 -6
- data/lib/oxidized/model/routeros.rb +3 -2
- data/lib/oxidized/model/saos10.rb +38 -0
- data/lib/oxidized/model/sixwind.rb +28 -0
- data/lib/oxidized/model/sonicos.rb +1 -1
- data/lib/oxidized/model/srosmd.rb +1 -1
- data/lib/oxidized/model/supermicro.rb +1 -1
- data/lib/oxidized/model/timos.rb +1 -1
- data/lib/oxidized/model/tmos.rb +1 -0
- data/lib/oxidized/model/tnsr.rb +53 -0
- data/lib/oxidized/model/trango.rb +3 -1
- data/lib/oxidized/model/unifiap.rb +144 -0
- data/lib/oxidized/model/vrp.rb +3 -1
- data/lib/oxidized/model/xos.rb +3 -1
- data/lib/oxidized/model/zhoneolt.rb +3 -1
- data/lib/oxidized/model/zynos.rb +3 -3
- data/lib/oxidized/node.rb +44 -27
- data/lib/oxidized/nodes.rb +8 -4
- data/lib/oxidized/output/file.rb +28 -0
- data/lib/oxidized/output/git.rb +148 -41
- data/lib/oxidized/output/gitcrypt.rb +18 -13
- data/lib/oxidized/output/http.rb +5 -4
- data/lib/oxidized/output/output.rb +14 -0
- data/lib/oxidized/source/http.rb +4 -2
- data/lib/oxidized/version.rb +6 -4
- data/lib/oxidized/worker.rb +13 -13
- data/lib/oxidized.rb +3 -24
- data/lib/refinements.rb +2 -0
- data/oxidized.gemspec +10 -8
- metadata +74 -41
- data/examples/podman-compose/Makefile +0 -103
- data/examples/podman-compose/README.md +0 -94
- data/examples/podman-compose/docker-compose.yml +0 -30
- data/examples/podman-compose/gitserver/.gitignore +0 -1
- data/examples/podman-compose/gitserver/Dockerfile +0 -14
- data/examples/podman-compose/model-simulation/Dockerfile-model +0 -13
- data/examples/podman-compose/model-simulation/asternos.sh +0 -36
- data/examples/podman-compose/oxidized-config/.gitignore +0 -10
- data/examples/podman-compose/oxidized-config/config +0 -46
- data/examples/podman-compose/oxidized-config/config_csv-file +0 -46
- data/examples/podman-compose/oxidized-config/config_csv-gitserver +0 -56
- data/examples/podman-compose/oxidized-config/router.db +0 -1
- data/examples/podman-compose/oxidized-ssh/.gitignore +0 -1
- data/examples/podman-compose/oxidized-ssh/README.md +0 -14
@@ -1,11 +1,25 @@
|
|
1
1
|
module Oxidized
|
2
2
|
module Output
|
3
|
+
def self.clean_obsolete_nodes(active_nodes)
|
4
|
+
return unless Oxidized.config.output.clean_obsolete_nodes?
|
5
|
+
|
6
|
+
output_name = Oxidized.config.output.default
|
7
|
+
output = Oxidized.mgr.add_output output_name
|
8
|
+
output[output_name].clean_obsolete_nodes(active_nodes)
|
9
|
+
end
|
10
|
+
|
3
11
|
class Output
|
12
|
+
include SemanticLogger::Loggable
|
13
|
+
|
4
14
|
class NoConfig < OxidizedError; end
|
5
15
|
|
6
16
|
def cfg_to_str(cfg)
|
7
17
|
cfg.select { |h| h[:type] == 'cfg' }.map { |h| h[:data] }.join
|
8
18
|
end
|
19
|
+
|
20
|
+
def self.clean_obsolete_nodes(_active_nodes)
|
21
|
+
logger.warn "clean_obsolete_nodes is not implemented for #{name}"
|
22
|
+
end
|
9
23
|
end
|
10
24
|
end
|
11
25
|
end
|
data/lib/oxidized/source/http.rb
CHANGED
@@ -8,7 +8,6 @@ module Oxidized
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def setup
|
11
|
-
Oxidized.setup_logger
|
12
11
|
if @cfg.empty?
|
13
12
|
Oxidized.asetus.user.source.http.url = 'https://url/api'
|
14
13
|
Oxidized.asetus.user.source.http.map.name = 'name'
|
@@ -45,7 +44,10 @@ module Oxidized
|
|
45
44
|
|
46
45
|
def pagination(data, node_want)
|
47
46
|
node_data = []
|
48
|
-
|
47
|
+
unless @cfg.pagination_key_name?
|
48
|
+
raise Oxidized::OxidizedError,
|
49
|
+
"if using pagination, 'pagination_key_name' setting must be set"
|
50
|
+
end
|
49
51
|
|
50
52
|
next_key = @cfg.pagination_key_name
|
51
53
|
loop do
|
data/lib/oxidized/version.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Oxidized
|
2
|
-
VERSION = '0.
|
3
|
-
VERSION_FULL = '0.
|
4
|
+
VERSION = '0.34.0'
|
5
|
+
VERSION_FULL = '0.34.0'
|
4
6
|
def self.version_set
|
5
7
|
version_full = %x(git describe --tags).chop rescue ""
|
6
8
|
version = %x(git describe --tags --abbrev=0).chop rescue ""
|
@@ -12,8 +14,8 @@ module Oxidized
|
|
12
14
|
const_set(:VERSION, version)
|
13
15
|
const_set(:VERSION_FULL, version_full)
|
14
16
|
file = File.readlines(__FILE__)
|
15
|
-
file[
|
16
|
-
file[
|
17
|
+
file[3] = " VERSION = '%s'\n" % VERSION
|
18
|
+
file[4] = " VERSION_FULL = '%s'\n" % VERSION_FULL
|
17
19
|
File.write(__FILE__, file.join)
|
18
20
|
end
|
19
21
|
end
|
data/lib/oxidized/worker.rb
CHANGED
@@ -2,6 +2,8 @@ module Oxidized
|
|
2
2
|
require 'oxidized/job'
|
3
3
|
require 'oxidized/jobs'
|
4
4
|
class Worker
|
5
|
+
include SemanticLogger::Loggable
|
6
|
+
|
5
7
|
def initialize(nodes)
|
6
8
|
@jobs_done = 0
|
7
9
|
@nodes = nodes
|
@@ -17,7 +19,8 @@ module Oxidized
|
|
17
19
|
@jobs.work
|
18
20
|
|
19
21
|
while @jobs.size < @jobs.want
|
20
|
-
|
22
|
+
logger.debug "Jobs running: #{@jobs.size} of #{@jobs.want} - ended: " \
|
23
|
+
"#{@jobs_done} of #{@nodes.size}"
|
21
24
|
# ask for next node in queue non destructive way
|
22
25
|
nextnode = @nodes.first
|
23
26
|
unless nextnode.last.nil?
|
@@ -30,14 +33,14 @@ module Oxidized
|
|
30
33
|
node.running? ? next : node.running = true
|
31
34
|
|
32
35
|
@jobs.push Job.new node
|
33
|
-
|
36
|
+
logger.debug "Added #{node.group}/#{node.name} to the job queue"
|
34
37
|
end
|
35
38
|
|
36
39
|
if cycle_finished?
|
37
40
|
run_done_hook
|
38
41
|
exit 0 if Oxidized.config.run_once
|
39
42
|
end
|
40
|
-
|
43
|
+
logger.debug("#{@jobs.size} jobs running in parallel") unless @jobs.empty?
|
41
44
|
end
|
42
45
|
|
43
46
|
def process(job)
|
@@ -52,7 +55,7 @@ module Oxidized
|
|
52
55
|
process_failure node, job
|
53
56
|
end
|
54
57
|
rescue NodeNotFound
|
55
|
-
|
58
|
+
logger.warn "#{node.group}/#{node.name} not found, removed while collecting?"
|
56
59
|
end
|
57
60
|
|
58
61
|
def reload
|
@@ -72,7 +75,7 @@ module Oxidized
|
|
72
75
|
if output.store node.name, job.config,
|
73
76
|
msg: msg, email: node.email, user: node.user, group: node.group
|
74
77
|
node.modified
|
75
|
-
|
78
|
+
logger.info "Configuration updated for #{node.group}/#{node.name}"
|
76
79
|
Oxidized.hooks.handle :post_store, node: node,
|
77
80
|
job: job,
|
78
81
|
commitref: output.commitref
|
@@ -97,23 +100,20 @@ module Oxidized
|
|
97
100
|
Oxidized.hooks.handle :node_fail, node: node,
|
98
101
|
job: job
|
99
102
|
end
|
100
|
-
|
103
|
+
logger.warn msg
|
101
104
|
end
|
102
105
|
|
103
106
|
def cycle_finished?
|
104
|
-
|
105
|
-
|
106
|
-
else
|
107
|
-
@jobs_done.positive? && (@jobs_done % @nodes.count).zero?
|
108
|
-
end
|
107
|
+
@jobs_done > @nodes.count ||
|
108
|
+
(@jobs_done.positive? && (@jobs_done % @nodes.count).zero?)
|
109
109
|
end
|
110
110
|
|
111
111
|
def run_done_hook
|
112
|
-
|
112
|
+
logger.debug "Running :nodes_done hook"
|
113
113
|
Oxidized.hooks.handle :nodes_done
|
114
114
|
rescue StandardError => e
|
115
115
|
# swallow the hook erros and continue as normal
|
116
|
-
|
116
|
+
logger.error e.message
|
117
117
|
ensure
|
118
118
|
@jobs_done = 0
|
119
119
|
end
|
data/lib/oxidized.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'refinements'
|
3
|
+
require 'semantic_logger'
|
3
4
|
|
4
5
|
module Oxidized
|
5
6
|
class OxidizedError < StandardError; end
|
7
|
+
include SemanticLogger::Loggable
|
6
8
|
|
7
9
|
Directory = File.expand_path(File.join(File.dirname(__FILE__), '../'))
|
8
10
|
|
@@ -15,6 +17,7 @@ module Oxidized
|
|
15
17
|
require 'oxidized/hook'
|
16
18
|
require 'oxidized/signals'
|
17
19
|
require 'oxidized/core'
|
20
|
+
require 'oxidized/logger'
|
18
21
|
|
19
22
|
def self.asetus
|
20
23
|
@@asetus
|
@@ -27,28 +30,4 @@ module Oxidized
|
|
27
30
|
def self.config
|
28
31
|
asetus.cfg
|
29
32
|
end
|
30
|
-
|
31
|
-
def self.logger
|
32
|
-
@@logger
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.logger=(val)
|
36
|
-
@@logger = val
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.setup_logger
|
40
|
-
FileUtils.mkdir_p(Config::LOG) unless File.directory?(Config::LOG)
|
41
|
-
self.logger = if config.has_key?('use_syslog') && config.use_syslog
|
42
|
-
require 'syslog/logger'
|
43
|
-
Syslog::Logger.new('oxidized')
|
44
|
-
else
|
45
|
-
require 'logger'
|
46
|
-
if config.has_key?('log')
|
47
|
-
Logger.new(File.expand_path(config.log))
|
48
|
-
else
|
49
|
-
Logger.new($stderr)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
logger.level = Logger::INFO unless config.debug
|
53
|
-
end
|
54
33
|
end
|
data/lib/refinements.rb
CHANGED
@@ -27,7 +27,9 @@ module Refinements
|
|
27
27
|
# sets @cmd and @name unless @name is already set
|
28
28
|
def process_cmd(command)
|
29
29
|
@cmd = command
|
30
|
+
# rubocop:disable Naming/MemoizedInstanceVariableName
|
30
31
|
@name ||= @cmd.to_s.strip.gsub(/\s+/, '_') # what to do when command is proc? #to_s seems ghetto
|
32
|
+
# rubocop:enable Naming/MemoizedInstanceVariableName
|
31
33
|
end
|
32
34
|
|
33
35
|
# Initializes the String instance variables from another String instance
|
data/oxidized.gemspec
CHANGED
@@ -12,7 +12,6 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.homepage = 'http://github.com/ytti/oxidized'
|
13
13
|
s.summary = 'feeble attempt at rancid'
|
14
14
|
s.description = 'software to fetch configuration from network devices and store them'
|
15
|
-
s.rubyforge_project = s.name
|
16
15
|
s.files = %x(git ls-files -z).split("\x0").reject { |f| f.match(/^(test|spec|features)\//) }
|
17
16
|
s.executables = %w[oxidized]
|
18
17
|
s.require_path = 'lib'
|
@@ -40,24 +39,27 @@ Gem::Specification.new do |s|
|
|
40
39
|
s.add_dependency 'net-scp', '~> 4.1'
|
41
40
|
s.add_dependency 'net-ssh', '~> 7.3'
|
42
41
|
s.add_dependency 'net-telnet', '~> 0.2'
|
43
|
-
s.add_dependency 'ostruct', '~> 0.6'
|
44
42
|
s.add_dependency 'psych', '~> 5.0'
|
45
43
|
s.add_dependency 'rugged', '~> 1.6'
|
44
|
+
s.add_dependency 'semantic_logger', '~> 4.16'
|
46
45
|
s.add_dependency 'slop', '~> 4.6'
|
46
|
+
s.add_dependency 'syslog', '~> 0.3.0'
|
47
|
+
s.add_dependency 'syslog_protocol', '~> 0.9.2'
|
47
48
|
|
48
49
|
s.add_development_dependency 'bundler', '~> 2.2'
|
49
|
-
|
50
|
+
# ruby-git 4.0 requests ruby >= 3.2, we stick to >= 3.1 (Ubuntu Noble/Debian Bookworm)
|
51
|
+
s.add_development_dependency 'git', '>= 2.0', '< 3.2.0'
|
50
52
|
s.add_development_dependency 'minitest', '~> 5.25.4'
|
51
53
|
s.add_development_dependency 'mocha', '~> 2.1'
|
52
54
|
s.add_development_dependency 'pry', '~> 0.15.0'
|
53
55
|
s.add_development_dependency 'rake', '~> 13.0'
|
54
|
-
s.add_development_dependency 'rubocop', '~> 1.
|
55
|
-
s.add_development_dependency 'rubocop-minitest', '~> 0.
|
56
|
+
s.add_development_dependency 'rubocop', '~> 1.78.0'
|
57
|
+
s.add_development_dependency 'rubocop-minitest', '~> 0.38.0'
|
56
58
|
s.add_development_dependency 'rubocop-rake', '~> 0.7.0'
|
57
|
-
s.add_development_dependency 'rubocop-sequel', '~> 0.
|
59
|
+
s.add_development_dependency 'rubocop-sequel', '~> 0.4.0'
|
58
60
|
s.add_development_dependency 'simplecov', '~> 0.22.0'
|
59
61
|
|
60
62
|
# Dependencies on optional libraries, used for unit tests & development
|
61
|
-
s.add_development_dependency 'oxidized-web', '
|
62
|
-
s.add_development_dependency 'sequel', '>= 5.63.0', '<= 5.
|
63
|
+
s.add_development_dependency 'oxidized-web', '~> 0.16'
|
64
|
+
s.add_development_dependency 'sequel', '>= 5.63.0', '<= 5.94.0'
|
63
65
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxidized
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.34.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2025-
|
13
|
+
date: 2025-07-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: asetus
|
@@ -125,47 +125,47 @@ dependencies:
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0.2'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
128
|
+
name: psych
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
131
|
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: '0
|
133
|
+
version: '5.0'
|
134
134
|
type: :runtime
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
138
|
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: '0
|
140
|
+
version: '5.0'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
142
|
+
name: rugged
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
145
|
- - "~>"
|
146
146
|
- !ruby/object:Gem::Version
|
147
|
-
version: '
|
147
|
+
version: '1.6'
|
148
148
|
type: :runtime
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
152
|
- - "~>"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version: '
|
154
|
+
version: '1.6'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
156
|
+
name: semantic_logger
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
159
|
- - "~>"
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version: '
|
161
|
+
version: '4.16'
|
162
162
|
type: :runtime
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
166
|
- - "~>"
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
version: '
|
168
|
+
version: '4.16'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: slop
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,6 +180,34 @@ dependencies:
|
|
180
180
|
- - "~>"
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '4.6'
|
183
|
+
- !ruby/object:Gem::Dependency
|
184
|
+
name: syslog
|
185
|
+
requirement: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 0.3.0
|
190
|
+
type: :runtime
|
191
|
+
prerelease: false
|
192
|
+
version_requirements: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - "~>"
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 0.3.0
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: syslog_protocol
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - "~>"
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: 0.9.2
|
204
|
+
type: :runtime
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - "~>"
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: 0.9.2
|
183
211
|
- !ruby/object:Gem::Dependency
|
184
212
|
name: bundler
|
185
213
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,16 +226,22 @@ dependencies:
|
|
198
226
|
name: git
|
199
227
|
requirement: !ruby/object:Gem::Requirement
|
200
228
|
requirements:
|
201
|
-
- - "
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '2.0'
|
232
|
+
- - "<"
|
202
233
|
- !ruby/object:Gem::Version
|
203
|
-
version:
|
234
|
+
version: 3.2.0
|
204
235
|
type: :development
|
205
236
|
prerelease: false
|
206
237
|
version_requirements: !ruby/object:Gem::Requirement
|
207
238
|
requirements:
|
208
|
-
- - "
|
239
|
+
- - ">="
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: '2.0'
|
242
|
+
- - "<"
|
209
243
|
- !ruby/object:Gem::Version
|
210
|
-
version:
|
244
|
+
version: 3.2.0
|
211
245
|
- !ruby/object:Gem::Dependency
|
212
246
|
name: minitest
|
213
247
|
requirement: !ruby/object:Gem::Requirement
|
@@ -270,28 +304,28 @@ dependencies:
|
|
270
304
|
requirements:
|
271
305
|
- - "~>"
|
272
306
|
- !ruby/object:Gem::Version
|
273
|
-
version: 1.
|
307
|
+
version: 1.78.0
|
274
308
|
type: :development
|
275
309
|
prerelease: false
|
276
310
|
version_requirements: !ruby/object:Gem::Requirement
|
277
311
|
requirements:
|
278
312
|
- - "~>"
|
279
313
|
- !ruby/object:Gem::Version
|
280
|
-
version: 1.
|
314
|
+
version: 1.78.0
|
281
315
|
- !ruby/object:Gem::Dependency
|
282
316
|
name: rubocop-minitest
|
283
317
|
requirement: !ruby/object:Gem::Requirement
|
284
318
|
requirements:
|
285
319
|
- - "~>"
|
286
320
|
- !ruby/object:Gem::Version
|
287
|
-
version: 0.
|
321
|
+
version: 0.38.0
|
288
322
|
type: :development
|
289
323
|
prerelease: false
|
290
324
|
version_requirements: !ruby/object:Gem::Requirement
|
291
325
|
requirements:
|
292
326
|
- - "~>"
|
293
327
|
- !ruby/object:Gem::Version
|
294
|
-
version: 0.
|
328
|
+
version: 0.38.0
|
295
329
|
- !ruby/object:Gem::Dependency
|
296
330
|
name: rubocop-rake
|
297
331
|
requirement: !ruby/object:Gem::Requirement
|
@@ -312,14 +346,14 @@ dependencies:
|
|
312
346
|
requirements:
|
313
347
|
- - "~>"
|
314
348
|
- !ruby/object:Gem::Version
|
315
|
-
version: 0.
|
349
|
+
version: 0.4.0
|
316
350
|
type: :development
|
317
351
|
prerelease: false
|
318
352
|
version_requirements: !ruby/object:Gem::Requirement
|
319
353
|
requirements:
|
320
354
|
- - "~>"
|
321
355
|
- !ruby/object:Gem::Version
|
322
|
-
version: 0.
|
356
|
+
version: 0.4.0
|
323
357
|
- !ruby/object:Gem::Dependency
|
324
358
|
name: simplecov
|
325
359
|
requirement: !ruby/object:Gem::Requirement
|
@@ -338,16 +372,16 @@ dependencies:
|
|
338
372
|
name: oxidized-web
|
339
373
|
requirement: !ruby/object:Gem::Requirement
|
340
374
|
requirements:
|
341
|
-
- - "
|
375
|
+
- - "~>"
|
342
376
|
- !ruby/object:Gem::Version
|
343
|
-
version: 0.
|
377
|
+
version: '0.16'
|
344
378
|
type: :development
|
345
379
|
prerelease: false
|
346
380
|
version_requirements: !ruby/object:Gem::Requirement
|
347
381
|
requirements:
|
348
|
-
- - "
|
382
|
+
- - "~>"
|
349
383
|
- !ruby/object:Gem::Version
|
350
|
-
version: 0.
|
384
|
+
version: '0.16'
|
351
385
|
- !ruby/object:Gem::Dependency
|
352
386
|
name: sequel
|
353
387
|
requirement: !ruby/object:Gem::Requirement
|
@@ -357,7 +391,7 @@ dependencies:
|
|
357
391
|
version: 5.63.0
|
358
392
|
- - "<="
|
359
393
|
- !ruby/object:Gem::Version
|
360
|
-
version: 5.
|
394
|
+
version: 5.94.0
|
361
395
|
type: :development
|
362
396
|
prerelease: false
|
363
397
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -367,7 +401,7 @@ dependencies:
|
|
367
401
|
version: 5.63.0
|
368
402
|
- - "<="
|
369
403
|
- !ruby/object:Gem::Version
|
370
|
-
version: 5.
|
404
|
+
version: 5.94.0
|
371
405
|
description: software to fetch configuration from network devices and store them
|
372
406
|
email:
|
373
407
|
- saku@ytti.fi
|
@@ -379,6 +413,9 @@ extensions: []
|
|
379
413
|
extra_rdoc_files: []
|
380
414
|
files:
|
381
415
|
- ".codeclimate.yml"
|
416
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
417
|
+
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
418
|
+
- ".github/ISSUE_TEMPLATE/support-request.md"
|
382
419
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
383
420
|
- ".github/dependabot.yml"
|
384
421
|
- ".github/workflows/codeql.yml"
|
@@ -401,6 +438,7 @@ files:
|
|
401
438
|
- docs/Configuration.md
|
402
439
|
- docs/Creating-Models.md
|
403
440
|
- docs/DeviceSimulation.md
|
441
|
+
- docs/Docker.md
|
404
442
|
- docs/Hooks.md
|
405
443
|
- docs/Issues.md
|
406
444
|
- docs/Model-Notes/ADVA.md
|
@@ -410,6 +448,7 @@ files:
|
|
410
448
|
- docs/Model-Notes/Comware.md
|
411
449
|
- docs/Model-Notes/Cumulus.md
|
412
450
|
- docs/Model-Notes/EOS.md
|
451
|
+
- docs/Model-Notes/EatonNetwork.md
|
413
452
|
- docs/Model-Notes/FSOS.md
|
414
453
|
- docs/Model-Notes/FortiOS.md
|
415
454
|
- docs/Model-Notes/HPEAruba.md
|
@@ -437,20 +476,6 @@ files:
|
|
437
476
|
- docs/Sources.md
|
438
477
|
- docs/Supported-OS-Types.md
|
439
478
|
- docs/Troubleshooting.md
|
440
|
-
- examples/podman-compose/Makefile
|
441
|
-
- examples/podman-compose/README.md
|
442
|
-
- examples/podman-compose/docker-compose.yml
|
443
|
-
- examples/podman-compose/gitserver/.gitignore
|
444
|
-
- examples/podman-compose/gitserver/Dockerfile
|
445
|
-
- examples/podman-compose/model-simulation/Dockerfile-model
|
446
|
-
- examples/podman-compose/model-simulation/asternos.sh
|
447
|
-
- examples/podman-compose/oxidized-config/.gitignore
|
448
|
-
- examples/podman-compose/oxidized-config/config
|
449
|
-
- examples/podman-compose/oxidized-config/config_csv-file
|
450
|
-
- examples/podman-compose/oxidized-config/config_csv-gitserver
|
451
|
-
- examples/podman-compose/oxidized-config/router.db
|
452
|
-
- examples/podman-compose/oxidized-ssh/.gitignore
|
453
|
-
- examples/podman-compose/oxidized-ssh/README.md
|
454
479
|
- extra/auto-reload-config.runit
|
455
480
|
- extra/device2yaml.rb
|
456
481
|
- extra/gitdiff-msteams.sh
|
@@ -494,6 +519,7 @@ files:
|
|
494
519
|
- lib/oxidized/input/tftp.rb
|
495
520
|
- lib/oxidized/job.rb
|
496
521
|
- lib/oxidized/jobs.rb
|
522
|
+
- lib/oxidized/logger.rb
|
497
523
|
- lib/oxidized/manager.rb
|
498
524
|
- lib/oxidized/model/acmepacket.rb
|
499
525
|
- lib/oxidized/model/acos.rb
|
@@ -549,10 +575,12 @@ files:
|
|
549
575
|
- lib/oxidized/model/dlink.rb
|
550
576
|
- lib/oxidized/model/dlinknextgen.rb
|
551
577
|
- lib/oxidized/model/dnos.rb
|
578
|
+
- lib/oxidized/model/eatonnetwork.rb
|
552
579
|
- lib/oxidized/model/eciapollo.rb
|
553
580
|
- lib/oxidized/model/edgecos.rb
|
554
581
|
- lib/oxidized/model/edgeos.rb
|
555
582
|
- lib/oxidized/model/edgeswitch.rb
|
583
|
+
- lib/oxidized/model/efos.rb
|
556
584
|
- lib/oxidized/model/eltex.rb
|
557
585
|
- lib/oxidized/model/enterasys.rb
|
558
586
|
- lib/oxidized/model/enterasys800.rb
|
@@ -583,6 +611,7 @@ files:
|
|
583
611
|
- lib/oxidized/model/hpmsm.rb
|
584
612
|
- lib/oxidized/model/ibos.rb
|
585
613
|
- lib/oxidized/model/icotera.rb
|
614
|
+
- lib/oxidized/model/ingate.rb
|
586
615
|
- lib/oxidized/model/ios.rb
|
587
616
|
- lib/oxidized/model/iosxe.rb
|
588
617
|
- lib/oxidized/model/iosxr.rb
|
@@ -636,10 +665,12 @@ files:
|
|
636
665
|
- lib/oxidized/model/riverbed.rb
|
637
666
|
- lib/oxidized/model/routeros.rb
|
638
667
|
- lib/oxidized/model/saos.rb
|
668
|
+
- lib/oxidized/model/saos10.rb
|
639
669
|
- lib/oxidized/model/screenos.rb
|
640
670
|
- lib/oxidized/model/sgos.rb
|
641
671
|
- lib/oxidized/model/siklu.rb
|
642
672
|
- lib/oxidized/model/siklumhtg.rb
|
673
|
+
- lib/oxidized/model/sixwind.rb
|
643
674
|
- lib/oxidized/model/slxos.rb
|
644
675
|
- lib/oxidized/model/smartax.rb
|
645
676
|
- lib/oxidized/model/smartcs.rb
|
@@ -654,10 +685,12 @@ files:
|
|
654
685
|
- lib/oxidized/model/telco.rb
|
655
686
|
- lib/oxidized/model/timos.rb
|
656
687
|
- lib/oxidized/model/tmos.rb
|
688
|
+
- lib/oxidized/model/tnsr.rb
|
657
689
|
- lib/oxidized/model/tplink.rb
|
658
690
|
- lib/oxidized/model/trango.rb
|
659
691
|
- lib/oxidized/model/truenas.rb
|
660
692
|
- lib/oxidized/model/ucs.rb
|
693
|
+
- lib/oxidized/model/unifiap.rb
|
661
694
|
- lib/oxidized/model/uplinkolt.rb
|
662
695
|
- lib/oxidized/model/viptela.rb
|
663
696
|
- lib/oxidized/model/voltaire.rb
|
@@ -1,103 +0,0 @@
|
|
1
|
-
# Make sure these targets always run
|
2
|
-
.PHONY: help rights clean-rights
|
3
|
-
|
4
|
-
help:
|
5
|
-
@: $(info $(HELP))
|
6
|
-
|
7
|
-
rights:
|
8
|
-
podman unshare chown -R 30000:30000 oxidized-config oxidized-ssh
|
9
|
-
podman unshare chown -R 30001 gitserver/repo.git
|
10
|
-
|
11
|
-
clean-rights:
|
12
|
-
podman unshare chown -R 0:0 *
|
13
|
-
|
14
|
-
start: gitserver-createrepo rights images
|
15
|
-
if [ -f oxidized-config/config ]; then \
|
16
|
-
podman-compose -p oxidized up ; \
|
17
|
-
else { \
|
18
|
-
echo "\n########\noxidized-config/config does not exist"; \
|
19
|
-
echo "create one or copy an example in the folder"; \
|
20
|
-
} fi
|
21
|
-
|
22
|
-
run: start
|
23
|
-
|
24
|
-
stop:
|
25
|
-
podman-compose -p oxidized down
|
26
|
-
$(MAKE) clean-rights
|
27
|
-
|
28
|
-
start-local:
|
29
|
-
if [ -f oxidized-config/config.local ]; then \
|
30
|
-
cp oxidized-config/config.local oxidized-config/config; \
|
31
|
-
else \
|
32
|
-
echo "\n########\noxidized-config/config.local does not exist"; \
|
33
|
-
fi
|
34
|
-
$(MAKE) start
|
35
|
-
|
36
|
-
stop-local: stop
|
37
|
-
if [ -f oxidized-config/config.local ]; then \
|
38
|
-
git checkout -- oxidized-config/config; \
|
39
|
-
else \
|
40
|
-
echo "\n########\noxidized-config/config.local does not exist"; \
|
41
|
-
fi
|
42
|
-
|
43
|
-
# creates a container image for the model simulation
|
44
|
-
model-image:
|
45
|
-
podman image exists local/model || \
|
46
|
-
podman build -t local/model -f model-simulation/Dockerfile-model .
|
47
|
-
|
48
|
-
model-clean:
|
49
|
-
podman rmi local/model
|
50
|
-
|
51
|
-
# creates a container image for gitserver
|
52
|
-
gitserver-image:
|
53
|
-
podman image exists local/gitserver || \
|
54
|
-
podman build -t local/gitserver gitserver/
|
55
|
-
|
56
|
-
# create the repo repo.git inside the gitserver mapped volume
|
57
|
-
gitserver-createrepo: clean-rights
|
58
|
-
if [ ! -d gitserver/repo.git ]; then \
|
59
|
-
git init --bare gitserver/repo.git; \
|
60
|
-
fi
|
61
|
-
|
62
|
-
gitserver-clean:
|
63
|
-
podman rmi local/gitserver
|
64
|
-
rm -rf gitserver/repo.git
|
65
|
-
|
66
|
-
gitserver-getkey:
|
67
|
-
podman exec --user oxidized -t oxidized_oxidized_1 sh -c "ssh-keyscan gitserver > /home/oxidized/.ssh/known_hosts"
|
68
|
-
|
69
|
-
# build all helper containter images
|
70
|
-
images: model-image gitserver-image oxidized-image
|
71
|
-
|
72
|
-
# build the oxidized image from the curent repository
|
73
|
-
oxidized-image:
|
74
|
-
podman build -t oxidized:`git describe --tags` -t oxidized:latest ../../
|
75
|
-
|
76
|
-
# removes the oxidized image
|
77
|
-
oxidized-image-clean:
|
78
|
-
podman rmi local/oxidized
|
79
|
-
|
80
|
-
# run evey clean line, even if the previous fails
|
81
|
-
clean:
|
82
|
-
-$(MAKE) stop-local
|
83
|
-
-$(MAKE) model-clean
|
84
|
-
-$(MAKE) gitserver-clean
|
85
|
-
-$(MAKE) oxidized-image-clean
|
86
|
-
|
87
|
-
define HELP
|
88
|
-
make help - This help
|
89
|
-
make rights - Change the rights of mapped folders for the users inside
|
90
|
-
the container
|
91
|
-
make clean-rights - Revert the rights of mapped folders to the local user
|
92
|
-
make start - Start the pod with all containers (alias - make run)
|
93
|
-
You can interrupt with Ctrl-C, but make sure you run
|
94
|
-
'make stop' to realy stop the container
|
95
|
-
make stop - Stop the pod
|
96
|
-
make start-local - Starts the pod with the local configuration
|
97
|
-
oxidized-config/config.local
|
98
|
-
make stop-local - Stops the pod and restores
|
99
|
-
oxidized-config/config from git
|
100
|
-
make gitserver-getkey - stores the public key of the gitserver into
|
101
|
-
oxidized-ssh/known_hosts (the pod must be running)
|
102
|
-
make clean - reverts everything to its original state
|
103
|
-
endef
|