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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +45 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  4. data/.github/ISSUE_TEMPLATE/support-request.md +39 -0
  5. data/.github/workflows/publishdocker.yml +35 -16
  6. data/.github/workflows/ruby.yml +4 -2
  7. data/.gitignore +2 -0
  8. data/.rubocop.yml +29 -8
  9. data/.rubocop_todo.yml +1 -60
  10. data/CHANGELOG.md +103 -2
  11. data/CONTRIBUTING.md +20 -10
  12. data/Dockerfile +37 -64
  13. data/README.md +47 -141
  14. data/Rakefile +9 -11
  15. data/docs/Configuration.md +236 -27
  16. data/docs/DeviceSimulation.md +19 -7
  17. data/docs/Docker.md +245 -0
  18. data/docs/Issues.md +27 -1
  19. data/docs/Model-Notes/EatonNetwork.md +18 -0
  20. data/docs/Model-Notes/HPEAruba.md +3 -2
  21. data/docs/ModelUnitTests.md +35 -25
  22. data/docs/Outputs.md +83 -2
  23. data/docs/Release.md +34 -24
  24. data/docs/Supported-OS-Types.md +7 -0
  25. data/docs/Troubleshooting.md +4 -13
  26. data/extra/device2yaml.rb +24 -9
  27. data/extra/rest_client.rb +3 -2
  28. data/extra/syslog.rb +8 -3
  29. data/lib/oxidized/cli.rb +7 -3
  30. data/lib/oxidized/config/vars.rb +22 -14
  31. data/lib/oxidized/config.rb +3 -2
  32. data/lib/oxidized/core.rb +30 -8
  33. data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
  34. data/lib/oxidized/hook/exec.rb +5 -4
  35. data/lib/oxidized/hook/githubrepo.rb +23 -17
  36. data/lib/oxidized/hook/noophook.rb +2 -2
  37. data/lib/oxidized/hook/slackdiff.rb +9 -8
  38. data/lib/oxidized/hook/xmppdiff.rb +9 -9
  39. data/lib/oxidized/hook.rb +10 -8
  40. data/lib/oxidized/input/cli.rb +8 -3
  41. data/lib/oxidized/input/exec.rb +1 -1
  42. data/lib/oxidized/input/ftp.rb +2 -2
  43. data/lib/oxidized/input/http.rb +6 -6
  44. data/lib/oxidized/input/input.rb +1 -0
  45. data/lib/oxidized/input/scp.rb +2 -2
  46. data/lib/oxidized/input/ssh.rb +21 -14
  47. data/lib/oxidized/input/telnet.rb +3 -3
  48. data/lib/oxidized/input/tftp.rb +1 -1
  49. data/lib/oxidized/job.rb +7 -4
  50. data/lib/oxidized/logger.rb +51 -0
  51. data/lib/oxidized/model/acos.rb +1 -0
  52. data/lib/oxidized/model/aos7.rb +9 -0
  53. data/lib/oxidized/model/aoscx.rb +2 -0
  54. data/lib/oxidized/model/aosw.rb +22 -17
  55. data/lib/oxidized/model/aricentiss.rb +2 -2
  56. data/lib/oxidized/model/asa.rb +3 -3
  57. data/lib/oxidized/model/awplus.rb +13 -10
  58. data/lib/oxidized/model/eatonnetwork.rb +65 -0
  59. data/lib/oxidized/model/edgecos.rb +2 -1
  60. data/lib/oxidized/model/edgeos.rb +7 -6
  61. data/lib/oxidized/model/edgeswitch.rb +3 -1
  62. data/lib/oxidized/model/efos.rb +41 -0
  63. data/lib/oxidized/model/eltex.rb +1 -1
  64. data/lib/oxidized/model/fabricos.rb +1 -1
  65. data/lib/oxidized/model/fastiron.rb +3 -1
  66. data/lib/oxidized/model/firelinuxos.rb +12 -3
  67. data/lib/oxidized/model/fortios.rb +5 -4
  68. data/lib/oxidized/model/gaiaos.rb +4 -4
  69. data/lib/oxidized/model/ingate.rb +47 -0
  70. data/lib/oxidized/model/ios.rb +16 -5
  71. data/lib/oxidized/model/ironware.rb +1 -1
  72. data/lib/oxidized/model/junos.rb +4 -0
  73. data/lib/oxidized/model/linksyssrw.rb +3 -3
  74. data/lib/oxidized/model/mlnxos.rb +14 -7
  75. data/lib/oxidized/model/model.rb +4 -3
  76. data/lib/oxidized/model/netgear.rb +8 -0
  77. data/lib/oxidized/model/nsxdfw.rb +2 -1
  78. data/lib/oxidized/model/nsxfirewall.rb +2 -1
  79. data/lib/oxidized/model/nxos.rb +2 -2
  80. data/lib/oxidized/model/openwrt.rb +6 -6
  81. data/lib/oxidized/model/powerconnect.rb +31 -10
  82. data/lib/oxidized/model/procurve.rb +3 -1
  83. data/lib/oxidized/model/qtech.rb +3 -1
  84. data/lib/oxidized/model/quantaos.rb +8 -6
  85. data/lib/oxidized/model/routeros.rb +3 -2
  86. data/lib/oxidized/model/saos10.rb +38 -0
  87. data/lib/oxidized/model/sixwind.rb +28 -0
  88. data/lib/oxidized/model/sonicos.rb +1 -1
  89. data/lib/oxidized/model/srosmd.rb +1 -1
  90. data/lib/oxidized/model/supermicro.rb +1 -1
  91. data/lib/oxidized/model/timos.rb +1 -1
  92. data/lib/oxidized/model/tmos.rb +1 -0
  93. data/lib/oxidized/model/tnsr.rb +53 -0
  94. data/lib/oxidized/model/trango.rb +3 -1
  95. data/lib/oxidized/model/unifiap.rb +144 -0
  96. data/lib/oxidized/model/vrp.rb +3 -1
  97. data/lib/oxidized/model/xos.rb +3 -1
  98. data/lib/oxidized/model/zhoneolt.rb +3 -1
  99. data/lib/oxidized/model/zynos.rb +3 -3
  100. data/lib/oxidized/node.rb +44 -27
  101. data/lib/oxidized/nodes.rb +8 -4
  102. data/lib/oxidized/output/file.rb +28 -0
  103. data/lib/oxidized/output/git.rb +148 -41
  104. data/lib/oxidized/output/gitcrypt.rb +18 -13
  105. data/lib/oxidized/output/http.rb +5 -4
  106. data/lib/oxidized/output/output.rb +14 -0
  107. data/lib/oxidized/source/http.rb +4 -2
  108. data/lib/oxidized/version.rb +6 -4
  109. data/lib/oxidized/worker.rb +13 -13
  110. data/lib/oxidized.rb +3 -24
  111. data/lib/refinements.rb +2 -0
  112. data/oxidized.gemspec +10 -8
  113. metadata +74 -41
  114. data/examples/podman-compose/Makefile +0 -103
  115. data/examples/podman-compose/README.md +0 -94
  116. data/examples/podman-compose/docker-compose.yml +0 -30
  117. data/examples/podman-compose/gitserver/.gitignore +0 -1
  118. data/examples/podman-compose/gitserver/Dockerfile +0 -14
  119. data/examples/podman-compose/model-simulation/Dockerfile-model +0 -13
  120. data/examples/podman-compose/model-simulation/asternos.sh +0 -36
  121. data/examples/podman-compose/oxidized-config/.gitignore +0 -10
  122. data/examples/podman-compose/oxidized-config/config +0 -46
  123. data/examples/podman-compose/oxidized-config/config_csv-file +0 -46
  124. data/examples/podman-compose/oxidized-config/config_csv-gitserver +0 -56
  125. data/examples/podman-compose/oxidized-config/router.db +0 -1
  126. data/examples/podman-compose/oxidized-ssh/.gitignore +0 -1
  127. 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
@@ -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
- raise Oxidized::OxidizedError, "if using pagination, 'pagination_key_name' setting must be set" unless @cfg.pagination_key_name?
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
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Oxidized
2
- VERSION = '0.32.1'.freeze
3
- VERSION_FULL = '0.32.1'.freeze
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[1] = " VERSION = '%s'.freeze\n" % VERSION
16
- file[2] = " VERSION_FULL = '%s'.freeze\n" % VERSION_FULL
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
@@ -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
- Oxidized.logger.debug "lib/oxidized/worker.rb: Jobs running: #{@jobs.size} of #{@jobs.want} - ended: #{@jobs_done} of #{@nodes.size}"
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
- Oxidized.logger.debug "lib/oxidized/worker.rb: Added #{node.group}/#{node.name} to the job queue"
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
- Oxidized.logger.debug("lib/oxidized/worker.rb: #{@jobs.size} jobs running in parallel") unless @jobs.empty?
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
- Oxidized.logger.warn "#{node.group}/#{node.name} not found, removed while collecting?"
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
- Oxidized.logger.info "Configuration updated for #{node.group}/#{node.name}"
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
- Oxidized.logger.warn msg
103
+ logger.warn msg
101
104
  end
102
105
 
103
106
  def cycle_finished?
104
- if @jobs_done > @nodes.count
105
- true
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
- Oxidized.logger.debug "lib/oxidized/worker.rb: Running :nodes_done hook"
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
- Oxidized.logger.error "lib/oxidized/worker.rb: #{e.message}"
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
- s.add_development_dependency 'git', '~> 2'
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.72.0'
55
- s.add_development_dependency 'rubocop-minitest', '~> 0.37.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.3.3'
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', '>= 0.15.0'
62
- s.add_development_dependency 'sequel', '>= 5.63.0', '<= 5.89.0'
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.32.1
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-02-20 00:00:00.000000000 Z
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: ostruct
128
+ name: psych
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
131
  - - "~>"
132
132
  - !ruby/object:Gem::Version
133
- version: '0.6'
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.6'
140
+ version: '5.0'
141
141
  - !ruby/object:Gem::Dependency
142
- name: psych
142
+ name: rugged
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - "~>"
146
146
  - !ruby/object:Gem::Version
147
- version: '5.0'
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: '5.0'
154
+ version: '1.6'
155
155
  - !ruby/object:Gem::Dependency
156
- name: rugged
156
+ name: semantic_logger
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
159
  - - "~>"
160
160
  - !ruby/object:Gem::Version
161
- version: '1.6'
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: '1.6'
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: '2'
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: '2'
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.72.0
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.72.0
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.37.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.37.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.3.3
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.3.3
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.15.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.15.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.89.0
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.89.0
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