oxidized 0.29.1 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coderabbit.yaml +21 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +45 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- data/.github/ISSUE_TEMPLATE/support-request.md +39 -0
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/publishdocker.yml +108 -13
- data/.github/workflows/ruby.yml +3 -12
- data/.github/workflows/stale.yml +6 -1
- data/.gitignore +2 -0
- data/.rubocop.yml +69 -13
- data/.rubocop_todo.yml +13 -143
- data/CHANGELOG.md +431 -4
- data/CONTRIBUTING.md +189 -0
- data/Dockerfile +89 -34
- data/README.md +59 -188
- data/Rakefile +58 -12
- data/bin/oxidized +2 -5
- data/docs/Configuration.md +382 -149
- data/docs/Creating-Models.md +262 -10
- data/docs/DeviceSimulation.md +196 -0
- data/docs/Docker.md +246 -0
- data/docs/Hooks.md +146 -51
- data/docs/Inputs.md +237 -0
- data/docs/Issues.md +123 -0
- data/docs/Model-Notes/APC.md +72 -0
- data/docs/Model-Notes/Cumulus.md +5 -0
- data/docs/Model-Notes/EatonNetwork.md +18 -0
- data/docs/Model-Notes/ExaLink.md +43 -0
- data/docs/Model-Notes/FSOS.md +17 -0
- data/docs/Model-Notes/Fortinet.md +75 -0
- data/docs/Model-Notes/GrandstreamHT8xx.md +8 -0
- data/docs/Model-Notes/HPEAruba.md +32 -0
- data/docs/Model-Notes/IvantiConnectSecure.md +59 -0
- data/docs/Model-Notes/OS6.md +10 -0
- data/docs/Model-Notes/README.md +1 -20
- data/docs/Model-Notes/RouterOS.md +28 -0
- data/docs/Model-Notes/SikluMHTG.md +7 -0
- data/docs/Model-Notes/TrueNAS.md +23 -0
- data/docs/Model-Notes/XGS4600-Zyxel.md +5 -0
- data/docs/ModelUnitTests.md +219 -0
- data/docs/Outputs.md +102 -5
- data/docs/Release.md +102 -0
- data/docs/Ruby-API.md +135 -2
- data/docs/Sources.md +34 -0
- data/docs/Supported-OS-Types.md +207 -270
- data/docs/Troubleshooting.md +43 -1
- data/extra/device2yaml.rb +259 -0
- data/extra/gitdiff-msteams.sh +32 -5
- data/extra/hooks/modelrules.rb +55 -0
- data/extra/hooks/modelrulesadvanced.rb +167 -0
- data/extra/hooks/srcipmap.rb +54 -0
- data/extra/nagios_check_failing_nodes.rb +1 -1
- data/extra/oxidized.runit +1 -1
- data/extra/rest_client.rb +5 -4
- data/extra/syslog.rb +11 -6
- data/lib/oxidized/cli/support.rb +152 -0
- data/lib/oxidized/cli.rb +21 -6
- data/lib/oxidized/config/vars.rb +33 -14
- data/lib/oxidized/config.rb +28 -17
- data/lib/oxidized/core.rb +50 -8
- data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
- data/lib/oxidized/hook/exec.rb +5 -4
- data/lib/oxidized/hook/githubrepo.rb +55 -18
- data/lib/oxidized/hook/noophook.rb +2 -2
- data/lib/oxidized/hook/slackdiff.rb +50 -14
- data/lib/oxidized/hook/xmppdiff.rb +9 -9
- data/lib/oxidized/hook.rb +68 -16
- data/lib/oxidized/input/cli.rb +8 -3
- data/lib/oxidized/input/debugtext.rb +40 -0
- data/lib/oxidized/input/debugyaml.rb +82 -0
- data/lib/oxidized/input/exec.rb +2 -11
- data/lib/oxidized/input/ftp.rb +2 -19
- data/lib/oxidized/input/http.rb +67 -17
- data/lib/oxidized/input/input.rb +35 -14
- data/lib/oxidized/input/scp.rb +27 -0
- data/lib/oxidized/input/ssh.rb +59 -83
- data/lib/oxidized/input/sshbase.rb +102 -0
- data/lib/oxidized/input/telnet.rb +20 -19
- data/lib/oxidized/input/tftp.rb +8 -8
- data/lib/oxidized/job.rb +18 -7
- data/lib/oxidized/jobs.rb +11 -1
- data/lib/oxidized/logger.rb +51 -0
- data/lib/oxidized/manager.rb +18 -17
- data/lib/oxidized/model/acos.rb +2 -1
- data/lib/oxidized/model/addpack.rb +26 -0
- data/lib/oxidized/model/adtran.rb +5 -1
- data/lib/oxidized/model/adva.rb +3 -3
- data/lib/oxidized/model/airfiber.rb +1 -1
- data/lib/oxidized/model/aos7.rb +11 -0
- data/lib/oxidized/model/aoscx.rb +37 -29
- data/lib/oxidized/model/aosw.rb +39 -29
- data/lib/oxidized/model/apc_aos.rb +7 -2
- data/lib/oxidized/model/apcaos.rb +39 -0
- data/lib/oxidized/model/aricentiss.rb +9 -2
- data/lib/oxidized/model/arubainstant.rb +93 -0
- data/lib/oxidized/model/asa.rb +11 -10
- data/lib/oxidized/model/asternos.rb +22 -0
- data/lib/oxidized/model/asyncos.rb +3 -3
- data/lib/oxidized/model/audiocodes.rb +2 -2
- data/lib/oxidized/model/awplus.rb +15 -12
- data/lib/oxidized/model/axos.rb +1 -1
- data/lib/oxidized/model/bdcom.rb +1 -0
- data/lib/oxidized/model/c4cmts.rb +1 -2
- data/lib/oxidized/model/ciscosma.rb +1 -1
- data/lib/oxidized/model/ciscosmb.rb +6 -1
- data/lib/oxidized/model/cnos.rb +13 -10
- data/lib/oxidized/model/comtrol.rb +1 -1
- data/lib/oxidized/model/comware.rb +5 -3
- data/lib/oxidized/model/cumulus.rb +14 -2
- data/lib/oxidized/model/defacto.rb +26 -0
- data/lib/oxidized/model/dellx.rb +1 -1
- data/lib/oxidized/model/dlink.rb +5 -2
- data/lib/oxidized/model/dlinknextgen.rb +55 -0
- data/lib/oxidized/model/dnos.rb +3 -0
- data/lib/oxidized/model/dslcommands.rb +93 -0
- data/lib/oxidized/model/dslsetup.rb +102 -0
- data/lib/oxidized/model/eatonnetwork.rb +70 -0
- data/lib/oxidized/model/edgecos.rb +3 -1
- data/lib/oxidized/model/edgeos.rb +7 -6
- data/lib/oxidized/model/edgeswitch.rb +3 -1
- data/lib/oxidized/model/efos.rb +41 -0
- data/lib/oxidized/model/eltex.rb +4 -2
- data/lib/oxidized/model/enterasys800.rb +2 -2
- data/lib/oxidized/model/enterprise_sonic.rb +46 -0
- data/lib/oxidized/model/eos.rb +3 -1
- data/lib/oxidized/model/exalink.rb +36 -0
- data/lib/oxidized/model/f5os.rb +17 -0
- data/lib/oxidized/model/fabricos.rb +2 -2
- data/lib/oxidized/model/fastiron.rb +5 -3
- data/lib/oxidized/model/firebrick.rb +2 -2
- data/lib/oxidized/model/firelinuxos.rb +13 -6
- data/lib/oxidized/model/firewareos.rb +10 -1
- data/lib/oxidized/model/fortigate.rb +160 -0
- data/lib/oxidized/model/fortios.rb +38 -48
- data/lib/oxidized/model/fsos.rb +46 -0
- data/lib/oxidized/model/gaiaos.rb +4 -4
- data/lib/oxidized/model/garderos.rb +38 -0
- data/lib/oxidized/model/grandstreamht8xx.rb +19 -0
- data/lib/oxidized/model/h3c.rb +1 -1
- data/lib/oxidized/model/ibos.rb +1 -0
- data/lib/oxidized/model/ingate.rb +47 -0
- data/lib/oxidized/model/ios.rb +57 -30
- data/lib/oxidized/model/iosxr.rb +2 -2
- data/lib/oxidized/model/ironware.rb +7 -5
- data/lib/oxidized/model/ivanti.rb +54 -0
- data/lib/oxidized/model/junos.rb +12 -5
- data/lib/oxidized/model/kornfeldos.rb +33 -0
- data/lib/oxidized/model/lenovonos.rb +2 -0
- data/lib/oxidized/model/linksyssrw.rb +3 -3
- data/lib/oxidized/model/linuxgeneric.rb +4 -2
- data/lib/oxidized/model/macros.rb +60 -0
- data/lib/oxidized/model/mimosab11.rb +34 -0
- data/lib/oxidized/model/ml66.rb +33 -0
- data/lib/oxidized/model/mlnxos.rb +18 -14
- data/lib/oxidized/model/model.rb +98 -103
- data/lib/oxidized/model/mtrlrfs.rb +1 -0
- data/lib/oxidized/model/ndms.rb +6 -0
- data/lib/oxidized/model/netgear.rb +14 -3
- data/lib/oxidized/model/netonix.rb +1 -1
- data/lib/oxidized/model/netscaler.rb +1 -1
- data/lib/oxidized/model/nodegrid.rb +1 -1
- data/lib/oxidized/model/nsxdfw.rb +31 -0
- data/lib/oxidized/model/nsxfirewall.rb +2 -1
- data/lib/oxidized/model/nxos.rb +20 -15
- data/lib/oxidized/model/ocnos.rb +42 -0
- data/lib/oxidized/model/onefinity.rb +18 -0
- data/lib/oxidized/model/openbsd.rb +1 -1
- data/lib/oxidized/model/opengear.rb +36 -1
- data/lib/oxidized/model/openwrt.rb +6 -6
- data/lib/oxidized/model/opnsense.rb +9 -1
- data/lib/oxidized/model/os6.rb +48 -0
- data/lib/oxidized/model/outputs.rb +5 -0
- data/lib/oxidized/model/panos.rb +2 -0
- data/lib/oxidized/model/perle.rb +41 -0
- data/lib/oxidized/model/pfsense.rb +9 -0
- data/lib/oxidized/model/powerconnect.rb +32 -11
- data/lib/oxidized/model/procurve.rb +6 -2
- data/lib/oxidized/model/qtech.rb +3 -1
- data/lib/oxidized/model/quantaos.rb +8 -6
- data/lib/oxidized/model/rgos.rb +33 -0
- data/lib/oxidized/model/riverbed.rb +104 -0
- data/lib/oxidized/model/routeros.rb +18 -11
- data/lib/oxidized/model/saos.rb +18 -1
- data/lib/oxidized/model/saos10.rb +38 -0
- data/lib/oxidized/model/siklu.rb +1 -1
- data/lib/oxidized/model/siklumhtg.rb +22 -0
- data/lib/oxidized/model/sixwind.rb +28 -0
- data/lib/oxidized/model/slxos.rb +3 -3
- data/lib/oxidized/model/smartbyte.rb +48 -0
- data/lib/oxidized/model/sonicos.rb +27 -20
- data/lib/oxidized/model/speedtouch.rb +1 -1
- data/lib/oxidized/model/sros.rb +3 -3
- data/lib/oxidized/model/srosmd.rb +1 -1
- data/lib/oxidized/model/supermicro.rb +1 -1
- data/lib/oxidized/model/telco.rb +1 -1
- data/lib/oxidized/model/tmos.rb +1 -0
- data/lib/oxidized/model/tnsr.rb +57 -0
- data/lib/oxidized/model/tplink.rb +5 -5
- data/lib/oxidized/model/trango.rb +4 -2
- data/lib/oxidized/model/truenas.rb +64 -3
- data/lib/oxidized/model/ucs.rb +1 -1
- data/lib/oxidized/model/unifiap.rb +144 -0
- data/lib/oxidized/model/uplinkolt.rb +46 -0
- data/lib/oxidized/model/voltaire.rb +1 -1
- data/lib/oxidized/model/voss.rb +3 -0
- data/lib/oxidized/model/vrp.rb +5 -1
- data/lib/oxidized/model/vyatta.rb +9 -3
- data/lib/oxidized/model/vyos.rb +37 -0
- data/lib/oxidized/model/xos.rb +10 -1
- data/lib/oxidized/model/zhoneolt.rb +4 -2
- data/lib/oxidized/model/zynos.rb +67 -3
- data/lib/oxidized/model/zynosadsl.rb +14 -0
- data/lib/oxidized/model/zynoscli.rb +1 -1
- data/lib/oxidized/model/zynosgs.rb +2 -0
- data/lib/oxidized/model/zynosmgs.rb +32 -0
- data/lib/oxidized/node.rb +99 -64
- data/lib/oxidized/nodes.rb +40 -19
- data/lib/oxidized/output/file.rb +80 -43
- data/lib/oxidized/output/git.rb +295 -151
- data/lib/oxidized/output/gitcrypt.rb +193 -185
- data/lib/oxidized/output/http.rb +63 -51
- data/lib/oxidized/output/output.rb +20 -4
- data/lib/oxidized/signals.rb +44 -0
- data/lib/oxidized/source/csv.rb +49 -49
- data/lib/oxidized/source/http.rb +76 -63
- data/lib/oxidized/source/jsonfile.rb +68 -0
- data/lib/oxidized/source/source.rb +73 -18
- data/lib/oxidized/source/sql.rb +71 -59
- data/lib/oxidized/version.rb +6 -4
- data/lib/oxidized/worker.rb +57 -29
- data/lib/oxidized.rb +4 -24
- data/lib/refinements.rb +21 -1
- data/oxidized.gemspec +45 -21
- metadata +248 -41
- data/lib/oxidized/model/timos.rb +0 -10
data/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,24 +19,28 @@ 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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
break if Oxidized.config.interval.zero? && !nextnode.nexted?
|
|
27
|
+
|
|
28
|
+
nextnode.nexted = false
|
|
29
|
+
break if !nextnode.last.nil? && (nextnode.last.end + Oxidized.config.interval > Time.now.utc)
|
|
30
|
+
|
|
28
31
|
# shift nodes and get the next node
|
|
29
32
|
node = @nodes.get
|
|
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
|
-
|
|
37
|
-
|
|
39
|
+
if cycle_finished?
|
|
40
|
+
run_done_hook
|
|
41
|
+
exit 0 if Oxidized.config.run_once
|
|
42
|
+
end
|
|
43
|
+
logger.debug("#{@jobs.size} jobs running in parallel") unless @jobs.empty?
|
|
38
44
|
end
|
|
39
45
|
|
|
40
46
|
def process(job)
|
|
@@ -49,26 +55,52 @@ module Oxidized
|
|
|
49
55
|
process_failure node, job
|
|
50
56
|
end
|
|
51
57
|
rescue NodeNotFound
|
|
52
|
-
|
|
58
|
+
logger.warn "#{node.group}/#{node.name} not found, removed while collecting?"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def reload
|
|
62
|
+
@nodes.load
|
|
53
63
|
end
|
|
54
64
|
|
|
55
65
|
private
|
|
56
66
|
|
|
67
|
+
def significant_changes?(job, output)
|
|
68
|
+
node = job.node
|
|
69
|
+
model = node.model
|
|
70
|
+
return true unless model.vars(:output_store_mode) == "on_significant"
|
|
71
|
+
|
|
72
|
+
unless output.respond_to?(:fetch)
|
|
73
|
+
logger.error("Detection of significant changes needs an output " \
|
|
74
|
+
"capable of fetching the last configuration")
|
|
75
|
+
return true
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
old = model.significant_changes output.fetch(node, node.group)
|
|
79
|
+
new = model.significant_changes job.config.to_cfg
|
|
80
|
+
if old == new
|
|
81
|
+
logger.debug "No significant change on node #{node.name}"
|
|
82
|
+
false
|
|
83
|
+
else
|
|
84
|
+
true
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
57
88
|
def process_success(node, job)
|
|
58
89
|
@jobs_done += 1 # needed for :nodes_done hook
|
|
59
|
-
Oxidized.hooks.
|
|
60
|
-
job: job
|
|
90
|
+
Oxidized.hooks.node_success(node: node, job: job)
|
|
61
91
|
msg = "update #{node.group}/#{node.name}"
|
|
62
92
|
msg += " from #{node.from}" if node.from
|
|
63
93
|
msg += " with message '#{node.msg}'" if node.msg
|
|
64
94
|
output = node.output.new
|
|
65
|
-
|
|
66
|
-
|
|
95
|
+
|
|
96
|
+
significant_changes = significant_changes?(job, output)
|
|
97
|
+
if output.store(node.name, job.config,
|
|
98
|
+
msg: msg, email: node.email, user: node.user,
|
|
99
|
+
group: node.group,
|
|
100
|
+
significant_changes: significant_changes)
|
|
67
101
|
node.modified
|
|
68
|
-
|
|
69
|
-
Oxidized.hooks.
|
|
70
|
-
job: job,
|
|
71
|
-
commitref: output.commitref
|
|
102
|
+
logger.info "Configuration updated for #{node.group}/#{node.name}"
|
|
103
|
+
Oxidized.hooks.post_store(node: node, job: job, commitref: output.commitref)
|
|
72
104
|
end
|
|
73
105
|
node.reset
|
|
74
106
|
end
|
|
@@ -87,26 +119,22 @@ module Oxidized
|
|
|
87
119
|
@jobs_done += 1
|
|
88
120
|
msg += ", retries exhausted, giving up"
|
|
89
121
|
node.retry = 0
|
|
90
|
-
Oxidized.hooks.
|
|
91
|
-
job: job
|
|
122
|
+
Oxidized.hooks.node_fail(node: node, job: job)
|
|
92
123
|
end
|
|
93
|
-
|
|
124
|
+
logger.warn msg
|
|
94
125
|
end
|
|
95
126
|
|
|
96
127
|
def cycle_finished?
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
else
|
|
100
|
-
@jobs_done.positive? && (@jobs_done % @nodes.count).zero?
|
|
101
|
-
end
|
|
128
|
+
@jobs_done > @nodes.count ||
|
|
129
|
+
(@jobs_done.positive? && (@jobs_done % @nodes.count).zero?)
|
|
102
130
|
end
|
|
103
131
|
|
|
104
132
|
def run_done_hook
|
|
105
|
-
|
|
106
|
-
Oxidized.hooks.
|
|
133
|
+
logger.debug "Running :nodes_done hook"
|
|
134
|
+
Oxidized.hooks.nodes_done
|
|
107
135
|
rescue StandardError => e
|
|
108
136
|
# swallow the hook erros and continue as normal
|
|
109
|
-
|
|
137
|
+
logger.error e.message
|
|
110
138
|
ensure
|
|
111
139
|
@jobs_done = 0
|
|
112
140
|
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
|
|
|
@@ -13,7 +15,9 @@ module Oxidized
|
|
|
13
15
|
require 'oxidized/nodes'
|
|
14
16
|
require 'oxidized/manager'
|
|
15
17
|
require 'oxidized/hook'
|
|
18
|
+
require 'oxidized/signals'
|
|
16
19
|
require 'oxidized/core'
|
|
20
|
+
require 'oxidized/logger'
|
|
17
21
|
|
|
18
22
|
def self.asetus
|
|
19
23
|
@@asetus
|
|
@@ -26,28 +30,4 @@ module Oxidized
|
|
|
26
30
|
def self.config
|
|
27
31
|
asetus.cfg
|
|
28
32
|
end
|
|
29
|
-
|
|
30
|
-
def self.logger
|
|
31
|
-
@@logger
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def self.logger=(val)
|
|
35
|
-
@@logger = val
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def self.setup_logger
|
|
39
|
-
FileUtils.mkdir_p(Config::Log) unless File.directory?(Config::Log)
|
|
40
|
-
self.logger = if config.has_key?('use_syslog') && config.use_syslog
|
|
41
|
-
require 'syslog/logger'
|
|
42
|
-
Syslog::Logger.new('oxidized')
|
|
43
|
-
else
|
|
44
|
-
require 'logger'
|
|
45
|
-
if config.has_key?('log')
|
|
46
|
-
Logger.new(File.expand_path(config.log))
|
|
47
|
-
else
|
|
48
|
-
Logger.new(STDERR)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
logger.level = Logger::INFO unless config.debug
|
|
52
|
-
end
|
|
53
33
|
end
|
data/lib/refinements.rb
CHANGED
|
@@ -25,9 +25,29 @@ module Refinements
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# sets @cmd and @name unless @name is already set
|
|
28
|
-
def
|
|
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
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# keeps lines matching any pattern (String or Regexp)
|
|
36
|
+
def keep_lines(patterns)
|
|
37
|
+
each_line.select do |line|
|
|
38
|
+
patterns.any? do |pattern|
|
|
39
|
+
pattern.is_a?(Regexp) ? line =~ pattern : line.include?(pattern)
|
|
40
|
+
end
|
|
41
|
+
end.join
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# remove lines matching any pattern (String or Regexp)
|
|
45
|
+
def reject_lines(patterns)
|
|
46
|
+
each_line.reject do |line|
|
|
47
|
+
patterns.any? do |pattern|
|
|
48
|
+
pattern.is_a?(Regexp) ? line =~ pattern : line.include?(pattern)
|
|
49
|
+
end
|
|
50
|
+
end.join
|
|
31
51
|
end
|
|
32
52
|
|
|
33
53
|
# Initializes the String instance variables from another String instance
|
data/oxidized.gemspec
CHANGED
|
@@ -12,33 +12,57 @@ 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.
|
|
16
|
-
s.files = %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
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'
|
|
19
18
|
|
|
20
19
|
s.metadata['rubygems_mfa_required'] = 'true'
|
|
21
20
|
|
|
21
|
+
# Ruby version strategy
|
|
22
|
+
#
|
|
23
|
+
# We try to keep the minimum version of Ruby to match supported LTS versions
|
|
24
|
+
# of common Linux distributions, as long as the maintenance effort remains
|
|
25
|
+
# reasonable.
|
|
22
26
|
s.required_ruby_version = '>= 3.0'
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
# Gemspec strategy
|
|
29
|
+
#
|
|
30
|
+
# For dependency and optional dependencies, we try to set the minimal
|
|
31
|
+
# dependency lower or equal to the Debian 13 "Trixie" package version,
|
|
32
|
+
# so that native packages can be used.
|
|
33
|
+
# We limit the maximal minor version so that dependabot can warn about new
|
|
34
|
+
# major versions and we can test them before activating them in Oxidized.
|
|
31
35
|
|
|
32
|
-
s.
|
|
33
|
-
s.
|
|
34
|
-
s.
|
|
35
|
-
s.
|
|
36
|
-
s.
|
|
37
|
-
s.
|
|
38
|
-
s.
|
|
39
|
-
s.
|
|
40
|
-
s.
|
|
41
|
-
s.
|
|
42
|
-
s.
|
|
43
|
-
s.
|
|
36
|
+
s.add_dependency 'asetus', '~> 0.4'
|
|
37
|
+
s.add_dependency 'bcrypt_pbkdf', '~> 1.0'
|
|
38
|
+
s.add_dependency 'ed25519', '~> 1.2'
|
|
39
|
+
s.add_dependency 'net-ftp', '~> 0.2'
|
|
40
|
+
s.add_dependency 'net-http-digest_auth', '~> 1.4'
|
|
41
|
+
s.add_dependency 'net-ssh', '~> 7.3'
|
|
42
|
+
s.add_dependency 'net-telnet', '~> 0.2'
|
|
43
|
+
s.add_dependency 'psych', '~> 5.0'
|
|
44
|
+
s.add_dependency 'rugged', '~> 1.6'
|
|
45
|
+
s.add_dependency 'semantic_logger', '~> 4.17'
|
|
46
|
+
s.add_dependency 'slop', '~> 4.6'
|
|
47
|
+
s.add_dependency 'syslog', '~> 0.3'
|
|
48
|
+
s.add_dependency 'syslog_protocol', '~> 0.9'
|
|
49
|
+
|
|
50
|
+
s.add_development_dependency 'minitest', '>= 5.18', '<7'
|
|
51
|
+
s.add_development_dependency 'mocha', '>= 2.1', '<4'
|
|
52
|
+
s.add_development_dependency 'pry', '~> 0.15'
|
|
53
|
+
s.add_development_dependency 'rake', '~> 13.0'
|
|
54
|
+
# Rubocop introduces new rules in minor versions, so we limit automatic
|
|
55
|
+
# updates to patches
|
|
56
|
+
s.add_development_dependency 'rubocop', '~> 1.86.0'
|
|
57
|
+
s.add_development_dependency 'rubocop-minitest', '~> 0.39.1'
|
|
58
|
+
s.add_development_dependency 'rubocop-rake', '~> 0.7.0'
|
|
59
|
+
s.add_development_dependency 'rubocop-sequel', '~> 0.4.0'
|
|
60
|
+
s.add_development_dependency 'simplecov', '~> 0.22'
|
|
61
|
+
|
|
62
|
+
# Dependencies on optional libraries, used for unit tests & development
|
|
63
|
+
s.add_development_dependency 'git', '>= 2.0', '< 5'
|
|
64
|
+
s.add_development_dependency 'net-scp', '~> 4.1'
|
|
65
|
+
s.add_development_dependency 'net-tftp', '~> 0.1.0'
|
|
66
|
+
s.add_development_dependency 'oxidized-web', '>= 0.17.1'
|
|
67
|
+
s.add_development_dependency 'sequel', '>= 5.63.0', '< 6'
|
|
44
68
|
end
|