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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_datacenter/modal.js +9 -22
  3. data/app/assets/stylesheets/foreman_datacenter/datacenter.css +0 -3
  4. data/app/assets/stylesheets/foreman_datacenter/device_roles.css +0 -32
  5. data/app/controllers/api/v2/foreman_datacenter/device_interfaces_controller.rb +1 -1
  6. data/app/controllers/api/v2/foreman_datacenter/devices_controller.rb +1 -1
  7. data/app/controllers/api/v2/foreman_datacenter/management_devices_controller.rb +1 -1
  8. data/app/controllers/api/v2/foreman_datacenter/power_outlets_controller.rb +35 -35
  9. data/app/controllers/concerns/foreman_datacenter/controller/parameters/comment.rb +1 -1
  10. data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_port.rb +1 -1
  11. data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_port_template.rb +1 -1
  12. data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_server_port.rb +1 -1
  13. data/app/controllers/concerns/foreman_datacenter/controller/parameters/console_server_port_template.rb +1 -1
  14. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_bay.rb +1 -1
  15. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_bay_template.rb +1 -1
  16. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_interface.rb +1 -1
  17. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_interface_connection.rb +1 -1
  18. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_module.rb +1 -1
  19. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_role.rb +1 -1
  20. data/app/controllers/concerns/foreman_datacenter/controller/parameters/device_type.rb +1 -1
  21. data/app/controllers/foreman_datacenter/application_controller.rb +0 -2
  22. data/app/controllers/foreman_datacenter/console_ports_controller.rb +4 -2
  23. data/app/controllers/foreman_datacenter/console_server_ports_controller.rb +10 -5
  24. data/app/controllers/foreman_datacenter/device_bays_controller.rb +10 -5
  25. data/app/controllers/foreman_datacenter/device_interface_connections_controller.rb +4 -7
  26. data/app/controllers/foreman_datacenter/device_interfaces_controller.rb +6 -3
  27. data/app/controllers/foreman_datacenter/device_modules_controller.rb +7 -3
  28. data/app/controllers/foreman_datacenter/device_types_controller.rb +2 -1
  29. data/app/controllers/foreman_datacenter/devices_controller.rb +25 -8
  30. data/app/controllers/foreman_datacenter/management_devices_controller.rb +6 -3
  31. data/app/controllers/foreman_datacenter/power_outlets_controller.rb +10 -5
  32. data/app/controllers/foreman_datacenter/power_ports_controller.rb +10 -5
  33. data/app/controllers/foreman_datacenter/rack_groups_controller.rb +1 -6
  34. data/app/controllers/foreman_datacenter/sites_controller.rb +1 -7
  35. data/app/models/foreman_datacenter/device.rb +0 -1
  36. data/app/models/foreman_datacenter/device_interface_connection.rb +2 -2
  37. data/app/models/foreman_datacenter/site.rb +0 -1
  38. data/app/views/foreman_datacenter/console_ports/index.html.erb +5 -27
  39. data/app/views/foreman_datacenter/device_interface_connections/index.html.erb +3 -23
  40. data/app/views/foreman_datacenter/device_roles/index.html.erb +1 -1
  41. data/app/views/foreman_datacenter/device_roles/show.html.erb +1 -1
  42. data/app/views/foreman_datacenter/device_types/index.html.erb +1 -1
  43. data/app/views/foreman_datacenter/device_types/show.html.erb +1 -1
  44. data/app/views/foreman_datacenter/devices/_interface.html.erb +3 -17
  45. data/app/views/foreman_datacenter/devices/index.html.erb +1 -1
  46. data/app/views/foreman_datacenter/devices/show.html.erb +1 -4
  47. data/app/views/foreman_datacenter/manufacturers/index.html.erb +1 -1
  48. data/app/views/foreman_datacenter/manufacturers/show.html.erb +1 -1
  49. data/app/views/foreman_datacenter/platforms/index.html.erb +1 -1
  50. data/app/views/foreman_datacenter/platforms/show.html.erb +8 -8
  51. data/app/views/foreman_datacenter/rack_groups/show.html.erb +1 -4
  52. data/app/views/foreman_datacenter/rack_groups/welcome.html.erb +0 -2
  53. data/app/views/foreman_datacenter/racks/_device_position.html.erb +3 -21
  54. data/app/views/foreman_datacenter/racks/_device_position.html.erb.back +28 -0
  55. data/app/views/foreman_datacenter/racks/_unpositioned_devices.html.erb +1 -1
  56. data/app/views/foreman_datacenter/racks/welcome.html.erb +0 -2
  57. data/app/views/foreman_datacenter/sites/show.html.erb +1 -4
  58. data/config/routes.rb +0 -2
  59. data/lib/foreman_datacenter/engine.rb +2 -2
  60. data/lib/foreman_datacenter/version.rb +1 -1
  61. metadata +4 -8
  62. data/app/assets/stylesheets/foreman_datacenter/horizontal-scroll.css +0 -9
  63. data/app/controllers/concerns/foreman_datacenter/controller/racks.rb +0 -10
  64. data/app/views/foreman_datacenter/rack_groups/racks.html.erb +0 -18
  65. data/app/views/foreman_datacenter/racks/_dp.html.erb +0 -46
  66. 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, :edit]
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: [:device], first_interface: [:device])
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
- process_success(success_msg: "Connection was successfully created.", success_redirect: device_url(id: @device_interface_connection.first_interface.device))
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
- process_success(success_msg: "Device interface was successfully created.", success_redirect: device_url(id: @device_interface.device.id))
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
- process_success(success_msg: "Device interface was successfully updated.", success_redirect: device_url(id: @device_interface.device.id))
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
- process_success(success_msg: "Device interface was successfully destroyed.", success_redirect: device_url(id: @device_interface.device.id))
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
- process_success(success_msg: "Device module was successfully created.", success_redirect: inventory_device_url(id: @device_module.device_id))
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
- process_success(success_msg: "Device module was successfully updated.", success_redirect: inventory_device_url(id: @device_module.device_id))
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
- process_success(success_msg: "Device module was successfully destroyed.", success_redirect: inventory_device_url(id: @device_module.device_id))
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
- process_success object: @device_type
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
- console_ports: [:console_server_port],
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
- if @device.destroy
64
- process_success success_redirect: "/datacenter/devices"
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
- process_error object: @device
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
- process_success(success_msg: "Selected interfaces were successfully destroyed.", success_redirect: device_url(id: @device))
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
- process_success(success_msg: "Device successfully synchronized.", success_redirect: device_url(id: @device))
124
+ notice("Device successfully synchronized.")
125
+ redirect_to device_url(@device)
111
126
  else
112
- process_error(error_msg: "Unsuccessfully synchronization.", redirect: device_url(@device))
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
- process_success(success_redirect: device_url(id: @management_device.device))
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
- process_success(success_redirect: device_url(id: @management_device.device))
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
- process_success(success_redirect: device_url(id: @management_device.device))
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
- process_success(success_redirect: device_url(id: @power_outlet.device_id))
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
- process_success(success_redirect: device_url(id: @power_outlet.device_id))
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
- process_success(success_redirect: device_url(id: @power_outlet.device_id))
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
- process_success(success_msg: "Power outlet was successfully connected.", success_redirect: device_url(id: @power_outlet.device_id))
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
- process_success(success_msg: "Power outlet was successfully disconnected.", success_redirect: device_url(id: @power_outlet.device_id))
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
- process_success(success_redirect: device_url(id: @power_port.device_id))
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
- process_success(success_redirect: device_url(id: @power_port.device_id))
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
- process_success(success_redirect: device_url(id: @power_port.device_id))
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
- process_success(success_msg: "Power port was successfully connected.", success_redirect: device_url(id: @power_port.device_id))
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
- process_success(success_msg: "Power port was successfully disconnected.", success_redirect: device_url(id: @power_port.device_id))
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, :racks]
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, :racks]
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
- self.try(:first_interface).try(:device)
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
- self.try(:second_interface).try(:device)
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
- <% if port.console_server_port %>
18
- <%= link_to port.console_server_port.device.name,
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
- <% if connection.first_device %>
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>