oxidized 0.15.0 → 0.16.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/CHANGELOG.md +5 -0
- data/README.md +2 -0
- data/lib/oxidized.rb +3 -0
- data/lib/oxidized/config.rb +1 -1
- data/lib/oxidized/input/ftp.rb +1 -1
- data/lib/oxidized/input/ssh.rb +1 -1
- data/lib/oxidized/input/telnet.rb +1 -1
- data/lib/oxidized/model/gaiaos.rb +46 -0
- data/lib/oxidized/model/procurve.rb +1 -1
- data/lib/oxidized/node.rb +6 -2
- data/lib/oxidized/nodes.rb +24 -30
- data/lib/oxidized/output/git.rb +22 -28
- data/lib/oxidized/version.rb +1 -1
- data/oxidized.gemspec +5 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebfd90e4c9c182e28f85e2563cd28af4dd952477
|
4
|
+
data.tar.gz: 4d37d169505e9f479e6a27431bc6d7de017e14a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54da4be2a0fba2af711a0d81ba1696c99618efa4363ee0f586e2fcd0bb309786ef8ae67b38e8ca6353d354b7720d3220a63756bf346ec78aa2ea7c436679ffb8
|
7
|
+
data.tar.gz: 65d882b2bf026b7fea33e674413afda46ebd247e0d7cf2e1b48e874986c68839db94a0695438aabd65f2b204b58e1a155b6e9559afe994c5d84558c464d67c55
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.16.0
|
2
|
+
- FEATURE: support Gaia OS devices (by @totosh)
|
3
|
+
- BUGFIX: #fetch, #version fixes in nodes.rb (by @danilopopeye)
|
4
|
+
- BUGFIX: procurve
|
5
|
+
|
1
6
|
# 0.15.0
|
2
7
|
- FEATURE: disable periodic collection, only on demand (by Adam Winberg)
|
3
8
|
- FEATURE: allow disabling ssh exec mode always (mainly for oxidized-script) (by @nickhilliard)
|
data/README.md
CHANGED
data/lib/oxidized.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
1
3
|
module Oxidized
|
2
4
|
class OxidizedError < StandardError; end
|
3
5
|
|
@@ -34,6 +36,7 @@ module Oxidized
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def self.setup_logger
|
39
|
+
FileUtils.mkdir_p(Config::Log) unless File.directory?(Config::Log)
|
37
40
|
self.logger = if config.has_key?('use_syslog') && config.use_syslog
|
38
41
|
require 'syslog/logger'
|
39
42
|
Syslog::Logger.new('oxidized')
|
data/lib/oxidized/config.rb
CHANGED
@@ -5,7 +5,7 @@ module Oxidized
|
|
5
5
|
class Config
|
6
6
|
Root = ENV['OXIDIZED_HOME'] || File.join(ENV['HOME'], '.config', 'oxidized')
|
7
7
|
Crash = File.join Root, 'crash'
|
8
|
-
Log = File.join Root, '
|
8
|
+
Log = File.join Root, 'logs'
|
9
9
|
InputDir = File.join Directory, %w(lib oxidized input)
|
10
10
|
OutputDir = File.join Directory, %w(lib oxidized output)
|
11
11
|
ModelDir = File.join Directory, %w(lib oxidized model)
|
data/lib/oxidized/input/ftp.rb
CHANGED
@@ -18,7 +18,7 @@ module Oxidized
|
|
18
18
|
def connect node
|
19
19
|
@node = node
|
20
20
|
@node.model.cfg['ftp'].each { |cb| instance_exec(&cb) }
|
21
|
-
@log = File.open(Oxidized::Config::Log + "
|
21
|
+
@log = File.open(Oxidized::Config::Log + "/#{@node.ip}-ftp", 'w') if Oxidized.config.input.debug?
|
22
22
|
@ftp = Net::FTP.new @node.ip, @node.auth[:username], @node.auth[:password]
|
23
23
|
connected?
|
24
24
|
end
|
data/lib/oxidized/input/ssh.rb
CHANGED
@@ -21,7 +21,7 @@ module Oxidized
|
|
21
21
|
@output = ''
|
22
22
|
@node.model.cfg['ssh'].each { |cb| instance_exec(&cb) }
|
23
23
|
secure = Oxidized.config.input.ssh.secure
|
24
|
-
@log = File.open(Oxidized::Config::Log + "
|
24
|
+
@log = File.open(Oxidized::Config::Log + "/#{@node.ip}-ssh", 'w') if Oxidized.config.input.debug?
|
25
25
|
port = vars(:ssh_port) || 22
|
26
26
|
if proxy_host = vars(:ssh_proxy)
|
27
27
|
proxy = Net::SSH::Proxy::Command.new("ssh #{proxy_host} -W %h:%p")
|
@@ -16,7 +16,7 @@ module Oxidized
|
|
16
16
|
'Port' => port.to_i,
|
17
17
|
'Timeout' => @timeout,
|
18
18
|
'Model' => @node.model }
|
19
|
-
opt['Output_log'] = Oxidized::Config::Log + "
|
19
|
+
opt['Output_log'] = Oxidized::Config::Log + "/#{@node.ip}-telnet" if Oxidized.config.input.debug?
|
20
20
|
|
21
21
|
@telnet = Net::Telnet.new opt
|
22
22
|
if @node.auth[:username] and @node.auth[:username].length > 0
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class GaiaOS < Oxidized::Model
|
2
|
+
|
3
|
+
# CheckPoint - Gaia OS Model
|
4
|
+
|
5
|
+
# Gaia Prompt
|
6
|
+
prompt /^([\[\]\w.@:-]+[#>]\s?)$/
|
7
|
+
|
8
|
+
# Comment tag
|
9
|
+
comment '# '
|
10
|
+
|
11
|
+
|
12
|
+
cmd :all do |cfg|
|
13
|
+
cfg = cfg.each_line.to_a[1..-2].join
|
14
|
+
end
|
15
|
+
|
16
|
+
cmd :secret do |cfg|
|
17
|
+
cfg.gsub! /^(set expert-password-hash ).*/, '\1<EXPERT PASSWORD REMOVED>'
|
18
|
+
cfg.gsub! /^(set user \S+ password-hash ).*/,'\1<USER PASSWORD REMOVED>'
|
19
|
+
cfg.gsub! /^(set ospf .* secret ).*/,'\1<OSPF KEY REMOVED>'
|
20
|
+
cfg.gsub! /^(set snmp community )(.*)( read-only.*)/,'\1<SNMP COMMUNITY REMOVED>\3'
|
21
|
+
cfg.gsub! /^(add snmp .* community )(.*)(\S?.*)/,'\1<SNMP COMMUNITY REMOVED>\3'
|
22
|
+
cfg.gsub! /(auth|privacy)(-pass-phrase-hashed )(\S*)/,'\1-pass-phrase-hashed <SNMP PASS-PHRASE REMOVED>'
|
23
|
+
cfg
|
24
|
+
end
|
25
|
+
|
26
|
+
cmd 'show asset all' do |cfg|
|
27
|
+
comment cfg
|
28
|
+
end
|
29
|
+
|
30
|
+
cmd 'show version all' do |cfg|
|
31
|
+
comment cfg
|
32
|
+
end
|
33
|
+
|
34
|
+
cmd 'show configuration' do |cfg|
|
35
|
+
cfg.gsub! /^# Exported by \S+ on .*/, '# '
|
36
|
+
cfg
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
cfg :ssh do
|
41
|
+
# User shell must be /etc/cli.sh
|
42
|
+
post_login 'set clienv rows 0'
|
43
|
+
pre_logout 'exit'
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/lib/oxidized/node.rb
CHANGED
@@ -174,8 +174,12 @@ module Oxidized
|
|
174
174
|
def resolve_repo
|
175
175
|
remote_repo = Oxidized.config.output.git.repo
|
176
176
|
|
177
|
-
if
|
178
|
-
|
177
|
+
if remote_repo.is_a?(::String)
|
178
|
+
if Oxidized.config.output.git.single_repo? || @group.nil?
|
179
|
+
remote_repo
|
180
|
+
else
|
181
|
+
File.join(File.dirname(remote_repo), @group + '.git')
|
182
|
+
end
|
179
183
|
else
|
180
184
|
remote_repo[@group]
|
181
185
|
end
|
data/lib/oxidized/nodes.rb
CHANGED
@@ -56,11 +56,8 @@ module Oxidized
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def fetch
|
60
|
-
|
61
|
-
i = find_node_index node
|
62
|
-
output = self[i].output.new
|
63
|
-
raise Oxidized::NotSupported unless output.respond_to? :fetch
|
59
|
+
def fetch node_name, group
|
60
|
+
yield_node_output(node_name) do |node, output|
|
64
61
|
output.fetch node, group
|
65
62
|
end
|
66
63
|
end
|
@@ -94,6 +91,24 @@ module Oxidized
|
|
94
91
|
find_index node or raise Oxidized::NodeNotFound, "unable to find '#{node}'"
|
95
92
|
end
|
96
93
|
|
94
|
+
def version node_name, group
|
95
|
+
yield_node_output(node_name) do |node, output|
|
96
|
+
output.version node, group
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_version node_name, group, oid
|
101
|
+
yield_node_output(node_name) do |node, output|
|
102
|
+
output.get_version node, group, oid
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def get_diff node_name, group, oid1, oid2
|
107
|
+
yield_node_output(node_name) do |node, output|
|
108
|
+
output.get_diff node, group, oid1, oid2
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
97
112
|
private
|
98
113
|
|
99
114
|
def initialize opts={}
|
@@ -151,34 +166,13 @@ module Oxidized
|
|
151
166
|
sort_by! { |x| x.last.nil? ? Time.new(0) : x.last.end }
|
152
167
|
end
|
153
168
|
|
154
|
-
|
155
|
-
|
156
|
-
def version node, group
|
169
|
+
def yield_node_output(node_name)
|
157
170
|
with_lock do
|
158
|
-
|
159
|
-
output =
|
171
|
+
node = find { |n| n.name == node_name }
|
172
|
+
output = node.output.new
|
160
173
|
raise Oxidized::NotSupported unless output.respond_to? :fetch
|
161
|
-
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def get_version node, group, oid
|
166
|
-
with_lock do
|
167
|
-
i = find_node_index node
|
168
|
-
output = self[i].output.new
|
169
|
-
raise Oxidized::NotSupported unless output.respond_to? :fetch
|
170
|
-
output.get_version node, group, oid
|
174
|
+
yield node, output
|
171
175
|
end
|
172
176
|
end
|
173
|
-
|
174
|
-
def get_diff node, group, oid1, oid2
|
175
|
-
with_lock do
|
176
|
-
i = find_node_index node
|
177
|
-
output = self[i].output.new
|
178
|
-
raise Oxidized::NotSupported unless output.respond_to? :fetch
|
179
|
-
output.get_diff node, group, oid1, oid2
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
177
|
end
|
184
178
|
end
|
data/lib/oxidized/output/git.rb
CHANGED
@@ -41,7 +41,7 @@ class Git < Output
|
|
41
41
|
|
42
42
|
outputs.types.each do |type|
|
43
43
|
type_cfg = ''
|
44
|
-
type_repo = File.join
|
44
|
+
puts type_repo = File.join(File.dirname(repo), type + '.git')
|
45
45
|
outputs.type(type).each do |output|
|
46
46
|
(type_cfg << output; next) if not output.name
|
47
47
|
type_file = file + '--' + output.name
|
@@ -60,29 +60,21 @@ class Git < Output
|
|
60
60
|
|
61
61
|
def fetch node, group
|
62
62
|
begin
|
63
|
-
repo =
|
64
|
-
repo = File.join File.dirname(repo), group + '.git' if group and not @cfg.single_repo?
|
63
|
+
repo, path = yield_repo_and_path(node, group)
|
65
64
|
repo = Rugged::Repository.new repo
|
66
65
|
index = repo.index
|
67
66
|
index.read_tree repo.head.target.tree unless repo.empty?
|
68
|
-
|
69
|
-
file = File.join(group, node) if group and @cfg.single_repo?
|
70
|
-
repo.read(index.get(file)[:oid]).data
|
67
|
+
repo.read(index.get(path)[:oid]).data
|
71
68
|
rescue
|
72
69
|
'node not found'
|
73
70
|
end
|
74
71
|
end
|
75
72
|
|
76
|
-
|
73
|
+
# give a hash of all oid revision for the given node, and the date of the commit
|
77
74
|
def version node, group
|
78
75
|
begin
|
79
|
-
repo =
|
80
|
-
|
81
|
-
if group and @cfg.single_repo?
|
82
|
-
path = "#{group}/#{node}"
|
83
|
-
elsif group
|
84
|
-
repo = File.join File.dirname(repo), group + '.git'
|
85
|
-
end
|
76
|
+
repo, path = yield_repo_and_path(node, group)
|
77
|
+
|
86
78
|
repo = Rugged::Repository.new repo
|
87
79
|
walker = Rugged::Walker.new(repo)
|
88
80
|
walker.sorting(Rugged::SORT_DATE)
|
@@ -109,14 +101,9 @@ class Git < Output
|
|
109
101
|
#give the blob of a specific revision
|
110
102
|
def get_version node, group, oid
|
111
103
|
begin
|
112
|
-
repo =
|
113
|
-
if group && group != '' && !@cfg.single_repo?
|
114
|
-
repo = File.join File.dirname(repo), group + '.git'
|
115
|
-
elsif group && group != ''
|
116
|
-
node = File.join group, node
|
117
|
-
end
|
104
|
+
repo, path = yield_repo_and_path(node, group)
|
118
105
|
repo = Rugged::Repository.new repo
|
119
|
-
repo.blob_at(oid,
|
106
|
+
repo.blob_at(oid,path).content
|
120
107
|
rescue
|
121
108
|
'version not found'
|
122
109
|
end
|
@@ -125,30 +112,27 @@ class Git < Output
|
|
125
112
|
#give a hash with the patch of a diff between 2 revision and the stats (added and deleted lines)
|
126
113
|
def get_diff node, group, oid1, oid2
|
127
114
|
begin
|
128
|
-
repo = @cfg.repo
|
129
115
|
diff_commits = nil
|
130
|
-
|
131
|
-
repo = File.join File.dirname(repo), group + '.git'
|
132
|
-
end
|
116
|
+
repo, _ = yield_repo_and_path(node, group)
|
133
117
|
repo = Rugged::Repository.new repo
|
134
118
|
commit = repo.lookup(oid1)
|
135
|
-
|
119
|
+
|
136
120
|
if oid2
|
137
121
|
commit_old = repo.lookup(oid2)
|
138
122
|
diff = repo.diff(commit_old, commit)
|
139
123
|
diff.each do |patch|
|
140
|
-
if /#{node}\s+/.match(patch.to_s.lines.first)
|
124
|
+
if /#{node.name}\s+/.match(patch.to_s.lines.first)
|
141
125
|
diff_commits = {:patch => patch.to_s, :stat => patch.stat}
|
142
126
|
break
|
143
127
|
end
|
144
128
|
end
|
145
|
-
#else gives the diffs between the first oid and his first parrent
|
146
129
|
else
|
147
130
|
stat = commit.parents[0].diff(commit).stat
|
148
131
|
stat = [stat[1],stat[2]]
|
149
132
|
patch = commit.parents[0].diff(commit).patch
|
150
133
|
diff_commits = {:patch => patch, :stat => stat}
|
151
134
|
end
|
135
|
+
|
152
136
|
diff_commits
|
153
137
|
rescue
|
154
138
|
'no diffs'
|
@@ -157,6 +141,16 @@ class Git < Output
|
|
157
141
|
|
158
142
|
private
|
159
143
|
|
144
|
+
def yield_repo_and_path(node, group)
|
145
|
+
repo, path = node.repo, node.name
|
146
|
+
|
147
|
+
if group and @cfg.single_repo?
|
148
|
+
path = "#{group}/#{node.name}"
|
149
|
+
end
|
150
|
+
|
151
|
+
[repo, path]
|
152
|
+
end
|
153
|
+
|
160
154
|
def update repo, file, data
|
161
155
|
return if data.empty?
|
162
156
|
|
data/lib/oxidized/version.rb
CHANGED
data/oxidized.gemspec
CHANGED
@@ -23,6 +23,11 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'slop', '~> 3.5'
|
24
24
|
s.add_runtime_dependency 'net-ssh', '>= 3.0.0', '<3.1'
|
25
25
|
s.add_runtime_dependency 'rugged', '~> 0.21', '>= 0.21.4'
|
26
|
+
|
27
|
+
if defined?(RUBY_VERSION) && RUBY_VERSION > '2.3'
|
28
|
+
s.add_runtime_dependency 'net-telnet'
|
29
|
+
end
|
30
|
+
|
26
31
|
s.add_development_dependency 'pry', '~> 0'
|
27
32
|
s.add_development_dependency 'bundler', '~> 1.10'
|
28
33
|
s.add_development_dependency 'rake', '~> 10.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.
|
4
|
+
version: 0.16.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: 2016-07-
|
13
|
+
date: 2016-07-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: asetus
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.21.4
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: net-telnet
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,6 +238,7 @@ files:
|
|
224
238
|
- lib/oxidized/model/firewareos.rb
|
225
239
|
- lib/oxidized/model/fortios.rb
|
226
240
|
- lib/oxidized/model/ftos.rb
|
241
|
+
- lib/oxidized/model/gaiaos.rb
|
227
242
|
- lib/oxidized/model/ios.rb
|
228
243
|
- lib/oxidized/model/iosxr.rb
|
229
244
|
- lib/oxidized/model/ipos.rb
|