oxidized-web 0.14.0 → 0.15.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.
Potentially problematic release.
This version of oxidized-web might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +2 -3
- data/.github/workflows/stale.yml +4 -2
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +1 -6
- data/CHANGELOG.md +18 -0
- data/Rakefile +1 -0
- data/docs/development.md +16 -4
- data/lib/oxidized/web/public/scripts/oxidized.js +0 -36
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.css +77 -80
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.js +4 -7
- data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.css +45 -15
- data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.js +12 -37
- data/lib/oxidized/web/public/weblibs/dataTables.buttons.js +139 -23
- data/lib/oxidized/web/public/weblibs/dataTables.js +1190 -518
- data/lib/oxidized/web/version.rb +1 -1
- data/lib/oxidized/web/views/layout.haml +0 -4
- data/lib/oxidized/web/webapp.rb +20 -35
- data/oxidized-web.gemspec +16 -15
- data/package-lock.json +14 -14
- data/spec/node_spec.rb +3 -47
- data/spec/node_version_spec.rb +102 -0
- data/spec/nodes_spec.rb +57 -0
- data/spec/spec_helper.rb +3 -0
- metadata +30 -35
- data/lib/oxidized/web/mig.rb +0 -140
- data/lib/oxidized/web/public/scripts/script-migration.js +0 -15
- data/lib/oxidized/web/views/migration.haml +0 -53
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxidized-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2025-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: charlock_holmes
|
@@ -81,20 +81,34 @@ dependencies:
|
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '2.3'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: ostruct
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0.6'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0.6'
|
84
98
|
- !ruby/object:Gem::Dependency
|
85
99
|
name: oxidized
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
87
101
|
requirements:
|
88
102
|
- - "~>"
|
89
103
|
- !ruby/object:Gem::Version
|
90
|
-
version: '0.
|
104
|
+
version: '0.31'
|
91
105
|
type: :runtime
|
92
106
|
prerelease: false
|
93
107
|
version_requirements: !ruby/object:Gem::Requirement
|
94
108
|
requirements:
|
95
109
|
- - "~>"
|
96
110
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
111
|
+
version: '0.31'
|
98
112
|
- !ruby/object:Gem::Dependency
|
99
113
|
name: puma
|
100
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,9 +116,6 @@ dependencies:
|
|
102
116
|
- - ">="
|
103
117
|
- !ruby/object:Gem::Version
|
104
118
|
version: 3.11.4
|
105
|
-
- - "<"
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: 6.5.0
|
108
119
|
type: :runtime
|
109
120
|
prerelease: false
|
110
121
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -112,9 +123,6 @@ dependencies:
|
|
112
123
|
- - ">="
|
113
124
|
- !ruby/object:Gem::Version
|
114
125
|
version: 3.11.4
|
115
|
-
- - "<"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 6.5.0
|
118
126
|
- !ruby/object:Gem::Dependency
|
119
127
|
name: sinatra
|
120
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,9 +130,6 @@ dependencies:
|
|
122
130
|
- - ">="
|
123
131
|
- !ruby/object:Gem::Version
|
124
132
|
version: 1.4.6
|
125
|
-
- - "<"
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: '5.0'
|
128
133
|
type: :runtime
|
129
134
|
prerelease: false
|
130
135
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -132,9 +137,6 @@ dependencies:
|
|
132
137
|
- - ">="
|
133
138
|
- !ruby/object:Gem::Version
|
134
139
|
version: 1.4.6
|
135
|
-
- - "<"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '5.0'
|
138
140
|
- !ruby/object:Gem::Dependency
|
139
141
|
name: sinatra-contrib
|
140
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,9 +144,6 @@ dependencies:
|
|
142
144
|
- - ">="
|
143
145
|
- !ruby/object:Gem::Version
|
144
146
|
version: 1.4.6
|
145
|
-
- - "<"
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '5.0'
|
148
147
|
type: :runtime
|
149
148
|
prerelease: false
|
150
149
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -152,9 +151,6 @@ dependencies:
|
|
152
151
|
- - ">="
|
153
152
|
- !ruby/object:Gem::Version
|
154
153
|
version: 1.4.6
|
155
|
-
- - "<"
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '5.0'
|
158
154
|
- !ruby/object:Gem::Dependency
|
159
155
|
name: bundler
|
160
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -245,56 +241,56 @@ dependencies:
|
|
245
241
|
requirements:
|
246
242
|
- - "~>"
|
247
243
|
- !ruby/object:Gem::Version
|
248
|
-
version: 1.
|
244
|
+
version: 1.72.1
|
249
245
|
type: :development
|
250
246
|
prerelease: false
|
251
247
|
version_requirements: !ruby/object:Gem::Requirement
|
252
248
|
requirements:
|
253
249
|
- - "~>"
|
254
250
|
- !ruby/object:Gem::Version
|
255
|
-
version: 1.
|
251
|
+
version: 1.72.1
|
256
252
|
- !ruby/object:Gem::Dependency
|
257
253
|
name: rubocop-minitest
|
258
254
|
requirement: !ruby/object:Gem::Requirement
|
259
255
|
requirements:
|
260
256
|
- - "~>"
|
261
257
|
- !ruby/object:Gem::Version
|
262
|
-
version: 0.
|
258
|
+
version: 0.37.1
|
263
259
|
type: :development
|
264
260
|
prerelease: false
|
265
261
|
version_requirements: !ruby/object:Gem::Requirement
|
266
262
|
requirements:
|
267
263
|
- - "~>"
|
268
264
|
- !ruby/object:Gem::Version
|
269
|
-
version: 0.
|
265
|
+
version: 0.37.1
|
270
266
|
- !ruby/object:Gem::Dependency
|
271
267
|
name: rubocop-rails
|
272
268
|
requirement: !ruby/object:Gem::Requirement
|
273
269
|
requirements:
|
274
270
|
- - "~>"
|
275
271
|
- !ruby/object:Gem::Version
|
276
|
-
version: 2.
|
272
|
+
version: 2.30.0
|
277
273
|
type: :development
|
278
274
|
prerelease: false
|
279
275
|
version_requirements: !ruby/object:Gem::Requirement
|
280
276
|
requirements:
|
281
277
|
- - "~>"
|
282
278
|
- !ruby/object:Gem::Version
|
283
|
-
version: 2.
|
279
|
+
version: 2.30.0
|
284
280
|
- !ruby/object:Gem::Dependency
|
285
281
|
name: rubocop-rake
|
286
282
|
requirement: !ruby/object:Gem::Requirement
|
287
283
|
requirements:
|
288
284
|
- - "~>"
|
289
285
|
- !ruby/object:Gem::Version
|
290
|
-
version: 0.
|
286
|
+
version: 0.7.1
|
291
287
|
type: :development
|
292
288
|
prerelease: false
|
293
289
|
version_requirements: !ruby/object:Gem::Requirement
|
294
290
|
requirements:
|
295
291
|
- - "~>"
|
296
292
|
- !ruby/object:Gem::Version
|
297
|
-
version: 0.
|
293
|
+
version: 0.7.1
|
298
294
|
- !ruby/object:Gem::Dependency
|
299
295
|
name: simplecov
|
300
296
|
requirement: !ruby/object:Gem::Requirement
|
@@ -329,14 +325,14 @@ dependencies:
|
|
329
325
|
requirements:
|
330
326
|
- - "~>"
|
331
327
|
- !ruby/object:Gem::Version
|
332
|
-
version: 0.
|
328
|
+
version: 0.13.1
|
333
329
|
type: :development
|
334
330
|
prerelease: false
|
335
331
|
version_requirements: !ruby/object:Gem::Requirement
|
336
332
|
requirements:
|
337
333
|
- - "~>"
|
338
334
|
- !ruby/object:Gem::Version
|
339
|
-
version: 0.
|
335
|
+
version: 0.13.1
|
340
336
|
description: puma+sinatra+haml webUI + REST API for oxidized
|
341
337
|
email:
|
342
338
|
- saku@ytti.fi
|
@@ -361,13 +357,11 @@ files:
|
|
361
357
|
- Rakefile
|
362
358
|
- docs/development.md
|
363
359
|
- lib/oxidized/web.rb
|
364
|
-
- lib/oxidized/web/mig.rb
|
365
360
|
- lib/oxidized/web/public/css/oxidized.css
|
366
361
|
- lib/oxidized/web/public/images/favicon.ico
|
367
362
|
- lib/oxidized/web/public/images/oxidizing.png
|
368
363
|
- lib/oxidized/web/public/images/oxidizing_40px.png
|
369
364
|
- lib/oxidized/web/public/scripts/oxidized.js
|
370
|
-
- lib/oxidized/web/public/scripts/script-migration.js
|
371
365
|
- lib/oxidized/web/public/weblibs/bootstrap-icons.css
|
372
366
|
- lib/oxidized/web/public/weblibs/bootstrap.bundle.js
|
373
367
|
- lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map
|
@@ -391,7 +385,6 @@ files:
|
|
391
385
|
- lib/oxidized/web/views/footer.haml
|
392
386
|
- lib/oxidized/web/views/head.haml
|
393
387
|
- lib/oxidized/web/views/layout.haml
|
394
|
-
- lib/oxidized/web/views/migration.haml
|
395
388
|
- lib/oxidized/web/views/node.haml
|
396
389
|
- lib/oxidized/web/views/nodes.haml
|
397
390
|
- lib/oxidized/web/views/stats.haml
|
@@ -402,6 +395,8 @@ files:
|
|
402
395
|
- package-lock.json
|
403
396
|
- package.json
|
404
397
|
- spec/node_spec.rb
|
398
|
+
- spec/node_version_spec.rb
|
399
|
+
- spec/nodes_spec.rb
|
405
400
|
- spec/root_spec.rb
|
406
401
|
- spec/spec_helper.rb
|
407
402
|
- spec/webapp_spec.rb
|
data/lib/oxidized/web/mig.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
module Oxidized
|
2
|
-
module API
|
3
|
-
class Mig
|
4
|
-
def initialize(hash_router_db, cloginrc, path_new_router)
|
5
|
-
@hash_router_db = hash_router_db
|
6
|
-
@cloginrc = cloginrc
|
7
|
-
@path_new_router = path_new_router
|
8
|
-
end
|
9
|
-
|
10
|
-
# read cloginrc and return a hash with node name, which a hash value which contains user,
|
11
|
-
# password, eventually enable
|
12
|
-
def cloginrc(clogin_file)
|
13
|
-
close_file = clogin_file
|
14
|
-
file = close_file.read
|
15
|
-
file = file.gsub('add', '')
|
16
|
-
|
17
|
-
hash = {}
|
18
|
-
file.each_line do |line|
|
19
|
-
# stock all device name, and password and enable if there is one
|
20
|
-
line = line.split
|
21
|
-
(0..line.length).each do |i|
|
22
|
-
if line[i] == 'user'
|
23
|
-
# add the equipment and user if not exist
|
24
|
-
hash[line[i + 1]] = { user: line[i + 2] } unless hash[line[i + 1]]
|
25
|
-
# if the equipment exist, add password and enable password
|
26
|
-
elsif line[i] == 'password'
|
27
|
-
if hash[line[i + 1]]
|
28
|
-
if line.length > i + 2
|
29
|
-
h = hash[line[i + 1]]
|
30
|
-
h[:password] = line[i + 2]
|
31
|
-
h[:enable] = line[i + 3] if /\s*/.match(line[i + 3])
|
32
|
-
hash[line[i + 1]] = h
|
33
|
-
elsif line.length == i + 2
|
34
|
-
h = hash[line[i + 1]]
|
35
|
-
h[:password] = line[i + 2]
|
36
|
-
hash[line[i + 1]] = h
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
close_file.close
|
43
|
-
hash
|
44
|
-
end
|
45
|
-
|
46
|
-
def model_dico(model)
|
47
|
-
dico = { 'cisco' => 'ios', 'foundry' => 'ironware' }
|
48
|
-
model = model.gsub("\n", '')
|
49
|
-
model = dico[model] if dico[model]
|
50
|
-
model
|
51
|
-
end
|
52
|
-
|
53
|
-
# add node and group for an equipment (take a list of router.db)
|
54
|
-
def rancid_group(router_db_list)
|
55
|
-
model = {}
|
56
|
-
hash = cloginrc @cloginrc
|
57
|
-
router_db_list.each do |router_db|
|
58
|
-
group = router_db[:group]
|
59
|
-
file_close = router_db[:file]
|
60
|
-
file = file_close.read
|
61
|
-
file = file.gsub(':up', '')
|
62
|
-
file.gsub(' ', '')
|
63
|
-
|
64
|
-
file.each_line do |line|
|
65
|
-
line = line.split(':')
|
66
|
-
node = line[0]
|
67
|
-
next unless hash[node]
|
68
|
-
|
69
|
-
h = hash[node]
|
70
|
-
model = model_dico line[1].to_s
|
71
|
-
h[:model] = model
|
72
|
-
h[:group] = group
|
73
|
-
end
|
74
|
-
file_close.close
|
75
|
-
end
|
76
|
-
hash
|
77
|
-
end
|
78
|
-
|
79
|
-
# write a router.db conf, need the hash and the path of the file we whish create
|
80
|
-
def write_router_db(hash)
|
81
|
-
router_db = File.new(@path_new_router, 'w')
|
82
|
-
hash.each do |key, value|
|
83
|
-
line = key.to_s
|
84
|
-
line += ":#{value[:model]}"
|
85
|
-
line += ":#{value[:user]}"
|
86
|
-
line += ":#{value[:password]}"
|
87
|
-
line += ":#{value[:group]}"
|
88
|
-
line += ":#{value[:enable]}" if value[:enable]
|
89
|
-
router_db.puts(line)
|
90
|
-
end
|
91
|
-
router_db.close
|
92
|
-
end
|
93
|
-
|
94
|
-
def edit_conf_file(path_conf, router_db_path)
|
95
|
-
file_close = File.open(path_conf, 'r')
|
96
|
-
file = file_close
|
97
|
-
file = file.read
|
98
|
-
source_reached = false
|
99
|
-
new_file = []
|
100
|
-
file.each_line do |line|
|
101
|
-
if source_reached
|
102
|
-
next unless /^\w/.match(line)
|
103
|
-
|
104
|
-
source_reached = false
|
105
|
-
end
|
106
|
-
new_file.push(line)
|
107
|
-
next unless /source:/.match(line)
|
108
|
-
|
109
|
-
source_reached = true
|
110
|
-
new_file.push(" default: csv\n")
|
111
|
-
new_file.push(" csv:\n")
|
112
|
-
new_file.push(" file: #{router_db_path}\n")
|
113
|
-
new_file.push(" delimiter: !ruby/regexp /:/\n")
|
114
|
-
new_file.push(" map:\n")
|
115
|
-
new_file.push(" name: 0\n")
|
116
|
-
new_file.push(" model: 1\n")
|
117
|
-
new_file.push(" username: 2\n")
|
118
|
-
new_file.push(" password: 3\n")
|
119
|
-
new_file.push(" group: 4\n")
|
120
|
-
new_file.push(" vars_map:\n")
|
121
|
-
new_file.push(" enable: 5\n")
|
122
|
-
next
|
123
|
-
end
|
124
|
-
file_close.close
|
125
|
-
|
126
|
-
new_conf = File.new(path_conf, "w")
|
127
|
-
new_file.each do |line|
|
128
|
-
new_conf.puts(line)
|
129
|
-
end
|
130
|
-
new_conf.close
|
131
|
-
end
|
132
|
-
|
133
|
-
def go_rancid_migration
|
134
|
-
hash = rancid_group @hash_router_db
|
135
|
-
write_router_db hash
|
136
|
-
edit_conf_file "#{Dir.home}/.config/oxidized/config", @path_new_router
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
var number = 1;
|
2
|
-
|
3
|
-
function add_file_upload(){
|
4
|
-
number++;
|
5
|
-
document.getElementById('number').value = number;
|
6
|
-
var table = document.getElementById("files");
|
7
|
-
var row = table.insertRow(-1);
|
8
|
-
var group = row.insertCell(0);
|
9
|
-
group.id = "file";
|
10
|
-
var file = row.insertCell(1);
|
11
|
-
file.id = "file";
|
12
|
-
group.innerHTML = '<input type="text" name="group' + number +'" value="default">';
|
13
|
-
file.innerHTML = '<input type="file" name="file' + number +'" required >';
|
14
|
-
|
15
|
-
}
|
@@ -1,53 +0,0 @@
|
|
1
|
-
.alert.alert-warning
|
2
|
-
The RANCID migration tool is deprecated and will be removed in a future
|
3
|
-
release. If you still need it
|
4
|
-
%b and
|
5
|
-
are willing to maintain it, open an issue at
|
6
|
-
%a{href: 'https://github.com/ytti/oxidized-web/issues'}oxidized-web issues (github)
|
7
|
-
|
8
|
-
%h2
|
9
|
-
RANCID to Oxidized
|
10
|
-
%small router.db and Group Migration
|
11
|
-
%form.form-horizontal{method: 'post', enctype: 'multipart/form-data',
|
12
|
-
role: 'form'}
|
13
|
-
.form-group
|
14
|
-
%label.col-sm-3{for: 'path_new_file'}
|
15
|
-
Oxidized router.db Path
|
16
|
-
.col-sm-3
|
17
|
-
%input.form-control{type: 'text', name: 'path_new_file',
|
18
|
-
placeholder: 'Path/to_file/here.db'}
|
19
|
-
.form-group
|
20
|
-
%label.col-sm-3{for: 'clogrinc'} .cloginrc File
|
21
|
-
.col-sm-3
|
22
|
-
.input-group
|
23
|
-
%input.form-control{type: 'text'}
|
24
|
-
%span.input-group-btn
|
25
|
-
%span.btn.btn-default.btn-file
|
26
|
-
%input{type: 'file', name: 'cloginrc'}
|
27
|
-
Browse
|
28
|
-
|
29
|
-
.form-group
|
30
|
-
.col-sm-12
|
31
|
-
.row
|
32
|
-
%label.col-sm-3.label-control RANCID router.db File
|
33
|
-
%label.col-sm-3.label-control Device Group
|
34
|
-
.col-sm-12#rancid_routerdbs
|
35
|
-
.row#rancidDb1
|
36
|
-
.col-sm-3
|
37
|
-
.input-group
|
38
|
-
%input.form-control{type: 'text'}
|
39
|
-
%span.input-group-btn
|
40
|
-
%span.btn.btn-default.btn-file
|
41
|
-
%input#file1{type: 'file', name: 'file1', required: ''}
|
42
|
-
Browse
|
43
|
-
.col-sm-3
|
44
|
-
%input.form-control#group1{type: 'text', name: 'group1',
|
45
|
-
value: 'default'}
|
46
|
-
.row
|
47
|
-
.col-sm-3
|
48
|
-
%button.btn.btn-default#add{type: 'button'} Add More
|
49
|
-
|
50
|
-
.form-group
|
51
|
-
.col-sm-12
|
52
|
-
%button.btn.btn-primary#upload_button{type: 'submit'} Migrate!
|
53
|
-
|