oxidized 0.29.1 → 0.30.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 (121) 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 +66 -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/Ruby-API.md +1 -1
  20. data/docs/Sources.md +13 -0
  21. data/docs/Supported-OS-Types.md +178 -270
  22. data/docs/Troubleshooting.md +16 -0
  23. data/examples/podman-compose/Makefile +61 -0
  24. data/examples/podman-compose/README.md +58 -0
  25. data/examples/podman-compose/docker-compose.yml +21 -0
  26. data/examples/podman-compose/model-simulation/Dockerfile-model +13 -0
  27. data/examples/podman-compose/model-simulation/asternos.sh +34 -0
  28. data/examples/podman-compose/oxidized-config/.gitignore +8 -0
  29. data/examples/podman-compose/oxidized-config/config +46 -0
  30. data/examples/podman-compose/oxidized-config/router.db +1 -0
  31. data/examples/podman-compose/oxidized-ssh/README.md +14 -0
  32. data/extra/rest_client.rb +2 -2
  33. data/extra/syslog.rb +2 -2
  34. data/lib/oxidized/cli.rb +6 -4
  35. data/lib/oxidized/config.rb +17 -14
  36. data/lib/oxidized/core.rb +22 -3
  37. data/lib/oxidized/hook.rb +3 -3
  38. data/lib/oxidized/input/exec.rb +1 -1
  39. data/lib/oxidized/input/ftp.rb +2 -2
  40. data/lib/oxidized/input/http.rb +32 -8
  41. data/lib/oxidized/input/input.rb +1 -1
  42. data/lib/oxidized/input/scp.rb +52 -0
  43. data/lib/oxidized/input/ssh.rb +10 -7
  44. data/lib/oxidized/input/telnet.rb +3 -2
  45. data/lib/oxidized/input/tftp.rb +1 -1
  46. data/lib/oxidized/jobs.rb +11 -1
  47. data/lib/oxidized/manager.rb +6 -6
  48. data/lib/oxidized/model/acos.rb +1 -1
  49. data/lib/oxidized/model/addpack.rb +26 -0
  50. data/lib/oxidized/model/adtran.rb +5 -1
  51. data/lib/oxidized/model/adva.rb +2 -2
  52. data/lib/oxidized/model/aoscx.rb +2 -1
  53. data/lib/oxidized/model/apc_aos.rb +2 -1
  54. data/lib/oxidized/model/aricentiss.rb +7 -0
  55. data/lib/oxidized/model/asternos.rb +22 -0
  56. data/lib/oxidized/model/asyncos.rb +2 -2
  57. data/lib/oxidized/model/awplus.rb +2 -2
  58. data/lib/oxidized/model/bdcom.rb +1 -0
  59. data/lib/oxidized/model/c4cmts.rb +1 -2
  60. data/lib/oxidized/model/ciscosma.rb +1 -1
  61. data/lib/oxidized/model/ciscosmb.rb +6 -1
  62. data/lib/oxidized/model/comware.rb +2 -2
  63. data/lib/oxidized/model/cumulus.rb +1 -1
  64. data/lib/oxidized/model/dellx.rb +1 -1
  65. data/lib/oxidized/model/dlink.rb +4 -2
  66. data/lib/oxidized/model/dlinknextgen.rb +51 -0
  67. data/lib/oxidized/model/dnos.rb +3 -0
  68. data/lib/oxidized/model/edgecos.rb +1 -1
  69. data/lib/oxidized/model/eltex.rb +2 -0
  70. data/lib/oxidized/model/enterasys800.rb +1 -1
  71. data/lib/oxidized/model/eos.rb +1 -1
  72. data/lib/oxidized/model/firebrick.rb +2 -2
  73. data/lib/oxidized/model/firewareos.rb +1 -1
  74. data/lib/oxidized/model/fortios.rb +9 -2
  75. data/lib/oxidized/model/fsos.rb +44 -0
  76. data/lib/oxidized/model/ios.rb +1 -1
  77. data/lib/oxidized/model/iosxr.rb +2 -2
  78. data/lib/oxidized/model/junos.rb +3 -2
  79. data/lib/oxidized/model/mimosab11.rb +34 -0
  80. data/lib/oxidized/model/ml66.rb +33 -0
  81. data/lib/oxidized/model/model.rb +3 -3
  82. data/lib/oxidized/model/netgear.rb +1 -1
  83. data/lib/oxidized/model/netscaler.rb +1 -1
  84. data/lib/oxidized/model/nxos.rb +4 -3
  85. data/lib/oxidized/model/ocnos.rb +42 -0
  86. data/lib/oxidized/model/onefinity.rb +18 -0
  87. data/lib/oxidized/model/openbsd.rb +1 -1
  88. data/lib/oxidized/model/opengear.rb +36 -1
  89. data/lib/oxidized/model/opnsense.rb +1 -1
  90. data/lib/oxidized/model/panos.rb +2 -0
  91. data/lib/oxidized/model/pfsense.rb +1 -0
  92. data/lib/oxidized/model/procurve.rb +3 -1
  93. data/lib/oxidized/model/rgos.rb +33 -0
  94. data/lib/oxidized/model/routeros.rb +10 -8
  95. data/lib/oxidized/model/slxos.rb +2 -2
  96. data/lib/oxidized/model/sonicos.rb +18 -17
  97. data/lib/oxidized/model/sros.rb +3 -3
  98. data/lib/oxidized/model/tplink.rb +4 -3
  99. data/lib/oxidized/model/truenas.rb +2 -1
  100. data/lib/oxidized/model/vrp.rb +3 -1
  101. data/lib/oxidized/model/vyatta.rb +6 -0
  102. data/lib/oxidized/model/zynos.rb +67 -3
  103. data/lib/oxidized/model/zynosadsl.rb +14 -0
  104. data/lib/oxidized/model/zynosgs.rb +2 -0
  105. data/lib/oxidized/model/zynosmgs.rb +32 -0
  106. data/lib/oxidized/node.rb +7 -7
  107. data/lib/oxidized/nodes.rb +17 -12
  108. data/lib/oxidized/output/file.rb +1 -1
  109. data/lib/oxidized/output/git.rb +5 -3
  110. data/lib/oxidized/output/gitcrypt.rb +4 -3
  111. data/lib/oxidized/signals.rb +44 -0
  112. data/lib/oxidized/source/csv.rb +1 -1
  113. data/lib/oxidized/source/http.rb +26 -5
  114. data/lib/oxidized/source/source.rb +2 -2
  115. data/lib/oxidized/source/sql.rb +3 -3
  116. data/lib/oxidized/version.rb +2 -2
  117. data/lib/oxidized/worker.rb +8 -1
  118. data/lib/oxidized.rb +3 -2
  119. data/lib/refinements.rb +1 -1
  120. data/oxidized.gemspec +6 -3
  121. metadata +77 -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.0'.freeze
3
+ VERSION_FULL = '0.30.0'.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.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: 2023-04-24 00:00:00.000000000 Z
13
+ date: 2024-04-11 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
@@ -335,6 +381,15 @@ files:
335
381
  - docs/Sources.md
336
382
  - docs/Supported-OS-Types.md
337
383
  - docs/Troubleshooting.md
384
+ - examples/podman-compose/Makefile
385
+ - examples/podman-compose/README.md
386
+ - examples/podman-compose/docker-compose.yml
387
+ - examples/podman-compose/model-simulation/Dockerfile-model
388
+ - examples/podman-compose/model-simulation/asternos.sh
389
+ - examples/podman-compose/oxidized-config/.gitignore
390
+ - examples/podman-compose/oxidized-config/config
391
+ - examples/podman-compose/oxidized-config/router.db
392
+ - examples/podman-compose/oxidized-ssh/README.md
338
393
  - extra/auto-reload-config.runit
339
394
  - extra/gitdiff-msteams.sh
340
395
  - extra/nagios_check_failing_nodes.rb
@@ -371,6 +426,7 @@ files:
371
426
  - lib/oxidized/input/ftp.rb
372
427
  - lib/oxidized/input/http.rb
373
428
  - lib/oxidized/input/input.rb
429
+ - lib/oxidized/input/scp.rb
374
430
  - lib/oxidized/input/ssh.rb
375
431
  - lib/oxidized/input/telnet.rb
376
432
  - lib/oxidized/input/tftp.rb
@@ -380,6 +436,7 @@ files:
380
436
  - lib/oxidized/model/acmepacket.rb
381
437
  - lib/oxidized/model/acos.rb
382
438
  - lib/oxidized/model/acsw.rb
439
+ - lib/oxidized/model/addpack.rb
383
440
  - lib/oxidized/model/adtran.rb
384
441
  - lib/oxidized/model/adva.rb
385
442
  - lib/oxidized/model/aen.rb
@@ -396,6 +453,7 @@ files:
396
453
  - lib/oxidized/model/arbos.rb
397
454
  - lib/oxidized/model/aricentiss.rb
398
455
  - lib/oxidized/model/asa.rb
456
+ - lib/oxidized/model/asternos.rb
399
457
  - lib/oxidized/model/asyncos.rb
400
458
  - lib/oxidized/model/audiocodes.rb
401
459
  - lib/oxidized/model/audiocodesmp.rb
@@ -426,6 +484,7 @@ files:
426
484
  - lib/oxidized/model/dcnos.rb
427
485
  - lib/oxidized/model/dellx.rb
428
486
  - lib/oxidized/model/dlink.rb
487
+ - lib/oxidized/model/dlinknextgen.rb
429
488
  - lib/oxidized/model/dnos.rb
430
489
  - lib/oxidized/model/eciapollo.rb
431
490
  - lib/oxidized/model/edgecos.rb
@@ -443,6 +502,7 @@ files:
443
502
  - lib/oxidized/model/firewareos.rb
444
503
  - lib/oxidized/model/fortios.rb
445
504
  - lib/oxidized/model/fortiwlc.rb
505
+ - lib/oxidized/model/fsos.rb
446
506
  - lib/oxidized/model/ftos.rb
447
507
  - lib/oxidized/model/fujitsupy.rb
448
508
  - lib/oxidized/model/gaiaos.rb
@@ -469,6 +529,8 @@ files:
469
529
  - lib/oxidized/model/linksyssrw.rb
470
530
  - lib/oxidized/model/linuxgeneric.rb
471
531
  - lib/oxidized/model/masteros.rb
532
+ - lib/oxidized/model/mimosab11.rb
533
+ - lib/oxidized/model/ml66.rb
472
534
  - lib/oxidized/model/mlnxos.rb
473
535
  - lib/oxidized/model/model.rb
474
536
  - lib/oxidized/model/mtrlrfs.rb
@@ -482,6 +544,8 @@ files:
482
544
  - lib/oxidized/model/nsxconfig.rb
483
545
  - lib/oxidized/model/nsxfirewall.rb
484
546
  - lib/oxidized/model/nxos.rb
547
+ - lib/oxidized/model/ocnos.rb
548
+ - lib/oxidized/model/onefinity.rb
485
549
  - lib/oxidized/model/oneos.rb
486
550
  - lib/oxidized/model/openbsd.rb
487
551
  - lib/oxidized/model/opengear.rb
@@ -499,6 +563,7 @@ files:
499
563
  - lib/oxidized/model/qtech.rb
500
564
  - lib/oxidized/model/quantaos.rb
501
565
  - lib/oxidized/model/raisecom.rb
566
+ - lib/oxidized/model/rgos.rb
502
567
  - lib/oxidized/model/routeros.rb
503
568
  - lib/oxidized/model/saos.rb
504
569
  - lib/oxidized/model/screenos.rb
@@ -534,8 +599,10 @@ files:
534
599
  - lib/oxidized/model/zteolt.rb
535
600
  - lib/oxidized/model/zy1308.rb
536
601
  - lib/oxidized/model/zynos.rb
602
+ - lib/oxidized/model/zynosadsl.rb
537
603
  - lib/oxidized/model/zynoscli.rb
538
604
  - lib/oxidized/model/zynosgs.rb
605
+ - lib/oxidized/model/zynosmgs.rb
539
606
  - lib/oxidized/node.rb
540
607
  - lib/oxidized/node/stats.rb
541
608
  - lib/oxidized/nodes.rb
@@ -544,6 +611,7 @@ files:
544
611
  - lib/oxidized/output/gitcrypt.rb
545
612
  - lib/oxidized/output/http.rb
546
613
  - lib/oxidized/output/output.rb
614
+ - lib/oxidized/signals.rb
547
615
  - lib/oxidized/source/csv.rb
548
616
  - lib/oxidized/source/http.rb
549
617
  - lib/oxidized/source/source.rb
@@ -572,7 +640,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
640
  - !ruby/object:Gem::Version
573
641
  version: '0'
574
642
  requirements: []
575
- rubygems_version: 3.4.10
643
+ rubygems_version: 3.3.15
576
644
  signing_key:
577
645
  specification_version: 4
578
646
  summary: feeble attempt at rancid