foreman_datacenter 1.19.7 → 1.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/foreman_datacenter/modal.js +9 -22
- data/app/assets/stylesheets/foreman_datacenter/datacenter.css +0 -3
- data/app/assets/stylesheets/foreman_datacenter/device_roles.css +0 -32
- data/app/controllers/api/v2/foreman_datacenter/device_interfaces_controller.rb +1 -1
- data/app/controllers/api/v2/foreman_datacenter/devices_controller.rb +1 -1
- data/app/controllers/api/v2/foreman_datacenter/management_devices_controller.rb +1 -1
- data/app/controllers/api/v2/foreman_datacenter/power_outlets_controller.rb +35 -35
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/comment.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_port.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_port_template.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_server_port.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_server_port_template.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_bay.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_bay_template.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_interface.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_interface_connection.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_module.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_role.rb +1 -1
- data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_type.rb +1 -1
- data/app/controllers/foreman_datacenter/application_controller.rb +0 -2
- data/app/controllers/foreman_datacenter/console_ports_controller.rb +4 -2
- data/app/controllers/foreman_datacenter/console_server_ports_controller.rb +10 -5
- data/app/controllers/foreman_datacenter/device_bays_controller.rb +10 -5
- data/app/controllers/foreman_datacenter/device_interface_connections_controller.rb +4 -7
- data/app/controllers/foreman_datacenter/device_interfaces_controller.rb +6 -3
- data/app/controllers/foreman_datacenter/device_modules_controller.rb +7 -3
- data/app/controllers/foreman_datacenter/device_types_controller.rb +2 -1
- data/app/controllers/foreman_datacenter/devices_controller.rb +25 -8
- data/app/controllers/foreman_datacenter/management_devices_controller.rb +6 -3
- data/app/controllers/foreman_datacenter/power_outlets_controller.rb +10 -5
- data/app/controllers/foreman_datacenter/power_ports_controller.rb +10 -5
- data/app/controllers/foreman_datacenter/rack_groups_controller.rb +1 -6
- data/app/controllers/foreman_datacenter/sites_controller.rb +1 -7
- data/app/models/foreman_datacenter/device.rb +0 -1
- data/app/models/foreman_datacenter/device_interface_connection.rb +2 -2
- data/app/models/foreman_datacenter/site.rb +0 -1
- data/app/views/foreman_datacenter/console_ports/index.html.erb +5 -27
- data/app/views/foreman_datacenter/device_interface_connections/index.html.erb +3 -23
- data/app/views/foreman_datacenter/device_roles/index.html.erb +1 -1
- data/app/views/foreman_datacenter/device_roles/show.html.erb +1 -1
- data/app/views/foreman_datacenter/device_types/index.html.erb +1 -1
- data/app/views/foreman_datacenter/device_types/show.html.erb +1 -1
- data/app/views/foreman_datacenter/devices/_interface.html.erb +3 -17
- data/app/views/foreman_datacenter/devices/index.html.erb +1 -1
- data/app/views/foreman_datacenter/devices/show.html.erb +1 -4
- data/app/views/foreman_datacenter/manufacturers/index.html.erb +1 -1
- data/app/views/foreman_datacenter/manufacturers/show.html.erb +1 -1
- data/app/views/foreman_datacenter/platforms/index.html.erb +1 -1
- data/app/views/foreman_datacenter/platforms/show.html.erb +8 -8
- data/app/views/foreman_datacenter/rack_groups/show.html.erb +1 -4
- data/app/views/foreman_datacenter/rack_groups/welcome.html.erb +0 -2
- data/app/views/foreman_datacenter/racks/_device_position.html.erb +3 -21
- data/app/views/foreman_datacenter/racks/_device_position.html.erb.back +28 -0
- data/app/views/foreman_datacenter/racks/_unpositioned_devices.html.erb +1 -1
- data/app/views/foreman_datacenter/racks/welcome.html.erb +0 -2
- data/app/views/foreman_datacenter/sites/show.html.erb +1 -4
- data/config/routes.rb +0 -2
- data/lib/foreman_datacenter/engine.rb +2 -2
- data/lib/foreman_datacenter/version.rb +1 -1
- metadata +4 -8
- data/app/assets/stylesheets/foreman_datacenter/horizontal-scroll.css +0 -9
- data/app/controllers/concerns/foreman_datacenter/controller/racks.rb +0 -10
- data/app/views/foreman_datacenter/rack_groups/racks.html.erb +0 -18
- data/app/views/foreman_datacenter/racks/_dp.html.erb +0 -46
- data/app/views/foreman_datacenter/sites/racks.html.erb +0 -36
@@ -3,10 +3,10 @@ module ForemanDatacenter
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
include ForemanDatacenter::Controller::Parameters::DeviceInterfaceConnection
|
5
5
|
|
6
|
-
before_action :find_resource, only: [:destroy, :planned, :connected
|
6
|
+
before_action :find_resource, only: [:destroy, :planned, :connected]
|
7
7
|
|
8
8
|
def index
|
9
|
-
@device_interface_connections = resource_base_search_and_page.includes(second_interface
|
9
|
+
@device_interface_connections = resource_base_search_and_page.includes(:second_interface, first_interface: [:device])
|
10
10
|
end
|
11
11
|
|
12
12
|
def new
|
@@ -15,16 +15,13 @@ module ForemanDatacenter
|
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
|
-
def edit
|
19
|
-
@device = @device_interface_connection.first_device
|
20
|
-
end
|
21
|
-
|
22
18
|
def create
|
23
19
|
@device_interface_connection = ForemanDatacenter::DeviceInterfaceConnection.new(device_interface_connection_params.merge(interface_a: params[:device_interface_id]))
|
24
20
|
@device_interface_connection.first_interface = get_device_interface
|
25
21
|
|
26
22
|
if @device_interface_connection.save
|
27
|
-
|
23
|
+
redirect_to device_url(@device_interface_connection.first_interface.device),
|
24
|
+
notice: 'Connection was successfully created.'
|
28
25
|
else
|
29
26
|
process_error object: @device_interface_connection
|
30
27
|
end
|
@@ -28,7 +28,8 @@ module ForemanDatacenter
|
|
28
28
|
@device_interface = ForemanDatacenter::DeviceInterface.new(device_interface_params.merge(device_id: params[:device_id]))
|
29
29
|
|
30
30
|
if @device_interface.save
|
31
|
-
|
31
|
+
redirect_to device_url(id: @device_interface.device_id),
|
32
|
+
notice: 'Device interface was successfully created.'
|
32
33
|
else
|
33
34
|
process_error object: @device_interface
|
34
35
|
end
|
@@ -36,7 +37,8 @@ module ForemanDatacenter
|
|
36
37
|
|
37
38
|
def update
|
38
39
|
if @device_interface.update(device_interface_params)
|
39
|
-
|
40
|
+
redirect_to device_url(id: @device_interface.device_id),
|
41
|
+
notice: 'Device interface was successfully updated.'
|
40
42
|
else
|
41
43
|
process_error object: @device_interface
|
42
44
|
end
|
@@ -44,7 +46,8 @@ module ForemanDatacenter
|
|
44
46
|
|
45
47
|
def destroy
|
46
48
|
if @device_interface.destroy
|
47
|
-
|
49
|
+
redirect_to device_url(id: @device_interface.device_id),
|
50
|
+
notice: 'Device interface was successfully destroyed.'
|
48
51
|
else
|
49
52
|
process_error object: @device_interface
|
50
53
|
end
|
@@ -15,8 +15,10 @@ module ForemanDatacenter
|
|
15
15
|
|
16
16
|
def create
|
17
17
|
@device_module = ForemanDatacenter::DeviceModule.new(device_module_params.merge(device_id: params[:device_id]))
|
18
|
+
|
18
19
|
if @device_module.save
|
19
|
-
|
20
|
+
redirect_to inventory_device_url(id: @device_module.device_id),
|
21
|
+
notice: 'Device module was successfully created.'
|
20
22
|
else
|
21
23
|
process_error object: @device_module
|
22
24
|
end
|
@@ -24,7 +26,8 @@ module ForemanDatacenter
|
|
24
26
|
|
25
27
|
def update
|
26
28
|
if @device_module.update(device_module_params)
|
27
|
-
|
29
|
+
redirect_to inventory_device_url(id: @device_module.device_id),
|
30
|
+
notice: 'Device module was successfully updated.'
|
28
31
|
else
|
29
32
|
process_error object: @device_module
|
30
33
|
end
|
@@ -32,7 +35,8 @@ module ForemanDatacenter
|
|
32
35
|
|
33
36
|
def destroy
|
34
37
|
if @device_module.destroy
|
35
|
-
|
38
|
+
redirect_to inventory_device_url(id: @device_module.device_id),
|
39
|
+
notice: 'Device module was successfully destroyed.'
|
36
40
|
else
|
37
41
|
process_error object: @device_module
|
38
42
|
end
|
@@ -33,7 +33,8 @@ module ForemanDatacenter
|
|
33
33
|
|
34
34
|
def update
|
35
35
|
if @device_type.update(device_type_params)
|
36
|
-
|
36
|
+
redirect_to device_type_url(@device_type),
|
37
|
+
notice: 'Device type was successfully updated'
|
37
38
|
else
|
38
39
|
process_error object: @device_type
|
39
40
|
end
|
@@ -17,8 +17,11 @@ module ForemanDatacenter
|
|
17
17
|
|
18
18
|
def show
|
19
19
|
@device = ForemanDatacenter::Device.includes(
|
20
|
-
power_ports: [:power_outlet],
|
21
|
-
|
20
|
+
power_ports: [:power_outlet, :device],
|
21
|
+
power_outlets: [:device, :power_port],
|
22
|
+
console_ports: [:console_server_port, :device],
|
23
|
+
console_server_ports: [:console_port, :device],
|
24
|
+
device_bays: [:installed_device],
|
22
25
|
comments: [:user]
|
23
26
|
).find(params[:id])
|
24
27
|
@comments = @device.comments
|
@@ -60,10 +63,21 @@ module ForemanDatacenter
|
|
60
63
|
end
|
61
64
|
|
62
65
|
def destroy
|
63
|
-
|
64
|
-
|
66
|
+
unless params['object_only']
|
67
|
+
if @device.destroy
|
68
|
+
process_success success_redirect: "/datacenter/devices"
|
69
|
+
else
|
70
|
+
process_error object: @device
|
71
|
+
end
|
65
72
|
else
|
66
|
-
|
73
|
+
if @device.host
|
74
|
+
@device.host.destroy
|
75
|
+
new_device_name = "Unassigned device (former: #{@device.name})"
|
76
|
+
@device.update(name: new_device_name)
|
77
|
+
process_success success_redirect: '/datacenter/devices', success_msg: 'Associated host deleted'
|
78
|
+
else
|
79
|
+
process_error success_redirect: '/datacenter/devices', error_msg: 'Associated host not found'
|
80
|
+
end
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
@@ -96,7 +110,7 @@ module ForemanDatacenter
|
|
96
110
|
@device.non_management_interfaces.
|
97
111
|
where(id: params[:interfaces]).
|
98
112
|
destroy_all
|
99
|
-
|
113
|
+
redirect_to device_url(@device)
|
100
114
|
end
|
101
115
|
|
102
116
|
def qr_code
|
@@ -107,9 +121,11 @@ module ForemanDatacenter
|
|
107
121
|
|
108
122
|
def sync_interfaces_with_host
|
109
123
|
if @device.sync_interfaces_with_host
|
110
|
-
|
124
|
+
notice("Device successfully synchronized.")
|
125
|
+
redirect_to device_url(@device)
|
111
126
|
else
|
112
|
-
|
127
|
+
error("Unsuccessful synchronization.")
|
128
|
+
redirect_to device_url(@device)
|
113
129
|
end
|
114
130
|
end
|
115
131
|
|
@@ -138,3 +154,4 @@ module ForemanDatacenter
|
|
138
154
|
end
|
139
155
|
end
|
140
156
|
end
|
157
|
+
|
@@ -16,7 +16,8 @@ module ForemanDatacenter
|
|
16
16
|
@management_device = ManagementDevice.new(management_device_params.merge(device_id: params[:device_id]))
|
17
17
|
|
18
18
|
if @management_device.save
|
19
|
-
|
19
|
+
redirect_to device_url(@management_device.device),
|
20
|
+
notice: 'New management device was successfully created'
|
20
21
|
else
|
21
22
|
process_error object: @management_device
|
22
23
|
end
|
@@ -24,7 +25,8 @@ module ForemanDatacenter
|
|
24
25
|
|
25
26
|
def update
|
26
27
|
if @management_device.update(management_device_params)
|
27
|
-
|
28
|
+
redirect_to device_url(@management_device.device),
|
29
|
+
notice: 'Management device was successfully updated'
|
28
30
|
else
|
29
31
|
process_error object: @management_device
|
30
32
|
end
|
@@ -32,7 +34,8 @@ module ForemanDatacenter
|
|
32
34
|
|
33
35
|
def destroy
|
34
36
|
if @management_device.destroy
|
35
|
-
|
37
|
+
redirect_to device_url(@management_device.device),
|
38
|
+
notice: 'Management device was successfully destroyed'
|
36
39
|
else
|
37
40
|
process_error object: @management_device
|
38
41
|
end
|
@@ -18,7 +18,8 @@ module ForemanDatacenter
|
|
18
18
|
@power_outlet = PowerOutlet.new(power_outlet_params.merge(device_id: params[:device_id]))
|
19
19
|
|
20
20
|
if @power_outlet.save
|
21
|
-
|
21
|
+
redirect_to device_url(id: @power_outlet.device_id),
|
22
|
+
notice: 'Power outlet was successfully created.'
|
22
23
|
else
|
23
24
|
process_error object: @power_outlet
|
24
25
|
end
|
@@ -26,7 +27,8 @@ module ForemanDatacenter
|
|
26
27
|
|
27
28
|
def update
|
28
29
|
if @power_outlet.update(power_outlet_params)
|
29
|
-
|
30
|
+
redirect_to device_url(id: @power_outlet.device_id),
|
31
|
+
notice: 'Power outlet was successfully updated.'
|
30
32
|
else
|
31
33
|
process_error object: @power_outlet
|
32
34
|
end
|
@@ -34,7 +36,8 @@ module ForemanDatacenter
|
|
34
36
|
|
35
37
|
def destroy
|
36
38
|
if @power_outlet.destroy
|
37
|
-
|
39
|
+
redirect_to device_url(id: @power_outlet.device_id),
|
40
|
+
notice: 'Power outlet was successfully destroyed.'
|
38
41
|
else
|
39
42
|
process_error object: @power_outlet
|
40
43
|
end
|
@@ -49,12 +52,14 @@ module ForemanDatacenter
|
|
49
52
|
@power_outlet,
|
50
53
|
params[:power_port][:connection_status]
|
51
54
|
)
|
52
|
-
|
55
|
+
redirect_to device_url(id: @power_outlet.device_id),
|
56
|
+
notice: 'Power outlet was successfully connected.'
|
53
57
|
end
|
54
58
|
|
55
59
|
def disconnect
|
56
60
|
@power_outlet.power_port.disconnect
|
57
|
-
|
61
|
+
redirect_to device_url(id: @power_outlet.device_id),
|
62
|
+
notice: 'Power outlet was successfully disconnected.'
|
58
63
|
end
|
59
64
|
|
60
65
|
def for_device
|
@@ -24,7 +24,8 @@ module ForemanDatacenter
|
|
24
24
|
@power_port = ForemanDatacenter::PowerPort.new(power_port_params.merge(device_id: params[:device_id]))
|
25
25
|
|
26
26
|
if @power_port.save
|
27
|
-
|
27
|
+
redirect_to device_url(id: @power_port.device_id),
|
28
|
+
notice: 'Power port was successfully created.'
|
28
29
|
else
|
29
30
|
process_error object: @power_port
|
30
31
|
end
|
@@ -32,7 +33,8 @@ module ForemanDatacenter
|
|
32
33
|
|
33
34
|
def update
|
34
35
|
if @power_port.update(power_port_params)
|
35
|
-
|
36
|
+
redirect_to device_url(id: @power_port.device_id),
|
37
|
+
notice: 'Power port was successfully updated.'
|
36
38
|
else
|
37
39
|
process_error object: @power_port
|
38
40
|
end
|
@@ -40,7 +42,8 @@ module ForemanDatacenter
|
|
40
42
|
|
41
43
|
def destroy
|
42
44
|
if @power_port.destroy
|
43
|
-
|
45
|
+
redirect_to device_url(id: @power_port.device_id),
|
46
|
+
notice: 'Power port was successfully destroyed.'
|
44
47
|
else
|
45
48
|
process_error object: @power_port
|
46
49
|
end
|
@@ -70,12 +73,14 @@ module ForemanDatacenter
|
|
70
73
|
power_outlet,
|
71
74
|
params[:power_port][:connection_status]
|
72
75
|
)
|
73
|
-
|
76
|
+
redirect_to device_url(id: @power_port.device_id),
|
77
|
+
notice: 'Power port was successfully connected.'
|
74
78
|
end
|
75
79
|
|
76
80
|
def disconnect
|
77
81
|
@power_port.disconnect
|
78
|
-
|
82
|
+
redirect_to device_url(id: @power_port.device_id),
|
83
|
+
notice: 'Power port was successfully disconnected.'
|
79
84
|
end
|
80
85
|
end
|
81
86
|
end
|
@@ -3,7 +3,7 @@ module ForemanDatacenter
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
include ForemanDatacenter::Controller::Parameters::RackGroup
|
5
5
|
|
6
|
-
before_action :find_resource, only: [:show, :edit, :update, :destroy, :move
|
6
|
+
before_action :find_resource, only: [:show, :edit, :update, :destroy, :move]
|
7
7
|
|
8
8
|
def index
|
9
9
|
@rack_groups = resource_base_search_and_page.includes(:site, :racks)
|
@@ -58,11 +58,6 @@ module ForemanDatacenter
|
|
58
58
|
process_error object: @rack_group, error_msg: 'Current Rack Group haven\'t any Racks.' if @racks.empty?
|
59
59
|
end
|
60
60
|
|
61
|
-
def racks
|
62
|
-
@racks = @rack_group.racks.includes(devices: [:device_role])
|
63
|
-
process_error redirect: rack_groups_path(@rack_group), error_msg: 'Current Rack Group haven\'t any Racks.' if @racks.empty?
|
64
|
-
end
|
65
|
-
|
66
61
|
def update_associated_objects
|
67
62
|
begin
|
68
63
|
@rack_group = ForemanDatacenter::RackGroup.find(request.env['HTTP_REFERER'].split('/')[-2])
|
@@ -3,7 +3,7 @@ module ForemanDatacenter
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
include ForemanDatacenter::Controller::Parameters::Site
|
5
5
|
|
6
|
-
before_action :find_resource, only: [:show, :edit, :update, :destroy, :move
|
6
|
+
before_action :find_resource, only: [:show, :edit, :update, :destroy, :move]
|
7
7
|
|
8
8
|
def index
|
9
9
|
@sites = resource_base_search_and_page
|
@@ -50,12 +50,6 @@ module ForemanDatacenter
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
def racks
|
54
|
-
@rack_groups = @site.rack_groups.includes(racks: [devices: [:device_role]])
|
55
|
-
@ungrouped_racks = @site.racks.where(rack_group_id: nil)#.includes(:device_role)
|
56
|
-
process_error redirect: site_path(@site), error_msg: 'Current site haven\'t any Racks.' if (@rack_groups.empty? && @ungrouped_racks.empty?)
|
57
|
-
end
|
58
|
-
|
59
53
|
def move
|
60
54
|
@sites = resource_base_search_and_page
|
61
55
|
@rack_groups = @site.rack_groups
|
@@ -51,7 +51,6 @@ module ForemanDatacenter
|
|
51
51
|
scoped_search in: :device_role, on: :name, complete_value: true, rename: :role
|
52
52
|
scoped_search in: :device_type, on: :model, complete_value: true, rename: :type
|
53
53
|
scoped_search in: :platform, on: :name, complete_value: true, rename: :platform
|
54
|
-
scoped_search in: :comments, on: :content, complete_value: true, rename: :comments
|
55
54
|
|
56
55
|
delegate :site_id, to: :rack, allow_nil: true
|
57
56
|
delegate :manufacturer_id, :is_console_server, :is_pdu, :is_network_device,
|
@@ -23,7 +23,7 @@ module ForemanDatacenter
|
|
23
23
|
scoped_search in: :second_interface, on: :name, complete_value: true, rename: :interface_b
|
24
24
|
|
25
25
|
def first_device
|
26
|
-
|
26
|
+
first_interface.device
|
27
27
|
end
|
28
28
|
|
29
29
|
def first_rack
|
@@ -35,7 +35,7 @@ module ForemanDatacenter
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def second_device
|
38
|
-
|
38
|
+
first_interface.device
|
39
39
|
end
|
40
40
|
|
41
41
|
def second_rack
|
@@ -20,7 +20,6 @@ module ForemanDatacenter
|
|
20
20
|
scoped_search on: :shipping_address, complete_value: true, default_order: true
|
21
21
|
scoped_search on: :created_at, complete_value: true, default_order: true
|
22
22
|
scoped_search on: :updated_at, complete_value: true, default_order: true
|
23
|
-
scoped_search on: :comments, complete_value: true, default_order: true
|
24
23
|
|
25
24
|
def racks_count
|
26
25
|
@racks_count ||= racks.count
|
@@ -14,34 +14,12 @@
|
|
14
14
|
<% for port in @console_ports %>
|
15
15
|
<tr>
|
16
16
|
<td>
|
17
|
-
|
18
|
-
|
19
|
-
device_path(port.console_server_port.device) %>
|
20
|
-
<% else %>
|
21
|
-
<%= muted_text("Device not found", "span") %>
|
22
|
-
<% end %>
|
23
|
-
</td>
|
24
|
-
<td>
|
25
|
-
<% if port.console_server_port %>
|
26
|
-
<%= h port.console_server_port.name %>
|
27
|
-
<% else %>
|
28
|
-
<%= muted_text("Port not found", "span") %>
|
29
|
-
<% end %>
|
30
|
-
</td>
|
31
|
-
<td>
|
32
|
-
<% if port.device %>
|
33
|
-
<%= link_to port.device.name, device_path(port.device) %>
|
34
|
-
<% else %>
|
35
|
-
<%= muted_text("Device not found", "span") %>
|
36
|
-
<% end %>
|
37
|
-
</td>
|
38
|
-
<td>
|
39
|
-
<% if port %>
|
40
|
-
<%= h port.name %>
|
41
|
-
<% else %>
|
42
|
-
<%= muted_text("Port not found", "span") %>
|
43
|
-
<% end %>
|
17
|
+
<%= link_to port.console_server_port.device.name,
|
18
|
+
device_path(port.console_server_port.device) %>
|
44
19
|
</td>
|
20
|
+
<td><%= h port.console_server_port.name %></td>
|
21
|
+
<td><%= link_to port.device.name, device_path(port.device) %></td>
|
22
|
+
<td><%= h port.name %></td>
|
45
23
|
</tr>
|
46
24
|
<% end %>
|
47
25
|
</tbody>
|
@@ -15,35 +15,15 @@
|
|
15
15
|
<% for connection in @device_interface_connections %>
|
16
16
|
<tr>
|
17
17
|
<td>
|
18
|
-
|
19
|
-
<%= link_to connection.first_device.name,
|
18
|
+
<%= link_to connection.first_device.name,
|
20
19
|
device_path(connection.first_device) %>
|
21
|
-
<% else %>
|
22
|
-
<%= muted_text("Device not found", "span") %>
|
23
|
-
<% end %>
|
24
20
|
</td>
|
21
|
+
<td><%= h connection.first_interface.name %></td>
|
25
22
|
<td>
|
26
|
-
<% if connection.first_device %>
|
27
|
-
<%= h connection.first_interface.name %>
|
28
|
-
<% else %>
|
29
|
-
<%= muted_text("Interface not found", "span") %>
|
30
|
-
<% end %>
|
31
|
-
</td>
|
32
|
-
<td>
|
33
|
-
<% if connection.second_device %>
|
34
23
|
<%= link_to connection.second_device.name,
|
35
24
|
device_path(connection.second_device) %>
|
36
|
-
<% else %>
|
37
|
-
<%= muted_text("Device not found", "span") %>
|
38
|
-
<% end %>
|
39
|
-
</td>
|
40
|
-
<td>
|
41
|
-
<% if connection.second_device %>
|
42
|
-
<%= h connection.second_interface.name %>
|
43
|
-
<% else %>
|
44
|
-
<%= muted_text("Interface not found", "span") %>
|
45
|
-
<% end %>
|
46
25
|
</td>
|
26
|
+
<td><%= h connection.second_interface.name %></td>
|
47
27
|
</tr>
|
48
28
|
<% end %>
|
49
29
|
</tbody>
|