From 10e0773868ed85a6a3577a7c59af650f8e595cca Mon Sep 17 00:00:00 2001 From: skovic Date: Mon, 12 Feb 2018 14:32:48 -0500 Subject: [PATCH 01/10] Change the way network device details are displayed --- app/controllers/application_controller.rb | 1 + app/controllers/guest_device_controller.rb | 38 ++++++++++++ app/controllers/physical_server_controller.rb | 2 +- app/helpers/application_helper.rb | 3 + .../toolbar/guest_device_center.rb | 2 + .../toolbar/guest_devices_center.rb | 2 + .../application_helper/toolbar_chooser.rb | 3 +- .../physical_server_helper/textual_summary.rb | 43 +++----------- app/views/guest_device/show.html.haml | 7 +++ app/views/guest_device/show_list.html.haml | 2 + config/routes.rb | 16 +++++ product/views/GuestDevice.yaml | 59 +++++++++++++++++++ 12 files changed, 142 insertions(+), 36 deletions(-) create mode 100644 app/controllers/guest_device_controller.rb create mode 100644 app/helpers/application_helper/toolbar/guest_device_center.rb create mode 100644 app/helpers/application_helper/toolbar/guest_devices_center.rb create mode 100644 app/views/guest_device/show.html.haml create mode 100644 app/views/guest_device/show_list.html.haml create mode 100644 product/views/GuestDevice.yaml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0b0fd4de2a8..467b5da8d12 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -137,6 +137,7 @@ def pp_choices :emscluster => "grid", :emscontainer => "grid", :filesystem => "list", + :guestdevice => "list", :flavor => "list", :host => "grid", :job => "list", diff --git a/app/controllers/guest_device_controller.rb b/app/controllers/guest_device_controller.rb new file mode 100644 index 00000000000..d32b13b9db9 --- /dev/null +++ b/app/controllers/guest_device_controller.rb @@ -0,0 +1,38 @@ +class GuestDeviceController < ApplicationController + include Mixins::GenericListMixin + include Mixins::GenericShowMixin + include Mixins::GenericSessionMixin + include Mixins::MoreShowActions + + before_action :check_privileges + before_action :session_data + after_action :cleanup_action + after_action :set_session_data + + def self.model + @model ||= "GuestDevice".safe_constantize + end + + def title + _('Guest Devices') + end + + def model + self.class.model + end + + def self.table_name + @table_name ||= "guest_devices" + end + + def session_data + @title = _("Guest Devices") + @layout = "guest_device" + @lastaction = session[:guest_device_lastaction] + end + + def set_session_data + session[:layout] = @layout + session[:guest_device_lastaction] = @lastaction + end +end diff --git a/app/controllers/physical_server_controller.rb b/app/controllers/physical_server_controller.rb index 7728862e141..48233bead07 100644 --- a/app/controllers/physical_server_controller.rb +++ b/app/controllers/physical_server_controller.rb @@ -36,7 +36,7 @@ def show_list def textual_group_list [ - %i(properties networks relationships power_management assets firmware_details network_adapters smart_management), + %i(properties networks relationships power_management assets firmware_details smart_management), ] end helper_method(:textual_group_list) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d27a51f91fb..d64bde0eeec 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1342,6 +1342,7 @@ def pdf_page_size_style floating_ip generic_object generic_object_definition + guest_device host host_aggregate load_balancer @@ -1442,6 +1443,7 @@ def render_listnav_filename flavor floating_ip generic_object_definition + guest_device host load_balancer middleware_deployment @@ -1510,6 +1512,7 @@ def render_listnav_filename flavor floating_ip generic_object_definition + guest_device host host_aggregate load_balancer diff --git a/app/helpers/application_helper/toolbar/guest_device_center.rb b/app/helpers/application_helper/toolbar/guest_device_center.rb new file mode 100644 index 00000000000..958916be8d3 --- /dev/null +++ b/app/helpers/application_helper/toolbar/guest_device_center.rb @@ -0,0 +1,2 @@ +class ApplicationHelper::Toolbar::GuestDeviceCenter < ApplicationHelper::Toolbar::Basic +end diff --git a/app/helpers/application_helper/toolbar/guest_devices_center.rb b/app/helpers/application_helper/toolbar/guest_devices_center.rb new file mode 100644 index 00000000000..98f56cb672f --- /dev/null +++ b/app/helpers/application_helper/toolbar/guest_devices_center.rb @@ -0,0 +1,2 @@ +class ApplicationHelper::Toolbar::GuestDevicesCenter < ApplicationHelper::Toolbar::Basic +end diff --git a/app/helpers/application_helper/toolbar_chooser.rb b/app/helpers/application_helper/toolbar_chooser.rb index d17bf61fd22..fc14c48eab9 100644 --- a/app/helpers/application_helper/toolbar_chooser.rb +++ b/app/helpers/application_helper/toolbar_chooser.rb @@ -441,7 +441,7 @@ def center_toolbar_filename_classic load_balancers network_ports network_routers orchestration_stacks resource_pools security_groups storages middleware_deployments middleware_servers) - to_display_center = %w(stack_orchestration_template topology cloud_object_store_objects generic_objects physical_servers) + to_display_center = %w(stack_orchestration_template topology cloud_object_store_objects generic_objects physical_servers guest_devices) performance_layouts = %w(vm host ems_container) if @lastaction == 'show' && (@view || @display != 'main') && !@layout.starts_with?("miq_request") if @display == "vms" || @display == "all_vms" @@ -530,6 +530,7 @@ def center_toolbar_filename_classic ems_object_storage timeline usage + guest_device generic_object_definition).include?(@layout) if ["show_list"].include?(@lastaction) return "#{@layout.pluralize}_center_tb" diff --git a/app/helpers/physical_server_helper/textual_summary.rb b/app/helpers/physical_server_helper/textual_summary.rb index 29ee4fde1b3..9eff75bb759 100644 --- a/app/helpers/physical_server_helper/textual_summary.rb +++ b/app/helpers/physical_server_helper/textual_summary.rb @@ -2,7 +2,7 @@ module PhysicalServerHelper::TextualSummary def textual_group_properties TextualGroup.new( _("Properties"), - %i(name model product_name manufacturer machine_type serial_number ems_ref capacity memory cores health_state loc_led_state) + %i(name model product_name manufacturer machine_type serial_number ems_ref capacity memory cores network_devices health_state loc_led_state) ) end @@ -42,14 +42,6 @@ def textual_group_firmware_details ) end - def textual_group_network_adapters - TextualCustom.new( - _("Network Devices"), - "textual_network_adapter_table", - %i(network_adapter) - ) - end - def textual_group_smart_management TextualTags.new(_("Smart Management"), %i(tags)) end @@ -163,6 +155,14 @@ def textual_health_state {:label => _("Health State"), :value => @record.health_state} end + def textual_network_devices + device = {:label => _("Network Devices"), :value => @record.hardware.nics.count, :icon => "ff ff-network-card"} + unless @record.hardware.nics.nil? + device.update(:link => url_for(:controller => 'guest_device', :action => 'show_list')) + end + device + end + def textual_fw_details fw_details = [] @record.hardware.firmwares.each do |fw| @@ -171,29 +171,4 @@ def textual_fw_details {:value => fw_details} end - - def textual_network_adapter - network_adapters = [] - - @record.hardware.nics.each do |nic| - port_names = [] - mac_addresses = [] - - child_devices = nic.child_devices.sort_by(&:device_name) - - child_devices.each do |child_device| - port_names.push(child_device.device_name) - mac_addresses.push(child_device.address) - end - - network_adapters.push(:location => nic.location, - :adapter_name => nic.device_name, - :manufacturer => nic.manufacturer, - :fru => nic.field_replaceable_unit, - :port_names => port_names, - :mac_addresses => mac_addresses) - end - - {:value => network_adapters} - end end diff --git a/app/views/guest_device/show.html.haml b/app/views/guest_device/show.html.haml new file mode 100644 index 00000000000..28a855240c7 --- /dev/null +++ b/app/views/guest_device/show.html.haml @@ -0,0 +1,7 @@ +#main_div + - if %w(guest_devices).include?(@display) + = render :partial => "layouts/gtl", :locals => {:action_url => "show/#{@record.id}"} + - else + - case @showtype + - when "main" + = render :partial => 'layouts/textual_groups_generic' diff --git a/app/views/guest_device/show_list.html.haml b/app/views/guest_device/show_list.html.haml new file mode 100644 index 00000000000..980f0a4d66c --- /dev/null +++ b/app/views/guest_device/show_list.html.haml @@ -0,0 +1,2 @@ +#main_div += render :partial => 'layouts/gtl' diff --git a/config/routes.rb b/config/routes.rb index c5c62f2da43..35a7875bd9c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1342,6 +1342,22 @@ save_post }, + :guest_device => { + :get => %w( + show_list + show + quick_search + ) + compare_get, + + :post => %w( + button + show_list + ) + + adv_search_post + + exp_post + + save_post + }, + :ems_physical_infra_dashboard => { :get => %w( show diff --git a/product/views/GuestDevice.yaml b/product/views/GuestDevice.yaml new file mode 100644 index 00000000000..a7929194cde --- /dev/null +++ b/product/views/GuestDevice.yaml @@ -0,0 +1,59 @@ +#Report title +title: Guest Devices + +#Menu name +name: Guest Device + + +db: GuestDevice + + +# Columns to fetch from main table +cols: +- device_name +- device_type +- location +- manufacturer +- field_replaceable_unit + + +include: + + +include_for_find: + :ext_management_system: {} + + +col_order: +- device_name +- device_type +- location +- manufacturer +- field_replaceable_unit + +col_formats: + +headers: +- Device Name +- Device Type +- Location +- Manufacturer +- Field Replaceable Unit + + +conditions: + + +order: Ascending + + +sortby: +- device_name + +group: n + + +graph: + + +dims: From 826e5b470f1faf93b184621240b47e298b4f63cc Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 13 Feb 2018 13:47:00 -0500 Subject: [PATCH 02/10] Update GuestDeviceController to only display network devices on the list view --- app/controllers/guest_device_controller.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/guest_device_controller.rb b/app/controllers/guest_device_controller.rb index d32b13b9db9..c8b74d21fb7 100644 --- a/app/controllers/guest_device_controller.rb +++ b/app/controllers/guest_device_controller.rb @@ -35,4 +35,9 @@ def set_session_data session[:layout] = @layout session[:guest_device_lastaction] = @lastaction end + + def show_list + options = {:model => "GuestDevice", :named_scope => [:with_ethernet_type]} + process_show_list(options) + end end From 0ed1f69cb82a5d89f4568ae6de04fa5b50226b82 Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 13 Feb 2018 20:47:19 -0500 Subject: [PATCH 03/10] Create network device summary page --- app/controllers/guest_device_controller.rb | 7 +++ app/helpers/guest_device_helper.rb | 3 ++ .../guest_device_helper/textual_summary.rb | 54 +++++++++++++++++++ .../layouts/listnav/_guest_device.html.haml | 0 4 files changed, 64 insertions(+) create mode 100644 app/helpers/guest_device_helper.rb create mode 100644 app/helpers/guest_device_helper/textual_summary.rb create mode 100644 app/views/layouts/listnav/_guest_device.html.haml diff --git a/app/controllers/guest_device_controller.rb b/app/controllers/guest_device_controller.rb index c8b74d21fb7..6a46c295f61 100644 --- a/app/controllers/guest_device_controller.rb +++ b/app/controllers/guest_device_controller.rb @@ -40,4 +40,11 @@ def show_list options = {:model => "GuestDevice", :named_scope => [:with_ethernet_type]} process_show_list(options) end + + def textual_group_list + [ + %i(properties ports firmware), + ] + end + helper_method(:textual_group_list) end diff --git a/app/helpers/guest_device_helper.rb b/app/helpers/guest_device_helper.rb new file mode 100644 index 00000000000..84d31c94fc2 --- /dev/null +++ b/app/helpers/guest_device_helper.rb @@ -0,0 +1,3 @@ +module GuestDeviceHelper + include_concern 'TextualSummary' +end diff --git a/app/helpers/guest_device_helper/textual_summary.rb b/app/helpers/guest_device_helper/textual_summary.rb new file mode 100644 index 00000000000..30208b0d953 --- /dev/null +++ b/app/helpers/guest_device_helper/textual_summary.rb @@ -0,0 +1,54 @@ +module GuestDeviceHelper::TextualSummary + def textual_group_properties + TextualGroup.new( + _("Properties"), + %i(device_name location manufacturer field_replaceable_unit) + ) + end + + def textual_group_ports + ports = {:labels => [_("Name"), _("MAC Address")]} + ports[:values] = @record.child_devices.collect do |port| + [ + port.name, + port.address + ] + end + + TextualMultilabel.new( + _("Ports"), + ports + ) + end + + def textual_group_firmware + firmware = {:labels => [_("Name"), _("Version")]} + firmware[:values] = @record.firmwares.collect do |fw| + [ + fw.name, + fw.version + ] + end + + TextualMultilabel.new( + _("Firmware"), + firmware + ) + end + + def textual_device_name + {:label => _("Name"), :value => @record.device_name} + end + + def textual_manufacturer + {:label => _("Manufacturer"), :value => @record.manufacturer} + end + + def textual_location + {:label => _("Location"), :value => @record.location} + end + + def textual_field_replaceable_unit + {:label => _("FRU"), :value => @record.field_replaceable_unit} + end +end diff --git a/app/views/layouts/listnav/_guest_device.html.haml b/app/views/layouts/listnav/_guest_device.html.haml new file mode 100644 index 00000000000..e69de29bb2d From 024ab54d6e147a98064ae6632a200523972fe49b Mon Sep 17 00:00:00 2001 From: skovic Date: Wed, 14 Feb 2018 17:19:21 -0500 Subject: [PATCH 04/10] Update code so only the network devices of a specific server are shown --- app/controllers/physical_server_controller.rb | 8 ++++++++ app/helpers/physical_server_helper/textual_summary.rb | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/physical_server_controller.rb b/app/controllers/physical_server_controller.rb index 48233bead07..ac665a58c61 100644 --- a/app/controllers/physical_server_controller.rb +++ b/app/controllers/physical_server_controller.rb @@ -9,6 +9,14 @@ class PhysicalServerController < ApplicationController after_action :cleanup_action after_action :set_session_data + def self.display_methods + %w(guest_devices) + end + + def display_guest_devices + nested_list(GuestDevice, {:named_scope => :with_ethernet_type}) + end + def self.table_name @table_name ||= "physical_servers" end diff --git a/app/helpers/physical_server_helper/textual_summary.rb b/app/helpers/physical_server_helper/textual_summary.rb index 9eff75bb759..309ba6be16b 100644 --- a/app/helpers/physical_server_helper/textual_summary.rb +++ b/app/helpers/physical_server_helper/textual_summary.rb @@ -158,7 +158,7 @@ def textual_health_state def textual_network_devices device = {:label => _("Network Devices"), :value => @record.hardware.nics.count, :icon => "ff ff-network-card"} unless @record.hardware.nics.nil? - device.update(:link => url_for(:controller => 'guest_device', :action => 'show_list')) + device.update(:link => "/physical_server/show/#{@record.id}?display=guest_devices") end device end From f50291fd830398580e9266e728833220d006289e Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 20 Feb 2018 18:01:51 -0500 Subject: [PATCH 05/10] Fix network devices table not showing up --- app/views/physical_server/show.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/physical_server/show.html.haml b/app/views/physical_server/show.html.haml index 32f7e498b97..0c16a8e0224 100644 --- a/app/views/physical_server/show.html.haml +++ b/app/views/physical_server/show.html.haml @@ -1,5 +1,5 @@ #main_div - - if %w(physical_servers).include?(@display) + - if %w(guest_devices physical_servers).include?(@display) = render :partial => "layouts/gtl", :locals => {:action_url => "show/#{@record.id}"} - else - case @showtype From 46e6508b61b7b53d12bfbac3e8fc36afb3c1c71b Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 20 Feb 2018 18:03:35 -0500 Subject: [PATCH 06/10] Remove device type from table --- product/views/GuestDevice.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/product/views/GuestDevice.yaml b/product/views/GuestDevice.yaml index a7929194cde..01cf00a3f80 100644 --- a/product/views/GuestDevice.yaml +++ b/product/views/GuestDevice.yaml @@ -11,7 +11,6 @@ db: GuestDevice # Columns to fetch from main table cols: - device_name -- device_type - location - manufacturer - field_replaceable_unit @@ -26,7 +25,6 @@ include_for_find: col_order: - device_name -- device_type - location - manufacturer - field_replaceable_unit @@ -35,7 +33,6 @@ col_formats: headers: - Device Name -- Device Type - Location - Manufacturer - Field Replaceable Unit From c8052fc01fcc5c7bf67775503cb40fc0c272ebb0 Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 20 Feb 2018 19:23:28 -0500 Subject: [PATCH 07/10] Rework textual_network_devices method based on review feedback --- app/helpers/physical_server_helper/textual_summary.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/helpers/physical_server_helper/textual_summary.rb b/app/helpers/physical_server_helper/textual_summary.rb index 309ba6be16b..05932765656 100644 --- a/app/helpers/physical_server_helper/textual_summary.rb +++ b/app/helpers/physical_server_helper/textual_summary.rb @@ -156,9 +156,10 @@ def textual_health_state end def textual_network_devices - device = {:label => _("Network Devices"), :value => @record.hardware.nics.count, :icon => "ff ff-network-card"} - unless @record.hardware.nics.nil? - device.update(:link => "/physical_server/show/#{@record.id}?display=guest_devices") + hardware_nics_count = @record.hardware.nics.count + device = {:label => _("Network Devices"), :value => hardware_nics_count, :icon => "ff ff-network-card"} + if hardware_nics_count > 0 + device[:link] = "/physical_server/show/#{@record.id}?display=guest_devices" end device end From 786ad89f297921c5570e0327e8905ec88fca292a Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 20 Feb 2018 19:44:34 -0500 Subject: [PATCH 08/10] Address rubocop issues --- app/controllers/physical_server_controller.rb | 4 ++-- app/helpers/physical_server_helper/textual_summary.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/physical_server_controller.rb b/app/controllers/physical_server_controller.rb index ac665a58c61..d3624c02e0a 100644 --- a/app/controllers/physical_server_controller.rb +++ b/app/controllers/physical_server_controller.rb @@ -13,8 +13,8 @@ def self.display_methods %w(guest_devices) end - def display_guest_devices - nested_list(GuestDevice, {:named_scope => :with_ethernet_type}) + def display_guest_devices + nested_list(GuestDevice, :named_scope => :with_ethernet_type) end def self.table_name diff --git a/app/helpers/physical_server_helper/textual_summary.rb b/app/helpers/physical_server_helper/textual_summary.rb index 05932765656..2e0183c6771 100644 --- a/app/helpers/physical_server_helper/textual_summary.rb +++ b/app/helpers/physical_server_helper/textual_summary.rb @@ -158,7 +158,7 @@ def textual_health_state def textual_network_devices hardware_nics_count = @record.hardware.nics.count device = {:label => _("Network Devices"), :value => hardware_nics_count, :icon => "ff ff-network-card"} - if hardware_nics_count > 0 + if hardware_nics_count.positive? device[:link] = "/physical_server/show/#{@record.id}?display=guest_devices" end device From 3be4f624b798d705118d23bc592f9c82db2c78dd Mon Sep 17 00:00:00 2001 From: skovic Date: Tue, 27 Feb 2018 14:09:12 -0500 Subject: [PATCH 09/10] Remove show_list override from the guest device controller --- app/controllers/guest_device_controller.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/controllers/guest_device_controller.rb b/app/controllers/guest_device_controller.rb index 6a46c295f61..4df4889da94 100644 --- a/app/controllers/guest_device_controller.rb +++ b/app/controllers/guest_device_controller.rb @@ -36,11 +36,6 @@ def set_session_data session[:guest_device_lastaction] = @lastaction end - def show_list - options = {:model => "GuestDevice", :named_scope => [:with_ethernet_type]} - process_show_list(options) - end - def textual_group_list [ %i(properties ports firmware), From f6043e30c188d97299f99affa6aa6f7141a5db5e Mon Sep 17 00:00:00 2001 From: skovic Date: Wed, 28 Feb 2018 13:18:20 -0500 Subject: [PATCH 10/10] Add spec tests for network device pages --- .../guest_device_controller_spec.rb | 49 +++++++++++++++++++ .../physical_server_controller_spec.rb | 9 ++++ 2 files changed, 58 insertions(+) create mode 100644 spec/controllers/guest_device_controller_spec.rb diff --git a/spec/controllers/guest_device_controller_spec.rb b/spec/controllers/guest_device_controller_spec.rb new file mode 100644 index 00000000000..4e2dc8d8183 --- /dev/null +++ b/spec/controllers/guest_device_controller_spec.rb @@ -0,0 +1,49 @@ +describe GuestDeviceController do + render_views + + let!(:server) { EvmSpecHelper.local_miq_server(:zone => zone) } + let(:zone) { FactoryGirl.build(:zone) } + + before(:each) do + stub_user(:features => :all) + EvmSpecHelper.create_guid_miq_server_zone + login_as FactoryGirl.create(:user) + @guest_device = FactoryGirl.create(:guest_device, :id => 1) + end + + describe "#show_list" do + before(:each) do + FactoryGirl.create(:guest_device) + end + + subject { get :show_list } + + it do + is_expected.to have_http_status 200 + is_expected.to render_template(:partial => "layouts/_gtl") + end + end + + describe "#show" do + context "with valid id" do + subject { get :show, :params => {:id => @guest_device.id} } + + it "should respond to show" do + is_expected.to have_http_status 200 + is_expected.to render_template(:partial => "layouts/_textual_groups_generic") + end + end + + context "with invalid id" do + subject { get :show, :params => {:id => (@guest_device.id + 1) } } + + it "should redirect to #show_list" do + is_expected.to have_http_status 302 + is_expected.to redirect_to(:action => :show_list) + + flash_messages = assigns(:flash_array) + expect(flash_messages.first[:message]).to include("Can't access selected records") + end + end + end +end diff --git a/spec/controllers/physical_server_controller_spec.rb b/spec/controllers/physical_server_controller_spec.rb index 498c13503cd..2e3cc23db72 100644 --- a/spec/controllers/physical_server_controller_spec.rb +++ b/spec/controllers/physical_server_controller_spec.rb @@ -61,6 +61,15 @@ expect(controller.send(:flash_errors?)).to be_falsey end end + + context "display=guest_devices" do + it do + post :show, :params => {:id => @physical_server.id, :display => "guest_devices"} + expect(response.status).to eq 200 + is_expected.to render_template(:partial => "layouts/_gtl") + expect(controller.send(:flash_errors?)).to be_falsey + end + end end describe "#button" do