foreman_datacenter 0.1.45 → 0.1.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/foreman_datacenter/device_roles.css +31 -0
  3. data/app/controllers/foreman_datacenter/comments_controller.rb +2 -2
  4. data/app/helpers/foreman_datacenter/application_helper.rb +26 -0
  5. data/app/models/foreman_datacenter/rack.rb +4 -0
  6. data/app/views/foreman_datacenter/comments/_comments.html.erb +1 -1
  7. data/app/views/foreman_datacenter/comments/create.html.erb +2 -0
  8. data/app/views/foreman_datacenter/comments/index.html.erb +9 -0
  9. data/app/views/foreman_datacenter/console_ports/index.html.erb +1 -1
  10. data/app/views/foreman_datacenter/device_interface_connections/index.html.erb +1 -1
  11. data/app/views/foreman_datacenter/device_roles/index.html.erb +2 -3
  12. data/app/views/foreman_datacenter/device_roles/show.html.erb +2 -2
  13. data/app/views/foreman_datacenter/device_roles/welcome.html.erb +13 -0
  14. data/app/views/foreman_datacenter/device_types/index.html.erb +2 -3
  15. data/app/views/foreman_datacenter/device_types/show.html.erb +9 -9
  16. data/app/views/foreman_datacenter/device_types/welcome.html.erb +13 -0
  17. data/app/views/foreman_datacenter/devices/index.html.erb +1 -1
  18. data/app/views/foreman_datacenter/devices/inventory.html.erb +2 -2
  19. data/app/views/foreman_datacenter/devices/show.html.erb +7 -7
  20. data/app/views/foreman_datacenter/devices/welcome.html.erb +13 -0
  21. data/app/views/foreman_datacenter/manufacturers/index.html.erb +2 -3
  22. data/app/views/foreman_datacenter/manufacturers/show.html.erb +2 -2
  23. data/app/views/foreman_datacenter/manufacturers/welcome.html.erb +13 -0
  24. data/app/views/foreman_datacenter/platforms/index.html.erb +2 -3
  25. data/app/views/foreman_datacenter/platforms/show.html.erb +2 -2
  26. data/app/views/foreman_datacenter/platforms/welcome.html.erb +13 -0
  27. data/app/views/foreman_datacenter/power_ports/index.html.erb +1 -1
  28. data/app/views/foreman_datacenter/rack_groups/index.html.erb +2 -3
  29. data/app/views/foreman_datacenter/rack_groups/show.html.erb +2 -2
  30. data/app/views/foreman_datacenter/rack_groups/welcome.html.erb +13 -0
  31. data/app/views/foreman_datacenter/racks/_device_position.html.erb +24 -27
  32. data/app/views/foreman_datacenter/racks/_unpositioned_devices.html.erb +20 -0
  33. data/app/views/foreman_datacenter/racks/index.html.erb +2 -3
  34. data/app/views/foreman_datacenter/racks/show.html.erb +12 -3
  35. data/app/views/foreman_datacenter/racks/welcome.html.erb +13 -0
  36. data/app/views/foreman_datacenter/sites/index.html.erb +2 -3
  37. data/app/views/foreman_datacenter/sites/show.html.erb +3 -3
  38. data/app/views/foreman_datacenter/sites/welcome.html.erb +13 -0
  39. data/app/views/hosts/import_to_device.html.erb +1 -1
  40. data/db/migrate/20160727161914_create_sites.rb +1 -1
  41. data/db/migrate/20160728123353_create_rack_groups.rb +1 -1
  42. data/db/migrate/20160728143149_create_racks.rb +1 -1
  43. data/db/migrate/20160728161636_create_platforms.rb +1 -1
  44. data/db/migrate/20160728162635_create_device_roles.rb +1 -1
  45. data/db/migrate/20160728163815_create_manufacturers.rb +1 -1
  46. data/db/migrate/20160728164858_create_device_types.rb +1 -1
  47. data/db/migrate/20160728171422_create_devices.rb +1 -1
  48. data/db/migrate/20160728194401_create_device_interfaces.rb +1 -1
  49. data/db/migrate/20160728195242_create_device_interface_connections.rb +1 -1
  50. data/db/migrate/20160804104103_create_interface_templates.rb +1 -1
  51. data/db/migrate/20160804142618_create_console_port_templates.rb +1 -1
  52. data/db/migrate/20160804164301_create_power_port_templates.rb +1 -1
  53. data/db/migrate/20160805080626_create_console_server_port_templates.rb +1 -1
  54. data/db/migrate/20160805084726_create_power_outlet_templates.rb +1 -1
  55. data/db/migrate/20160805100411_create_device_bay_templates.rb +1 -1
  56. data/db/migrate/20160809091611_create_device_bays.rb +1 -1
  57. data/db/migrate/20160809103211_create_power_outlets.rb +1 -1
  58. data/db/migrate/20160809104325_create_power_ports.rb +1 -1
  59. data/db/migrate/20160809112815_create_console_server_ports.rb +1 -1
  60. data/db/migrate/20160809113846_create_console_ports.rb +1 -1
  61. data/db/migrate/20160816224805_create_device_modules.rb +1 -1
  62. data/db/migrate/20160824212010_add_host_ref_to_devices.rb +1 -1
  63. data/db/migrate/20160828200938_add_ip_address_to_device_interfaces.rb +1 -1
  64. data/db/migrate/20160905211522_create_management_devices.rb +1 -1
  65. data/db/migrate/20160906205605_rename_field_in_management_devices.rb +1 -1
  66. data/db/migrate/20160909205537_add_name_index_to_racks.rb +1 -1
  67. data/db/migrate/20160920221011_remove_index_from_devices.rb +1 -1
  68. data/db/migrate/20170824122025_add_side_to_device.rb +1 -1
  69. data/db/migrate/20170918202630_add_racksize_to_device.rb +1 -1
  70. data/db/migrate/20170922110137_create_comments.rb +2 -2
  71. data/db/migrate/20170922174725_renaming_comments.rb +1 -1
  72. data/db/migrate/20170924194247_rename_device_comments_column.rb +1 -1
  73. data/db/migrate/20170929101032_add_parent_id_to_comments.rb +1 -1
  74. data/db/migrate/20171001130802_fix_parent_id_column_in_comments.rb +1 -1
  75. data/db/migrate/20171004221349_add_user_id_to_comments.rb +1 -1
  76. data/lib/foreman_datacenter/engine.rb +1 -1
  77. data/lib/foreman_datacenter/version.rb +1 -1
  78. data/lib/tasks/test_tasks.rake +13 -0
  79. data/test/controllers/foreman_datacenter/rack_groups_contoller_test.rb +91 -0
  80. data/test/controllers/foreman_datacenter/racks_contoller_test.rb +91 -0
  81. data/test/controllers/foreman_datacenter/sites_contoller_test.rb +91 -0
  82. data/test/fixtures/foreman_datacenter/rack_groups.yml +11 -0
  83. data/test/fixtures/foreman_datacenter/racks.yml +19 -0
  84. data/test/fixtures/foreman_datacenter/sites.yml +19 -0
  85. data/test/integration/foreman_datacenter/rack_group_test.rb +25 -0
  86. data/test/integration/foreman_datacenter/rack_test.rb +25 -0
  87. data/test/integration/foreman_datacenter/site_test.rb +29 -0
  88. metadata +34 -2
@@ -1,4 +1,4 @@
1
- class AddHostRefToDevices < ActiveRecord::Migration
1
+ class AddHostRefToDevices < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_reference :devices, :host, index: true
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddIpAddressToDeviceInterfaces < ActiveRecord::Migration
1
+ class AddIpAddressToDeviceInterfaces < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :device_interfaces, :ip_address, :string, limit: 128, default: ''
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateManagementDevices < ActiveRecord::Migration
1
+ class CreateManagementDevices < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :management_devices do |t|
4
4
  t.references :device
@@ -1,4 +1,4 @@
1
- class RenameFieldInManagementDevices < ActiveRecord::Migration
1
+ class RenameFieldInManagementDevices < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  rename_column :management_devices, :name, :console_url
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddNameIndexToRacks < ActiveRecord::Migration
1
+ class AddNameIndexToRacks < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_index :racks, :name
4
4
  end
@@ -1,4 +1,4 @@
1
- class RemoveIndexFromDevices < ActiveRecord::Migration
1
+ class RemoveIndexFromDevices < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  remove_index :devices, :name
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSideToDevice < ActiveRecord::Migration
1
+ class AddSideToDevice < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :devices, :side, :integer, null: true
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddRacksizeToDevice < ActiveRecord::Migration
1
+ class AddRacksizeToDevice < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :devices, :size, :integer, default: 1
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateComments < ActiveRecord::Migration
1
+ class CreateComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :comments do |t|
4
4
  t.text :content
@@ -6,6 +6,6 @@ class CreateComments < ActiveRecord::Migration
6
6
 
7
7
  t.timestamps null: false
8
8
  end
9
- add_index :comments, [:commentable_id, :commentable_type]
9
+ add_index :comments, [:commentable_id, :commentable_type], name: 'comments_index'
10
10
  end
11
11
  end
@@ -1,4 +1,4 @@
1
- class RenamingComments < ActiveRecord::Migration
1
+ class RenamingComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  rename_table :comments, :datacenter_comments
4
4
  end
@@ -1,4 +1,4 @@
1
- class RenameDeviceCommentsColumn < ActiveRecord::Migration
1
+ class RenameDeviceCommentsColumn < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  rename_column :devices, :comments, :old_comments
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddParentIdToComments < ActiveRecord::Migration
1
+ class AddParentIdToComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_reference :datacenter_comments, :parent, index: true
4
4
  end
@@ -1,4 +1,4 @@
1
- class FixParentIdColumnInComments < ActiveRecord::Migration
1
+ class FixParentIdColumnInComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  change_column :datacenter_comments, :parent_id, :string
4
4
  rename_column :datacenter_comments, :parent_id, :ancestry
@@ -1,4 +1,4 @@
1
- class AddUserIdToComments < ActiveRecord::Migration
1
+ class AddUserIdToComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :datacenter_comments, :user_id, :integer
4
4
  end
@@ -413,7 +413,7 @@ module ForemanDatacenter
413
413
  role "Datacenter Manager", MANAGER
414
414
  add_all_permissions_to_default_roles
415
415
 
416
- sub_menu :top_menu, :datacenter, :after=> :infrastructure_menu do
416
+ sub_menu :top_menu, :datacenter, :after=> :infrastructure_menu, :icon => 'pficon pficon-enterprise' do
417
417
  menu :top_menu, :sites, :url_hash => { controller: :'foreman_datacenter/sites', action: :index }
418
418
  divider :top_menu, :parent => :datacenter, :after => :sites, :caption => 'Racks'
419
419
  menu :top_menu, :racks, :url_hash => { controller: :'foreman_datacenter/racks', action: :index }
@@ -1,3 +1,3 @@
1
1
  module ForemanDatacenter
2
- VERSION = '0.1.45'.freeze
2
+ VERSION = '0.1.46'.freeze
3
3
  end
@@ -0,0 +1,13 @@
1
+ # Tasks
2
+ namespace :foreman_datacenter do
3
+ namespace :example do
4
+ desc 'Example Task'
5
+ task task: :environment do
6
+ Comment.create({content: "TEST ++++++++++++++++++++"})
7
+ ForemanDatacenter::Comment.create({content: "TEST ______________________"})
8
+ Comment.create(content: "TEST ################")
9
+ ForemanDatacenter::Comment.create(content: "TEST @@@@@@@@@@@@@@@@@@@@")
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,91 @@
1
+ require 'test_helper'
2
+
3
+ module ForemanDatacenter
4
+ class RackGroupsControllerTest < ActionController::TestCase
5
+ setup do
6
+ @model = RackGroup.first
7
+ end
8
+
9
+ basic_index_test
10
+ basic_new_test
11
+ basic_edit_test
12
+ basic_pagination_per_page_test
13
+ basic_pagination_rendered_test
14
+
15
+ test 'test_new_submit_button_id' do
16
+ get :new, {}, set_session_user
17
+ assert_select "[data-id='aid_create_foreman_datacenter_rack_group']"
18
+ end
19
+
20
+ test 'test_new_cancel_button_id' do
21
+ get :new, {}, set_session_user
22
+ assert_select "[data-id='aid_datacenter_rack_groups']"
23
+ end
24
+
25
+ test 'test_create_invalid' do
26
+ RackGroup.any_instance.stubs(:valid?).returns(false)
27
+ post :create, {:rack_group => {:name => nil, :site_id => nil}}, set_session_user
28
+ assert_template 'new'
29
+ end
30
+
31
+ test 'test_create_valid' do
32
+ RackGroup.any_instance.stubs(:valid?).returns(true)
33
+ post :create, {:rack_group => {:name => 'test rack_group', :site_id => Site.first.id}}, set_session_user
34
+ assert_redirected_to rack_groups_url
35
+ end
36
+
37
+ test 'test_edit_submit_button_id' do
38
+ get :edit, {:id => RackGroup.first}, set_session_user
39
+ assert_select "[data-id='aid_update_foreman_datacenter_rack_group']"
40
+ end
41
+
42
+ test 'test_update_invalid' do
43
+ RackGroup.any_instance.stubs(:valid?).returns(false)
44
+ put :update, {:id => RackGroup.first.to_param, :rack_group => {:name => "3243"}}, set_session_user
45
+ assert_template 'edit'
46
+ end
47
+
48
+ test 'test_update_valid' do
49
+ Site.any_instance.stubs(:valid?).returns(true)
50
+ put :update, {:id => RackGroup.first.to_param, :rack_group => {:name => RackGroup.first.name}}, set_session_user
51
+ assert_redirected_to rack_groups_url
52
+ end
53
+
54
+ test 'test_destroy' do
55
+ rack_group = RackGroup.first
56
+ delete :destroy, {:id => rack_group}, set_session_user
57
+ assert_redirected_to rack_groups_url
58
+ assert !RackGroup.exists?(rack_group.id)
59
+ end
60
+
61
+ test '403 response contains missing permissions' do
62
+ setup_user
63
+ get :edit, { :id => RackGroup.first.id }, {:user => users(:one).id, :expires_at => 5.minutes.from_now}
64
+ assert_response :forbidden
65
+ assert_includes @response.body, 'edit_rack_groups'
66
+ end
67
+
68
+ def setup_user
69
+ @request.session[:user] = users(:one).id
70
+ users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
71
+ end
72
+
73
+ test 'user_with_viewer_rights_should_fail_to_edit_a_rack_group' do
74
+ setup_user
75
+ get :edit, {:id => RackGroup.first.id}
76
+ assert_response :forbidden
77
+ end
78
+
79
+ test 'user_with_viewer_rights_should_succeed_in_viewing_rack_groups' do
80
+ setup_user
81
+ get :index
82
+ assert_response :success
83
+ end
84
+
85
+ test 'user_with_viewer_rights_should_succeed_in_viewing_rack_group' do
86
+ setup_user
87
+ get :show
88
+ assert_response :success
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,91 @@
1
+ require 'test_helper'
2
+
3
+ module ForemanDatacenter
4
+ class RacksControllerTest < ActionController::TestCase
5
+ setup do
6
+ @model = ForemanDatacenter::Rack.first
7
+ end
8
+
9
+ basic_index_test
10
+ basic_new_test
11
+ basic_edit_test
12
+ basic_pagination_per_page_test
13
+ basic_pagination_rendered_test
14
+
15
+ test 'test_new_submit_button_id' do
16
+ get :new, {}, set_session_user
17
+ assert_select "[data-id='aid_create_foreman_datacenter_racks']"
18
+ end
19
+
20
+ test 'test_new_cancel_button_id' do
21
+ get :new, {}, set_session_user
22
+ assert_select "[data-id='aid_datacenter_racks']"
23
+ end
24
+
25
+ test 'test_create_invalid' do
26
+ ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(false)
27
+ post :create, {:rack => {:name => nil, :site => nil, :height => nil}}, set_session_user
28
+ assert_template 'new'
29
+ end
30
+
31
+ test 'test_create_valid' do
32
+ ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(true)
33
+ post :create, {:rack => {:name => 'test rack', :height => '42', :site => Site.first.id }}, set_session_user
34
+ assert_redirected_to racks_url
35
+ end
36
+
37
+ test 'test_edit_submit_button_id' do
38
+ get :edit, {:id => ForemanDatacenter::Rack.first}, set_session_user
39
+ assert_select "[data-id='aid_update_foreman_datacenter_rack']"
40
+ end
41
+
42
+ test 'test_update_invalid' do
43
+ ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(false)
44
+ put :update, {:id => ForemanDatacenter::Rack.first.to_param, :rack => {:name => "3243"}}, set_session_user
45
+ assert_template 'edit'
46
+ end
47
+
48
+ test 'test_update_valid' do
49
+ ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(true)
50
+ put :update, {:id => ForemanDatacenter::Rack.first.to_param, :rack => {:name => ForemanDatacenter::Rack.first.name}}, set_session_user
51
+ assert_redirected_to racks_url
52
+ end
53
+
54
+ test 'test_destroy' do
55
+ rack = ForemanDatacenter::Rack.first
56
+ delete :destroy, {:id => rack}, set_session_user
57
+ assert_redirected_to racks_url
58
+ assert !ForemanDatacenter::Rack.exists?(rack.id)
59
+ end
60
+
61
+ test '403 response contains missing permissions' do
62
+ setup_user
63
+ get :edit, { :id => ForemanDatacenter::Rack.first.id }, {:user => users(:one).id, :expires_at => 5.minutes.from_now}
64
+ assert_response :forbidden
65
+ assert_includes @response.body, 'edit_racks'
66
+ end
67
+
68
+ def setup_user
69
+ @request.session[:user] = users(:one).id
70
+ users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
71
+ end
72
+
73
+ test 'user_with_viewer_rights_should_fail_to_edit_a_rack' do
74
+ setup_user
75
+ get :edit, {:id => ForemanDatacenter::Rack.first.id}
76
+ assert_response :forbidden
77
+ end
78
+
79
+ test 'user_with_viewer_rights_should_succeed_in_viewing_racks' do
80
+ setup_user
81
+ get :index
82
+ assert_response :success
83
+ end
84
+
85
+ test 'user_with_viewer_rights_should_succeed_in_viewing_rack' do
86
+ setup_user
87
+ get :show
88
+ assert_response :success
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,91 @@
1
+ require 'test_helper'
2
+
3
+ module ForemanDatacenter
4
+ class SitesControllerTest < ActionController::TestCase
5
+ setup do
6
+ @model = ForemanDatacenter::Site.first
7
+ end
8
+
9
+ basic_index_test
10
+ basic_new_test
11
+ basic_edit_test
12
+ basic_pagination_per_page_test
13
+ basic_pagination_rendered_test
14
+
15
+ test 'test_new_submit_button_id' do
16
+ get :new, {}, set_session_user
17
+ assert_select "[data-id='aid_create_foreman_datacenter_sites']"
18
+ end
19
+
20
+ test 'test_new_cancel_button_id' do
21
+ get :new, {}, set_session_user
22
+ assert_select "[data-id='aid_datacenter_sites']"
23
+ end
24
+
25
+ test 'test_create_invalid' do
26
+ ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(false)
27
+ post :create, {:site => {:name => nil}}, set_session_user
28
+ assert_template 'new'
29
+ end
30
+
31
+ test 'test_create_valid' do
32
+ ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(true)
33
+ post :create, {:site => {:name => 'test site'}}, set_session_user
34
+ assert_redirected_to sites_url
35
+ end
36
+
37
+ test 'test_edit_submit_button_id' do
38
+ get :edit, {:id => ForemanDatacenter::Site.first}, set_session_user
39
+ assert_select "[data-id='aid_update_foreman_datacenter_site']"
40
+ end
41
+
42
+ test 'test_update_invalid' do
43
+ ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(false)
44
+ put :update, {:id => ForemanDatacenter::Site.first.to_param, :site => {:name => "3243", :asn => "string"}}, set_session_user
45
+ assert_template 'edit'
46
+ end
47
+
48
+ test 'test_update_valid' do
49
+ ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(true)
50
+ put :update, {:id => ForemanDatacenter::Site.first.to_param, :site => {:name => ForemanDatacenter::Site.first.name}}, set_session_user
51
+ assert_redirected_to sites_url
52
+ end
53
+
54
+ test 'test_destroy' do
55
+ site = ForemanDatacenter::Site.first
56
+ delete :destroy, {:id => site}, set_session_user
57
+ assert_redirected_to sites_url
58
+ assert !ForemanDatacenter::Site.exists?(site.id)
59
+ end
60
+
61
+ test '403 response contains missing permissions' do
62
+ setup_user
63
+ get :edit, { :id => ForemanDatacenter::Site.first.id }, {:user => users(:one).id, :expires_at => 5.minutes.from_now}
64
+ assert_response :forbidden
65
+ assert_includes @response.body, 'edit_sites'
66
+ end
67
+
68
+ def setup_user
69
+ @request.session[:user] = users(:one).id
70
+ users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
71
+ end
72
+
73
+ test 'user_with_viewer_rights_should_fail_to_edit_a_site' do
74
+ setup_user
75
+ get :edit, {:id => ForemanDatacenter::Site.first.id}
76
+ assert_response :forbidden
77
+ end
78
+
79
+ test 'user_with_viewer_rights_should_succeed_in_viewing_sites' do
80
+ setup_user
81
+ get :index
82
+ assert_response :success
83
+ end
84
+
85
+ test 'user_with_viewer_rights_should_succeed_in_viewing_site' do
86
+ setup_user
87
+ get :show
88
+ assert_response :success
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ id: 1
5
+ name: Room 1
6
+ site_id: 1
7
+
8
+ one:
9
+ id: 1
10
+ name: Room 2
11
+ site_id: 2
@@ -0,0 +1,19 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ id: 1
5
+ site_id: 1
6
+ rack_group_id: 1
7
+ name: Rack 1
8
+ facility: test facility
9
+ height: 42
10
+ comments: test comment
11
+
12
+ two:
13
+ id: 2
14
+ site_id: 2
15
+ rack_group_id: 2
16
+ name: Rack 2
17
+ facility: test facility
18
+ height: 42
19
+ comments: test comment