oxidized-web 0.14.0 → 0.15.1
Sign up to get free protection for your applications and to get access to all the features.
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 -9
- data/.github/workflows/stale.yml +4 -2
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +6 -11
- data/CHANGELOG.md +23 -0
- data/Rakefile +1 -0
- data/docs/development.md +19 -4
- data/lib/oxidized/web/public/scripts/oxidized.js +0 -37
- 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/views/versions.haml +1 -1
- 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.1
|
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-20 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
|
-
|