oxidized 0.29.1 → 0.30.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql.yml +4 -4
  3. data/.github/workflows/publishdocker.yml +3 -0
  4. data/.github/workflows/ruby.yml +1 -1
  5. data/.github/workflows/stale.yml +4 -1
  6. data/.rubocop.yml +6 -3
  7. data/.rubocop_todo.yml +10 -93
  8. data/CHANGELOG.md +76 -4
  9. data/CONTRIBUTING.md +174 -0
  10. data/Dockerfile +12 -1
  11. data/README.md +18 -36
  12. data/bin/oxidized +2 -5
  13. data/docs/Hooks.md +37 -1
  14. data/docs/Model-Notes/APC_AOS.md +52 -0
  15. data/docs/Model-Notes/FSOS.md +11 -0
  16. data/docs/Model-Notes/FortiOS.md +28 -0
  17. data/docs/Model-Notes/README.md +1 -20
  18. data/docs/Model-Notes/XGS4600-Zyxel.md +5 -0
  19. data/docs/Release.md +62 -0
  20. data/docs/Ruby-API.md +1 -1
  21. data/docs/Sources.md +13 -0
  22. data/docs/Supported-OS-Types.md +178 -270
  23. data/docs/Troubleshooting.md +16 -0
  24. data/examples/podman-compose/Makefile +61 -0
  25. data/examples/podman-compose/README.md +58 -0
  26. data/examples/podman-compose/docker-compose.yml +21 -0
  27. data/examples/podman-compose/model-simulation/Dockerfile-model +13 -0
  28. data/examples/podman-compose/model-simulation/asternos.sh +34 -0
  29. data/examples/podman-compose/oxidized-config/.gitignore +8 -0
  30. data/examples/podman-compose/oxidized-config/config +46 -0
  31. data/examples/podman-compose/oxidized-config/router.db +1 -0
  32. data/examples/podman-compose/oxidized-ssh/README.md +14 -0
  33. data/extra/rest_client.rb +2 -2
  34. data/extra/syslog.rb +2 -2
  35. data/lib/oxidized/cli.rb +6 -4
  36. data/lib/oxidized/config.rb +17 -14
  37. data/lib/oxidized/core.rb +22 -3
  38. data/lib/oxidized/hook.rb +3 -3
  39. data/lib/oxidized/input/exec.rb +1 -1
  40. data/lib/oxidized/input/ftp.rb +2 -2
  41. data/lib/oxidized/input/http.rb +32 -8
  42. data/lib/oxidized/input/input.rb +1 -1
  43. data/lib/oxidized/input/scp.rb +52 -0
  44. data/lib/oxidized/input/ssh.rb +10 -7
  45. data/lib/oxidized/input/telnet.rb +3 -2
  46. data/lib/oxidized/input/tftp.rb +1 -1
  47. data/lib/oxidized/jobs.rb +11 -1
  48. data/lib/oxidized/manager.rb +6 -6
  49. data/lib/oxidized/model/acos.rb +1 -1
  50. data/lib/oxidized/model/addpack.rb +26 -0
  51. data/lib/oxidized/model/adtran.rb +5 -1
  52. data/lib/oxidized/model/adva.rb +2 -2
  53. data/lib/oxidized/model/aoscx.rb +2 -1
  54. data/lib/oxidized/model/apc_aos.rb +2 -1
  55. data/lib/oxidized/model/aricentiss.rb +7 -0
  56. data/lib/oxidized/model/asternos.rb +22 -0
  57. data/lib/oxidized/model/asyncos.rb +2 -2
  58. data/lib/oxidized/model/awplus.rb +2 -2
  59. data/lib/oxidized/model/bdcom.rb +1 -0
  60. data/lib/oxidized/model/c4cmts.rb +1 -2
  61. data/lib/oxidized/model/ciscosma.rb +1 -1
  62. data/lib/oxidized/model/ciscosmb.rb +6 -1
  63. data/lib/oxidized/model/comware.rb +2 -2
  64. data/lib/oxidized/model/cumulus.rb +1 -1
  65. data/lib/oxidized/model/dellx.rb +1 -1
  66. data/lib/oxidized/model/dlink.rb +4 -2
  67. data/lib/oxidized/model/dlinknextgen.rb +51 -0
  68. data/lib/oxidized/model/dnos.rb +3 -0
  69. data/lib/oxidized/model/edgecos.rb +1 -1
  70. data/lib/oxidized/model/eltex.rb +2 -0
  71. data/lib/oxidized/model/enterasys800.rb +1 -1
  72. data/lib/oxidized/model/eos.rb +1 -1
  73. data/lib/oxidized/model/firebrick.rb +2 -2
  74. data/lib/oxidized/model/firewareos.rb +1 -1
  75. data/lib/oxidized/model/fortios.rb +9 -2
  76. data/lib/oxidized/model/fsos.rb +44 -0
  77. data/lib/oxidized/model/ios.rb +1 -1
  78. data/lib/oxidized/model/iosxr.rb +2 -2
  79. data/lib/oxidized/model/junos.rb +3 -2
  80. data/lib/oxidized/model/mimosab11.rb +34 -0
  81. data/lib/oxidized/model/ml66.rb +33 -0
  82. data/lib/oxidized/model/model.rb +3 -3
  83. data/lib/oxidized/model/netgear.rb +1 -1
  84. data/lib/oxidized/model/netscaler.rb +1 -1
  85. data/lib/oxidized/model/nxos.rb +4 -3
  86. data/lib/oxidized/model/ocnos.rb +42 -0
  87. data/lib/oxidized/model/onefinity.rb +18 -0
  88. data/lib/oxidized/model/openbsd.rb +1 -1
  89. data/lib/oxidized/model/opengear.rb +36 -1
  90. data/lib/oxidized/model/opnsense.rb +1 -1
  91. data/lib/oxidized/model/panos.rb +2 -0
  92. data/lib/oxidized/model/pfsense.rb +1 -0
  93. data/lib/oxidized/model/procurve.rb +3 -1
  94. data/lib/oxidized/model/rgos.rb +33 -0
  95. data/lib/oxidized/model/routeros.rb +10 -8
  96. data/lib/oxidized/model/slxos.rb +2 -2
  97. data/lib/oxidized/model/sonicos.rb +18 -17
  98. data/lib/oxidized/model/sros.rb +3 -3
  99. data/lib/oxidized/model/tplink.rb +4 -3
  100. data/lib/oxidized/model/truenas.rb +2 -1
  101. data/lib/oxidized/model/vrp.rb +3 -1
  102. data/lib/oxidized/model/vyatta.rb +6 -0
  103. data/lib/oxidized/model/zynos.rb +67 -3
  104. data/lib/oxidized/model/zynosadsl.rb +14 -0
  105. data/lib/oxidized/model/zynosgs.rb +2 -0
  106. data/lib/oxidized/model/zynosmgs.rb +32 -0
  107. data/lib/oxidized/node.rb +7 -7
  108. data/lib/oxidized/nodes.rb +17 -12
  109. data/lib/oxidized/output/file.rb +1 -1
  110. data/lib/oxidized/output/git.rb +5 -3
  111. data/lib/oxidized/output/gitcrypt.rb +4 -3
  112. data/lib/oxidized/signals.rb +44 -0
  113. data/lib/oxidized/source/csv.rb +1 -1
  114. data/lib/oxidized/source/http.rb +26 -5
  115. data/lib/oxidized/source/source.rb +2 -2
  116. data/lib/oxidized/source/sql.rb +3 -3
  117. data/lib/oxidized/version.rb +2 -2
  118. data/lib/oxidized/worker.rb +8 -1
  119. data/lib/oxidized.rb +3 -2
  120. data/lib/refinements.rb +1 -1
  121. data/oxidized.gemspec +6 -3
  122. metadata +78 -9
@@ -12,7 +12,7 @@ module Oxidized
12
12
  def setup
13
13
  return unless @cfg.empty?
14
14
 
15
- Oxidized.asetus.user.output.file.directory = File.join(Config::Root, 'configs')
15
+ Oxidized.asetus.user.output.file.directory = File.join(Config::ROOT, 'configs')
16
16
  Oxidized.asetus.save :user
17
17
  raise NoConfig, 'no output file config, edit ~/.config/oxidized/config'
18
18
  end
@@ -1,5 +1,7 @@
1
1
  module Oxidized
2
2
  class Git < Output
3
+ using Refinements
4
+
3
5
  class GitError < OxidizedError; end
4
6
  begin
5
7
  require 'rugged'
@@ -18,7 +20,7 @@ module Oxidized
18
20
  if @cfg.empty?
19
21
  Oxidized.asetus.user.output.git.user = 'Oxidized'
20
22
  Oxidized.asetus.user.output.git.email = 'o@example.com'
21
- Oxidized.asetus.user.output.git.repo = File.join(Config::Root, 'oxidized.git')
23
+ Oxidized.asetus.user.output.git.repo = File.join(Config::ROOT, 'oxidized.git')
22
24
  Oxidized.asetus.save :user
23
25
  raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
24
26
  end
@@ -34,8 +36,8 @@ module Oxidized
34
36
 
35
37
  def store(file, outputs, opt = {})
36
38
  @msg = opt[:msg]
37
- @user = (opt[:user] || @cfg.user)
38
- @email = (opt[:email] || @cfg.email)
39
+ @user = opt[:user] || @cfg.user
40
+ @email = opt[:email] || @cfg.email
39
41
  @opt = opt
40
42
  @commitref = nil
41
43
  repo = @cfg.repo
@@ -1,5 +1,6 @@
1
1
  module Oxidized
2
2
  class GitCrypt < Output
3
+ using Refinements
3
4
  class GitCryptError < OxidizedError; end
4
5
  begin
5
6
  require 'git'
@@ -23,7 +24,7 @@ module Oxidized
23
24
  if @cfg.empty?
24
25
  Oxidized.asetus.user.output.gitcrypt.user = 'Oxidized'
25
26
  Oxidized.asetus.user.output.gitcrypt.email = 'o@example.com'
26
- Oxidized.asetus.user.output.gitcrypt.repo = File.join(Config::Root, 'oxidized.git')
27
+ Oxidized.asetus.user.output.gitcrypt.repo = File.join(Config::ROOT, 'oxidized.git')
27
28
  Oxidized.asetus.save :user
28
29
  raise NoConfig, 'no output git config, edit ~/.config/oxidized/config'
29
30
  end
@@ -63,8 +64,8 @@ module Oxidized
63
64
 
64
65
  def store(file, outputs, opt = {})
65
66
  @msg = opt[:msg]
66
- @user = (opt[:user] || @cfg.user)
67
- @email = (opt[:email] || @cfg.email)
67
+ @user = opt[:user] || @cfg.user
68
+ @email = opt[:email] || @cfg.email
68
69
  @opt = opt
69
70
  @commitref = nil
70
71
  repo = @cfg.repo
@@ -0,0 +1,44 @@
1
+ # Monkey patch Signal.trap for Puma to keep it from overriding our handlers
2
+ # Also prevent Puma from registering its own SIGHUP handler
3
+ module Puma
4
+ class Signal
5
+ class << self
6
+ alias os_trap trap
7
+ def Signal.trap(sig, &block)
8
+ sigshortname = sig.gsub "SIG", ''
9
+ Oxidized::Signals.register_signal(sig, block) unless sigshortname.eql? 'HUP'
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ module Oxidized
16
+ class Signals
17
+ @handlers = Hash.new { |h, k| h[k] = [] }
18
+ class << self
19
+ attr_accessor :handlers
20
+
21
+ def register_signal(sig, procobj)
22
+ # Compute short name of the signal (without SIG prefix)
23
+ sigshortname = sig.gsub "SIG", ''
24
+ signum = Signal.list[sigshortname]
25
+
26
+ # Register the handler with OS
27
+ Signal.trap signum do
28
+ Oxidized::Signals.handle_signal(signum)
29
+ end
30
+
31
+ # Add the proc to the handler list for the requested signal
32
+ @handlers[signum].push(procobj)
33
+ end
34
+
35
+ def handle_signal(signum)
36
+ return unless handlers.has_key?(signum)
37
+
38
+ @handlers[signum].each do |handler|
39
+ handler.call
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -7,7 +7,7 @@ module Oxidized
7
7
 
8
8
  def setup
9
9
  if @cfg.empty?
10
- Oxidized.asetus.user.source.csv.file = File.join(Config::Root, 'router.db')
10
+ Oxidized.asetus.user.source.csv.file = File.join(Config::ROOT, 'router.db')
11
11
  Oxidized.asetus.user.source.csv.delimiter = /:/
12
12
  Oxidized.asetus.user.source.csv.map.name = 0
13
13
  Oxidized.asetus.user.source.csv.map.model = 1
@@ -6,6 +6,7 @@ module Oxidized
6
6
  end
7
7
 
8
8
  def setup
9
+ Oxidized.setup_logger
9
10
  return unless @cfg.url.empty?
10
11
 
11
12
  raise NoConfig, 'no source http url config, edit ~/.config/oxidized/config'
@@ -18,9 +19,14 @@ module Oxidized
18
19
 
19
20
  def load(node_want = nil)
20
21
  nodes = []
21
- data = JSON.parse(read_http(node_want))
22
- data = string_navigate(data, @cfg.hosts_location) if @cfg.hosts_location?
23
- data.each do |node|
22
+ uri = URI.parse(@cfg.url)
23
+ data = JSON.parse(read_http(uri, node_want))
24
+ node_data = data
25
+ node_data = string_navigate(data, @cfg.hosts_location) if @cfg.hosts_location?
26
+ node_data = pagination(data, node_want) if @cfg.pagination?
27
+
28
+ # at this point we have all the nodes; pagination or not
29
+ node_data.each do |node|
24
30
  next if node.empty?
25
31
 
26
32
  # map node parameters
@@ -56,8 +62,23 @@ module Oxidized
56
62
  object
57
63
  end
58
64
 
59
- def read_http(node_want)
60
- uri = URI.parse(@cfg.url)
65
+ def pagination(data, node_want)
66
+ node_data = []
67
+ raise Oxidized::OxidizedError, "if using pagination, 'pagination_key_name' setting must be set" unless @cfg.pagination_key_name?
68
+
69
+ next_key = @cfg.pagination_key_name
70
+ loop do
71
+ node_data += string_navigate(data, @cfg.hosts_location) if @cfg.hosts_location?
72
+ break if data[next_key].nil?
73
+
74
+ new_uri = URI.parse(data[next_key]) if data.has_key?(next_key)
75
+ data = JSON.parse(read_http(new_uri, node_want))
76
+ node_data += string_navigate(data, @cfg.hosts_location) if @cfg.hosts_location?
77
+ end
78
+ node_data
79
+ end
80
+
81
+ def read_http(uri, node_want)
61
82
  http = Net::HTTP.new(uri.host, uri.port)
62
83
  http.use_ssl = true if uri.scheme == 'https'
63
84
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @cfg.secure
@@ -3,8 +3,8 @@ module Oxidized
3
3
  class NoConfig < OxidizedError; end
4
4
 
5
5
  def initialize
6
- @model_map = (Oxidized.config.model_map || {})
7
- @group_map = (Oxidized.config.group_map || {})
6
+ @model_map = Oxidized.config.model_map || {}
7
+ @group_map = Oxidized.config.group_map || {}
8
8
  end
9
9
 
10
10
  def map_model(model)
@@ -10,7 +10,7 @@ module Oxidized
10
10
  return unless @cfg.empty?
11
11
 
12
12
  Oxidized.asetus.user.source.sql.adapter = 'sqlite'
13
- Oxidized.asetus.user.source.sql.database = File.join(Config::Root, 'sqlite.db')
13
+ Oxidized.asetus.user.source.sql.database = File.join(Config::ROOT, 'sqlite.db')
14
14
  Oxidized.asetus.user.source.sql.table = 'devices'
15
15
  Oxidized.asetus.user.source.sql.map.name = 'name'
16
16
  Oxidized.asetus.user.source.sql.map.model = 'rancid'
@@ -68,8 +68,8 @@ module Oxidized
68
68
  sslkey: @cfg.ssl_key?)
69
69
  end
70
70
  Sequel.connect(options)
71
- rescue Sequel::AdapterNotFound => error
72
- raise OxidizedError, "SQL adapter gem not installed: " + error.message
71
+ rescue Sequel::AdapterNotFound => e
72
+ raise OxidizedError, "SQL adapter gem not installed: " + e.message
73
73
  end
74
74
  end
75
75
  end
@@ -1,6 +1,6 @@
1
1
  module Oxidized
2
- VERSION = '0.29.1'.freeze
3
- VERSION_FULL = '0.29.1'.freeze
2
+ VERSION = '0.30.1'.freeze
3
+ VERSION_FULL = '0.30.1'.freeze
4
4
  def self.version_set
5
5
  version_full = %x(git describe --tags).chop rescue ""
6
6
  version = %x(git describe --tags --abbrev=0).chop rescue ""
@@ -33,7 +33,10 @@ module Oxidized
33
33
  Oxidized.logger.debug "lib/oxidized/worker.rb: Added #{node.group}/#{node.name} to the job queue"
34
34
  end
35
35
 
36
- run_done_hook if cycle_finished?
36
+ if cycle_finished?
37
+ run_done_hook
38
+ exit 0 if Oxidized.config.run_once
39
+ end
37
40
  Oxidized.logger.debug("lib/oxidized/worker.rb: #{@jobs.size} jobs running in parallel") unless @jobs.empty?
38
41
  end
39
42
 
@@ -52,6 +55,10 @@ module Oxidized
52
55
  Oxidized.logger.warn "#{node.group}/#{node.name} not found, removed while collecting?"
53
56
  end
54
57
 
58
+ def reload
59
+ @nodes.load
60
+ end
61
+
55
62
  private
56
63
 
57
64
  def process_success(node, job)
data/lib/oxidized.rb CHANGED
@@ -13,6 +13,7 @@ module Oxidized
13
13
  require 'oxidized/nodes'
14
14
  require 'oxidized/manager'
15
15
  require 'oxidized/hook'
16
+ require 'oxidized/signals'
16
17
  require 'oxidized/core'
17
18
 
18
19
  def self.asetus
@@ -36,7 +37,7 @@ module Oxidized
36
37
  end
37
38
 
38
39
  def self.setup_logger
39
- FileUtils.mkdir_p(Config::Log) unless File.directory?(Config::Log)
40
+ FileUtils.mkdir_p(Config::LOG) unless File.directory?(Config::LOG)
40
41
  self.logger = if config.has_key?('use_syslog') && config.use_syslog
41
42
  require 'syslog/logger'
42
43
  Syslog::Logger.new('oxidized')
@@ -45,7 +46,7 @@ module Oxidized
45
46
  if config.has_key?('log')
46
47
  Logger.new(File.expand_path(config.log))
47
48
  else
48
- Logger.new(STDERR)
49
+ Logger.new($stderr)
49
50
  end
50
51
  end
51
52
  logger.level = Logger::INFO unless config.debug
data/lib/refinements.rb CHANGED
@@ -25,7 +25,7 @@ module Refinements
25
25
  end
26
26
 
27
27
  # sets @cmd and @name unless @name is already set
28
- def set_cmd(command)
28
+ def process_cmd(command)
29
29
  @cmd = command
30
30
  @name ||= @cmd.to_s.strip.gsub(/\s+/, '_') # what to do when command is proc? #to_s seems ghetto
31
31
  end
data/oxidized.gemspec CHANGED
@@ -24,19 +24,22 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency 'asetus', '~> 0.1'
25
25
  s.add_runtime_dependency 'bcrypt_pbkdf', '~> 1.0'
26
26
  s.add_runtime_dependency 'ed25519', '~> 1.2'
27
+ s.add_runtime_dependency 'net-ftp', '~> 0.2'
28
+ s.add_runtime_dependency 'net-scp', '~> 4.0'
27
29
  s.add_runtime_dependency 'net-ssh', '~> 7.1'
28
30
  s.add_runtime_dependency 'net-telnet', '~> 0.2'
31
+ s.add_runtime_dependency 'psych', '~> 3.3.2'
29
32
  s.add_runtime_dependency 'rugged', '~> 1.6'
30
33
  s.add_runtime_dependency 'slop', '~> 4.6'
31
34
 
32
35
  s.add_development_dependency 'bundler', '~> 2.2'
33
36
  s.add_development_dependency 'git', '~> 1'
34
37
  s.add_development_dependency 'minitest', '~> 5.18'
35
- s.add_development_dependency 'mocha', '~> 1.2'
38
+ s.add_development_dependency 'mocha', '~> 2.1'
36
39
  s.add_development_dependency 'pry', '~> 0.14.2'
37
40
  s.add_development_dependency 'rake', '~> 13.0'
38
- s.add_development_dependency 'rubocop', '~> 1.48.0'
39
- s.add_development_dependency 'rubocop-minitest', '~> 0.29.0'
41
+ s.add_development_dependency 'rubocop', '~> 1.62.0'
42
+ s.add_development_dependency 'rubocop-minitest', '~> 0.35.0'
40
43
  s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
41
44
  s.add_development_dependency 'simplecov', '~> 0.22.0'
42
45
  s.add_development_dependency 'simplecov-cobertura', '~> 2.1.0'
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.29.1
4
+ version: 0.30.1
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: 2023-04-24 00:00:00.000000000 Z
13
+ date: 2024-04-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: asetus
@@ -54,6 +54,34 @@ dependencies:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: '1.2'
57
+ - !ruby/object:Gem::Dependency
58
+ name: net-ftp
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.2'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.2'
71
+ - !ruby/object:Gem::Dependency
72
+ name: net-scp
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '4.0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '4.0'
57
85
  - !ruby/object:Gem::Dependency
58
86
  name: net-ssh
59
87
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +110,20 @@ dependencies:
82
110
  - - "~>"
83
111
  - !ruby/object:Gem::Version
84
112
  version: '0.2'
113
+ - !ruby/object:Gem::Dependency
114
+ name: psych
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 3.3.2
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: 3.3.2
85
127
  - !ruby/object:Gem::Dependency
86
128
  name: rugged
87
129
  requirement: !ruby/object:Gem::Requirement
@@ -158,14 +200,14 @@ dependencies:
158
200
  requirements:
159
201
  - - "~>"
160
202
  - !ruby/object:Gem::Version
161
- version: '1.2'
203
+ version: '2.1'
162
204
  type: :development
163
205
  prerelease: false
164
206
  version_requirements: !ruby/object:Gem::Requirement
165
207
  requirements:
166
208
  - - "~>"
167
209
  - !ruby/object:Gem::Version
168
- version: '1.2'
210
+ version: '2.1'
169
211
  - !ruby/object:Gem::Dependency
170
212
  name: pry
171
213
  requirement: !ruby/object:Gem::Requirement
@@ -200,28 +242,28 @@ dependencies:
200
242
  requirements:
201
243
  - - "~>"
202
244
  - !ruby/object:Gem::Version
203
- version: 1.48.0
245
+ version: 1.62.0
204
246
  type: :development
205
247
  prerelease: false
206
248
  version_requirements: !ruby/object:Gem::Requirement
207
249
  requirements:
208
250
  - - "~>"
209
251
  - !ruby/object:Gem::Version
210
- version: 1.48.0
252
+ version: 1.62.0
211
253
  - !ruby/object:Gem::Dependency
212
254
  name: rubocop-minitest
213
255
  requirement: !ruby/object:Gem::Requirement
214
256
  requirements:
215
257
  - - "~>"
216
258
  - !ruby/object:Gem::Version
217
- version: 0.29.0
259
+ version: 0.35.0
218
260
  type: :development
219
261
  prerelease: false
220
262
  version_requirements: !ruby/object:Gem::Requirement
221
263
  requirements:
222
264
  - - "~>"
223
265
  - !ruby/object:Gem::Version
224
- version: 0.29.0
266
+ version: 0.35.0
225
267
  - !ruby/object:Gem::Dependency
226
268
  name: rubocop-rake
227
269
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +341,7 @@ files:
299
341
  - ".rubocop.yml"
300
342
  - ".rubocop_todo.yml"
301
343
  - CHANGELOG.md
344
+ - CONTRIBUTING.md
302
345
  - Dockerfile
303
346
  - Gemfile
304
347
  - LICENSE
@@ -311,11 +354,14 @@ files:
311
354
  - docs/Creating-Models.md
312
355
  - docs/Hooks.md
313
356
  - docs/Model-Notes/ADVA.md
357
+ - docs/Model-Notes/APC_AOS.md
314
358
  - docs/Model-Notes/AireOS.md
315
359
  - docs/Model-Notes/ArbOS.md
316
360
  - docs/Model-Notes/Comware.md
317
361
  - docs/Model-Notes/Cumulus.md
318
362
  - docs/Model-Notes/EOS.md
363
+ - docs/Model-Notes/FSOS.md
364
+ - docs/Model-Notes/FortiOS.md
319
365
  - docs/Model-Notes/IOS.md
320
366
  - docs/Model-Notes/JunOS.md
321
367
  - docs/Model-Notes/LenovoNOS.md
@@ -331,10 +377,20 @@ files:
331
377
  - docs/Model-Notes/Viptela.md
332
378
  - docs/Model-Notes/XGS4600-Zyxel.md
333
379
  - docs/Outputs.md
380
+ - docs/Release.md
334
381
  - docs/Ruby-API.md
335
382
  - docs/Sources.md
336
383
  - docs/Supported-OS-Types.md
337
384
  - docs/Troubleshooting.md
385
+ - examples/podman-compose/Makefile
386
+ - examples/podman-compose/README.md
387
+ - examples/podman-compose/docker-compose.yml
388
+ - examples/podman-compose/model-simulation/Dockerfile-model
389
+ - examples/podman-compose/model-simulation/asternos.sh
390
+ - examples/podman-compose/oxidized-config/.gitignore
391
+ - examples/podman-compose/oxidized-config/config
392
+ - examples/podman-compose/oxidized-config/router.db
393
+ - examples/podman-compose/oxidized-ssh/README.md
338
394
  - extra/auto-reload-config.runit
339
395
  - extra/gitdiff-msteams.sh
340
396
  - extra/nagios_check_failing_nodes.rb
@@ -371,6 +427,7 @@ files:
371
427
  - lib/oxidized/input/ftp.rb
372
428
  - lib/oxidized/input/http.rb
373
429
  - lib/oxidized/input/input.rb
430
+ - lib/oxidized/input/scp.rb
374
431
  - lib/oxidized/input/ssh.rb
375
432
  - lib/oxidized/input/telnet.rb
376
433
  - lib/oxidized/input/tftp.rb
@@ -380,6 +437,7 @@ files:
380
437
  - lib/oxidized/model/acmepacket.rb
381
438
  - lib/oxidized/model/acos.rb
382
439
  - lib/oxidized/model/acsw.rb
440
+ - lib/oxidized/model/addpack.rb
383
441
  - lib/oxidized/model/adtran.rb
384
442
  - lib/oxidized/model/adva.rb
385
443
  - lib/oxidized/model/aen.rb
@@ -396,6 +454,7 @@ files:
396
454
  - lib/oxidized/model/arbos.rb
397
455
  - lib/oxidized/model/aricentiss.rb
398
456
  - lib/oxidized/model/asa.rb
457
+ - lib/oxidized/model/asternos.rb
399
458
  - lib/oxidized/model/asyncos.rb
400
459
  - lib/oxidized/model/audiocodes.rb
401
460
  - lib/oxidized/model/audiocodesmp.rb
@@ -426,6 +485,7 @@ files:
426
485
  - lib/oxidized/model/dcnos.rb
427
486
  - lib/oxidized/model/dellx.rb
428
487
  - lib/oxidized/model/dlink.rb
488
+ - lib/oxidized/model/dlinknextgen.rb
429
489
  - lib/oxidized/model/dnos.rb
430
490
  - lib/oxidized/model/eciapollo.rb
431
491
  - lib/oxidized/model/edgecos.rb
@@ -443,6 +503,7 @@ files:
443
503
  - lib/oxidized/model/firewareos.rb
444
504
  - lib/oxidized/model/fortios.rb
445
505
  - lib/oxidized/model/fortiwlc.rb
506
+ - lib/oxidized/model/fsos.rb
446
507
  - lib/oxidized/model/ftos.rb
447
508
  - lib/oxidized/model/fujitsupy.rb
448
509
  - lib/oxidized/model/gaiaos.rb
@@ -469,6 +530,8 @@ files:
469
530
  - lib/oxidized/model/linksyssrw.rb
470
531
  - lib/oxidized/model/linuxgeneric.rb
471
532
  - lib/oxidized/model/masteros.rb
533
+ - lib/oxidized/model/mimosab11.rb
534
+ - lib/oxidized/model/ml66.rb
472
535
  - lib/oxidized/model/mlnxos.rb
473
536
  - lib/oxidized/model/model.rb
474
537
  - lib/oxidized/model/mtrlrfs.rb
@@ -482,6 +545,8 @@ files:
482
545
  - lib/oxidized/model/nsxconfig.rb
483
546
  - lib/oxidized/model/nsxfirewall.rb
484
547
  - lib/oxidized/model/nxos.rb
548
+ - lib/oxidized/model/ocnos.rb
549
+ - lib/oxidized/model/onefinity.rb
485
550
  - lib/oxidized/model/oneos.rb
486
551
  - lib/oxidized/model/openbsd.rb
487
552
  - lib/oxidized/model/opengear.rb
@@ -499,6 +564,7 @@ files:
499
564
  - lib/oxidized/model/qtech.rb
500
565
  - lib/oxidized/model/quantaos.rb
501
566
  - lib/oxidized/model/raisecom.rb
567
+ - lib/oxidized/model/rgos.rb
502
568
  - lib/oxidized/model/routeros.rb
503
569
  - lib/oxidized/model/saos.rb
504
570
  - lib/oxidized/model/screenos.rb
@@ -534,8 +600,10 @@ files:
534
600
  - lib/oxidized/model/zteolt.rb
535
601
  - lib/oxidized/model/zy1308.rb
536
602
  - lib/oxidized/model/zynos.rb
603
+ - lib/oxidized/model/zynosadsl.rb
537
604
  - lib/oxidized/model/zynoscli.rb
538
605
  - lib/oxidized/model/zynosgs.rb
606
+ - lib/oxidized/model/zynosmgs.rb
539
607
  - lib/oxidized/node.rb
540
608
  - lib/oxidized/node/stats.rb
541
609
  - lib/oxidized/nodes.rb
@@ -544,6 +612,7 @@ files:
544
612
  - lib/oxidized/output/gitcrypt.rb
545
613
  - lib/oxidized/output/http.rb
546
614
  - lib/oxidized/output/output.rb
615
+ - lib/oxidized/signals.rb
547
616
  - lib/oxidized/source/csv.rb
548
617
  - lib/oxidized/source/http.rb
549
618
  - lib/oxidized/source/source.rb
@@ -572,7 +641,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
641
  - !ruby/object:Gem::Version
573
642
  version: '0'
574
643
  requirements: []
575
- rubygems_version: 3.4.10
644
+ rubygems_version: 3.3.15
576
645
  signing_key:
577
646
  specification_version: 4
578
647
  summary: feeble attempt at rancid