foreman_datacenter 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +38 -0
  4. data/Rakefile +47 -0
  5. data/app/assets/javascripts/foreman_datacenter/ajax.js +18 -0
  6. data/app/assets/javascripts/foreman_datacenter/console_ports.js +2 -0
  7. data/app/assets/javascripts/foreman_datacenter/device_interface_connections.js +16 -0
  8. data/app/assets/javascripts/foreman_datacenter/devices.js +33 -0
  9. data/app/assets/javascripts/foreman_datacenter/racks.js +16 -0
  10. data/app/assets/javascripts/foreman_datacenter/shared.js +19 -0
  11. data/app/assets/stylesheets/foreman_datacenter/device_interface_connections.css +3 -0
  12. data/app/controllers/foreman_datacenter/console_port_templates_controller.rb +41 -0
  13. data/app/controllers/foreman_datacenter/console_ports_controller.rb +94 -0
  14. data/app/controllers/foreman_datacenter/console_server_port_templates_controller.rb +41 -0
  15. data/app/controllers/foreman_datacenter/console_server_ports_controller.rb +78 -0
  16. data/app/controllers/foreman_datacenter/device_bay_templates_controller.rb +41 -0
  17. data/app/controllers/foreman_datacenter/device_bays_controller.rb +74 -0
  18. data/app/controllers/foreman_datacenter/device_interface_connections_controller.rb +65 -0
  19. data/app/controllers/foreman_datacenter/device_interfaces_controller.rb +65 -0
  20. data/app/controllers/foreman_datacenter/device_modules_controller.rb +53 -0
  21. data/app/controllers/foreman_datacenter/device_roles_controller.rb +55 -0
  22. data/app/controllers/foreman_datacenter/device_types_controller.rb +60 -0
  23. data/app/controllers/foreman_datacenter/devices_controller.rb +82 -0
  24. data/app/controllers/foreman_datacenter/interface_templates_controller.rb +52 -0
  25. data/app/controllers/foreman_datacenter/manufacturers_controller.rb +55 -0
  26. data/app/controllers/foreman_datacenter/platforms_controller.rb +55 -0
  27. data/app/controllers/foreman_datacenter/power_outlet_templates_controller.rb +41 -0
  28. data/app/controllers/foreman_datacenter/power_outlets_controller.rb +77 -0
  29. data/app/controllers/foreman_datacenter/power_port_templates_controller.rb +41 -0
  30. data/app/controllers/foreman_datacenter/power_ports_controller.rb +94 -0
  31. data/app/controllers/foreman_datacenter/rack_groups_controller.rb +55 -0
  32. data/app/controllers/foreman_datacenter/racks_controller.rb +63 -0
  33. data/app/controllers/foreman_datacenter/sites_controller.rb +56 -0
  34. data/app/helpers/foreman_datacenter/console_ports_helper.rb +11 -0
  35. data/app/helpers/foreman_datacenter/console_server_ports_helper.rb +11 -0
  36. data/app/helpers/foreman_datacenter/device_bays_helper.rb +12 -0
  37. data/app/helpers/foreman_datacenter/device_interface_connections_helper.rb +10 -0
  38. data/app/helpers/foreman_datacenter/device_interfaces_helper.rb +4 -0
  39. data/app/helpers/foreman_datacenter/device_roles_helper.rb +7 -0
  40. data/app/helpers/foreman_datacenter/device_types_helper.rb +7 -0
  41. data/app/helpers/foreman_datacenter/devices_helper.rb +54 -0
  42. data/app/helpers/foreman_datacenter/interface_templates_helper.rb +7 -0
  43. data/app/helpers/foreman_datacenter/platforms_helper.rb +7 -0
  44. data/app/helpers/foreman_datacenter/power_outlets_helper.rb +11 -0
  45. data/app/helpers/foreman_datacenter/power_ports_helper.rb +11 -0
  46. data/app/helpers/foreman_datacenter/racks_helper.rb +8 -0
  47. data/app/helpers/foreman_datacenter/shared_helper.rb +29 -0
  48. data/app/models/foreman_datacenter/console_port.rb +19 -0
  49. data/app/models/foreman_datacenter/console_port_template.rb +12 -0
  50. data/app/models/foreman_datacenter/console_server_port.rb +9 -0
  51. data/app/models/foreman_datacenter/console_server_port_template.rb +12 -0
  52. data/app/models/foreman_datacenter/device.rb +136 -0
  53. data/app/models/foreman_datacenter/device_bay.rb +15 -0
  54. data/app/models/foreman_datacenter/device_bay_template.rb +12 -0
  55. data/app/models/foreman_datacenter/device_interface.rb +36 -0
  56. data/app/models/foreman_datacenter/device_interface_connection.rb +43 -0
  57. data/app/models/foreman_datacenter/device_module.rb +10 -0
  58. data/app/models/foreman_datacenter/device_role.rb +14 -0
  59. data/app/models/foreman_datacenter/device_type.rb +43 -0
  60. data/app/models/foreman_datacenter/interface_template.rb +17 -0
  61. data/app/models/foreman_datacenter/manufacturer.rb +7 -0
  62. data/app/models/foreman_datacenter/platform.rb +16 -0
  63. data/app/models/foreman_datacenter/power_outlet.rb +9 -0
  64. data/app/models/foreman_datacenter/power_outlet_template.rb +12 -0
  65. data/app/models/foreman_datacenter/power_port.rb +19 -0
  66. data/app/models/foreman_datacenter/power_port_template.rb +12 -0
  67. data/app/models/foreman_datacenter/rack.rb +13 -0
  68. data/app/models/foreman_datacenter/rack_group.rb +9 -0
  69. data/app/models/foreman_datacenter/site.rb +22 -0
  70. data/app/views/foreman_datacenter/console_port_templates/_form.html.erb +15 -0
  71. data/app/views/foreman_datacenter/console_port_templates/new.html.erb +3 -0
  72. data/app/views/foreman_datacenter/console_ports/_for_device.html.erb +5 -0
  73. data/app/views/foreman_datacenter/console_ports/_form.html.erb +15 -0
  74. data/app/views/foreman_datacenter/console_ports/edit.html.erb +3 -0
  75. data/app/views/foreman_datacenter/console_ports/index.html.erb +29 -0
  76. data/app/views/foreman_datacenter/console_ports/new.html.erb +3 -0
  77. data/app/views/foreman_datacenter/console_ports/new_connection.html.erb +22 -0
  78. data/app/views/foreman_datacenter/console_server_port_templates/_form.html.erb +15 -0
  79. data/app/views/foreman_datacenter/console_server_port_templates/new.html.erb +3 -0
  80. data/app/views/foreman_datacenter/console_server_ports/_for_device.html.erb +5 -0
  81. data/app/views/foreman_datacenter/console_server_ports/_form.html.erb +15 -0
  82. data/app/views/foreman_datacenter/console_server_ports/edit.html.erb +3 -0
  83. data/app/views/foreman_datacenter/console_server_ports/new.html.erb +3 -0
  84. data/app/views/foreman_datacenter/console_server_ports/new_connection.html.erb +22 -0
  85. data/app/views/foreman_datacenter/device_bay_templates/_form.html.erb +15 -0
  86. data/app/views/foreman_datacenter/device_bay_templates/new.html.erb +3 -0
  87. data/app/views/foreman_datacenter/device_bays/_form.html.erb +15 -0
  88. data/app/views/foreman_datacenter/device_bays/edit.html.erb +3 -0
  89. data/app/views/foreman_datacenter/device_bays/new.html.erb +3 -0
  90. data/app/views/foreman_datacenter/device_bays/populate_new.html.erb +21 -0
  91. data/app/views/foreman_datacenter/device_interface_connections/_form.html.erb +72 -0
  92. data/app/views/foreman_datacenter/device_interface_connections/_interfaces.html.erb +5 -0
  93. data/app/views/foreman_datacenter/device_interface_connections/index.html.erb +32 -0
  94. data/app/views/foreman_datacenter/device_interface_connections/new.html.erb +7 -0
  95. data/app/views/foreman_datacenter/device_interfaces/_form.html.erb +22 -0
  96. data/app/views/foreman_datacenter/device_interfaces/edit.html.erb +3 -0
  97. data/app/views/foreman_datacenter/device_interfaces/new.html.erb +3 -0
  98. data/app/views/foreman_datacenter/device_modules/_form.html.erb +17 -0
  99. data/app/views/foreman_datacenter/device_modules/edit.html.erb +3 -0
  100. data/app/views/foreman_datacenter/device_modules/new.html.erb +3 -0
  101. data/app/views/foreman_datacenter/device_roles/_form.html.erb +11 -0
  102. data/app/views/foreman_datacenter/device_roles/edit.html.erb +3 -0
  103. data/app/views/foreman_datacenter/device_roles/index.html.erb +36 -0
  104. data/app/views/foreman_datacenter/device_roles/new.html.erb +3 -0
  105. data/app/views/foreman_datacenter/device_roles/show.html.erb +56 -0
  106. data/app/views/foreman_datacenter/device_types/_form.html.erb +26 -0
  107. data/app/views/foreman_datacenter/device_types/edit.html.erb +3 -0
  108. data/app/views/foreman_datacenter/device_types/index.html.erb +36 -0
  109. data/app/views/foreman_datacenter/device_types/new.html.erb +3 -0
  110. data/app/views/foreman_datacenter/device_types/show.html.erb +357 -0
  111. data/app/views/foreman_datacenter/devices/_console_port.html.erb +60 -0
  112. data/app/views/foreman_datacenter/devices/_console_server_port.html.erb +64 -0
  113. data/app/views/foreman_datacenter/devices/_device_bay.html.erb +46 -0
  114. data/app/views/foreman_datacenter/devices/_device_module.html.erb +16 -0
  115. data/app/views/foreman_datacenter/devices/_device_types.html.erb +5 -0
  116. data/app/views/foreman_datacenter/devices/_for_rack.html.erb +9 -0
  117. data/app/views/foreman_datacenter/devices/_form.html.erb +80 -0
  118. data/app/views/foreman_datacenter/devices/_interface.html.erb +67 -0
  119. data/app/views/foreman_datacenter/devices/_management_interface.html.erb +67 -0
  120. data/app/views/foreman_datacenter/devices/_power_outlet.html.erb +60 -0
  121. data/app/views/foreman_datacenter/devices/_power_port.html.erb +60 -0
  122. data/app/views/foreman_datacenter/devices/_racks.html.erb +5 -0
  123. data/app/views/foreman_datacenter/devices/edit.html.erb +5 -0
  124. data/app/views/foreman_datacenter/devices/index.html.erb +51 -0
  125. data/app/views/foreman_datacenter/devices/inventory.html.erb +66 -0
  126. data/app/views/foreman_datacenter/devices/new.html.erb +5 -0
  127. data/app/views/foreman_datacenter/devices/show.html.erb +303 -0
  128. data/app/views/foreman_datacenter/hosts/hosts/new_action.html.erb +1 -0
  129. data/app/views/foreman_datacenter/hosts/new_action.html.erb +1 -0
  130. data/app/views/foreman_datacenter/interface_templates/_form.html.erb +19 -0
  131. data/app/views/foreman_datacenter/interface_templates/new.html.erb +3 -0
  132. data/app/views/foreman_datacenter/layouts/layouts/new_layout.html.erb +0 -0
  133. data/app/views/foreman_datacenter/layouts/new_layout.html.erb +0 -0
  134. data/app/views/foreman_datacenter/manufacturers/_form.html.erb +7 -0
  135. data/app/views/foreman_datacenter/manufacturers/edit.html.erb +3 -0
  136. data/app/views/foreman_datacenter/manufacturers/index.html.erb +34 -0
  137. data/app/views/foreman_datacenter/manufacturers/new.html.erb +3 -0
  138. data/app/views/foreman_datacenter/manufacturers/show.html.erb +52 -0
  139. data/app/views/foreman_datacenter/platforms/_form.html.erb +11 -0
  140. data/app/views/foreman_datacenter/platforms/edit.html.erb +3 -0
  141. data/app/views/foreman_datacenter/platforms/index.html.erb +34 -0
  142. data/app/views/foreman_datacenter/platforms/new.html.erb +3 -0
  143. data/app/views/foreman_datacenter/platforms/show.html.erb +56 -0
  144. data/app/views/foreman_datacenter/power_outlet_templates/_form.html.erb +15 -0
  145. data/app/views/foreman_datacenter/power_outlet_templates/new.html.erb +3 -0
  146. data/app/views/foreman_datacenter/power_outlets/_for_device.html.erb +5 -0
  147. data/app/views/foreman_datacenter/power_outlets/_form.html.erb +15 -0
  148. data/app/views/foreman_datacenter/power_outlets/edit.html.erb +3 -0
  149. data/app/views/foreman_datacenter/power_outlets/new.html.erb +3 -0
  150. data/app/views/foreman_datacenter/power_outlets/new_connection.html.erb +22 -0
  151. data/app/views/foreman_datacenter/power_port_templates/_form.html.erb +15 -0
  152. data/app/views/foreman_datacenter/power_port_templates/new.html.erb +3 -0
  153. data/app/views/foreman_datacenter/power_ports/_for_device.html.erb +5 -0
  154. data/app/views/foreman_datacenter/power_ports/_form.html.erb +15 -0
  155. data/app/views/foreman_datacenter/power_ports/edit.html.erb +3 -0
  156. data/app/views/foreman_datacenter/power_ports/index.html.erb +29 -0
  157. data/app/views/foreman_datacenter/power_ports/new.html.erb +3 -0
  158. data/app/views/foreman_datacenter/power_ports/new_connection.html.erb +22 -0
  159. data/app/views/foreman_datacenter/rack_groups/_form.html.erb +11 -0
  160. data/app/views/foreman_datacenter/rack_groups/edit.html.erb +3 -0
  161. data/app/views/foreman_datacenter/rack_groups/index.html.erb +36 -0
  162. data/app/views/foreman_datacenter/rack_groups/new.html.erb +3 -0
  163. data/app/views/foreman_datacenter/rack_groups/show.html.erb +56 -0
  164. data/app/views/foreman_datacenter/racks/_form.html.erb +25 -0
  165. data/app/views/foreman_datacenter/racks/_rack_groups.html.erb +8 -0
  166. data/app/views/foreman_datacenter/racks/edit.html.erb +5 -0
  167. data/app/views/foreman_datacenter/racks/index.html.erb +50 -0
  168. data/app/views/foreman_datacenter/racks/new.html.erb +5 -0
  169. data/app/views/foreman_datacenter/racks/show.html.erb +67 -0
  170. data/app/views/foreman_datacenter/shared/_rack_device_select.html.erb +22 -0
  171. data/app/views/foreman_datacenter/sites/_form.html.erb +12 -0
  172. data/app/views/foreman_datacenter/sites/edit.html.erb +3 -0
  173. data/app/views/foreman_datacenter/sites/index.html.erb +40 -0
  174. data/app/views/foreman_datacenter/sites/new.html.erb +3 -0
  175. data/app/views/foreman_datacenter/sites/show.html.erb +98 -0
  176. data/config/routes.rb +92 -0
  177. data/db/migrate/20160727161914_create_sites.rb +16 -0
  178. data/db/migrate/20160728123353_create_rack_groups.rb +12 -0
  179. data/db/migrate/20160728143149_create_racks.rb +16 -0
  180. data/db/migrate/20160728161636_create_platforms.rb +12 -0
  181. data/db/migrate/20160728162635_create_device_roles.rb +12 -0
  182. data/db/migrate/20160728163815_create_manufacturers.rb +12 -0
  183. data/db/migrate/20160728164858_create_device_types.rb +18 -0
  184. data/db/migrate/20160728171422_create_devices.rb +31 -0
  185. data/db/migrate/20160728194401_create_device_interfaces.rb +17 -0
  186. data/db/migrate/20160728195242_create_device_interface_connections.rb +18 -0
  187. data/db/migrate/20160804104103_create_interface_templates.rb +15 -0
  188. data/db/migrate/20160804142618_create_console_port_templates.rb +13 -0
  189. data/db/migrate/20160804164301_create_power_port_templates.rb +13 -0
  190. data/db/migrate/20160805080626_create_console_server_port_templates.rb +13 -0
  191. data/db/migrate/20160805084726_create_power_outlet_templates.rb +13 -0
  192. data/db/migrate/20160805100411_create_device_bay_templates.rb +13 -0
  193. data/db/migrate/20160809091611_create_device_bays.rb +16 -0
  194. data/db/migrate/20160809103211_create_power_outlets.rb +13 -0
  195. data/db/migrate/20160809104325_create_power_ports.rb +17 -0
  196. data/db/migrate/20160809112815_create_console_server_ports.rb +13 -0
  197. data/db/migrate/20160809113846_create_console_ports.rb +17 -0
  198. data/db/migrate/20160816224805_create_device_modules.rb +15 -0
  199. data/lib/foreman_datacenter.rb +4 -0
  200. data/lib/foreman_datacenter/engine.rb +70 -0
  201. data/lib/foreman_datacenter/version.rb +3 -0
  202. data/lib/tasks/foreman_datacenter_tasks.rake +45 -0
  203. data/locale/Makefile +60 -0
  204. data/locale/en/foreman_datacenter.po +19 -0
  205. data/locale/foreman_datacenter.pot +19 -0
  206. data/locale/gemspec.rb +2 -0
  207. data/test/factories/foreman_datacenter_factories.rb +5 -0
  208. data/test/test_plugin_helper.rb +6 -0
  209. data/test/unit/foreman_datacenter_test.rb +11 -0
  210. metadata +310 -0
@@ -0,0 +1,63 @@
1
+ module ForemanDatacenter
2
+ class RacksController < ApplicationController
3
+ before_action :set_rack, only: [:show, :edit, :update, :destroy, :devices]
4
+
5
+ def index
6
+ @racks = ForemanDatacenter::Rack.
7
+ includes(:site, :rack_group, :devices).
8
+ all
9
+ end
10
+
11
+ def rack_groups
12
+ @rack_groups = RackGroup.where(site_id: params[:site_id]).all
13
+ render partial: 'rack_groups'
14
+ end
15
+
16
+ def show
17
+ end
18
+
19
+ def new
20
+ @rack = ForemanDatacenter::Rack.new
21
+ end
22
+
23
+ def edit
24
+ end
25
+
26
+ def create
27
+ @rack = ForemanDatacenter::Rack.new(rack_params)
28
+
29
+ if @rack.save
30
+ process_success object: @rack
31
+ else
32
+ process_error object: @rack
33
+ end
34
+ end
35
+
36
+ def update
37
+ if @rack.update(rack_params)
38
+ process_success object: @rack
39
+ else
40
+ process_error object: @rack
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ if @rack.destroy
46
+ process_success object: @rack
47
+ else
48
+ process_error object: @rack
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def set_rack
55
+ @rack = ForemanDatacenter::Rack.find(params[:id])
56
+ end
57
+
58
+ def rack_params
59
+ params[:rack].
60
+ permit(:site_id, :rack_group_id, :name, :facility_id, :height, :comments)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,56 @@
1
+ module ForemanDatacenter
2
+ class SitesController < ApplicationController
3
+ before_action :set_site, only: [:show, :edit, :update, :destroy]
4
+
5
+ def index
6
+ @sites = Site.all
7
+ end
8
+
9
+ def show
10
+ end
11
+
12
+ def new
13
+ @site = Site.new
14
+ end
15
+
16
+ def edit
17
+ end
18
+
19
+ def create
20
+ @site = Site.new(site_params)
21
+
22
+ if @site.save
23
+ process_success object: @site
24
+ else
25
+ process_error object: @site
26
+ end
27
+ end
28
+
29
+ def update
30
+ if @site.update(site_params)
31
+ process_success object: @site
32
+ else
33
+ process_error object: @site
34
+ end
35
+ end
36
+
37
+ def destroy
38
+ if @site.destroy
39
+ process_success object: @site
40
+ else
41
+ process_error object: @site
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def set_site
48
+ @site = Site.find(params[:id])
49
+ end
50
+
51
+ def site_params
52
+ params[:site].
53
+ permit(:name, :facility, :asn, :physical_address, :shipping_address, :comments)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanDatacenter
2
+ module ConsolePortsHelper
3
+ def console_ports_list_for_device(f, device = nil)
4
+ collection = device ? device.free_console_ports.select(:id, :name) : []
5
+ selectable_f f, :id,
6
+ options_from_collection_for_select(collection, :id, :name),
7
+ { include_blank: 'Choose a port' },
8
+ { required: true, label: 'Port', help_inline: 'And then specify a port' }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanDatacenter
2
+ module ConsoleServerPortsHelper
3
+ def console_server_ports_list_for_device(f, device = nil)
4
+ collection = device ? device.free_console_server_ports.select(:id, :name) : []
5
+ selectable_f f, :id,
6
+ options_from_collection_for_select(collection, :id, :name),
7
+ { include_blank: 'Choose a port' },
8
+ { required: true, label: 'Port', help_inline: 'And then specify a port' }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module ForemanDatacenter
2
+ module DeviceBaysHelper
3
+ def child_devices_for_device_bay_form(f, device_bay)
4
+ devices = device_bay.available_child_devices.select(:id, :name)
5
+ selectable_f f, :installed_device_id,
6
+ options_from_collection_for_select(devices, 'id', 'name'),
7
+ {include_blank: 'Choose a child device'},
8
+ help_inline: 'Child devices must first be created within the rack occupied by the parent device. Then they can be assigned to a bay.',
9
+ required: true, label: 'Child Device'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module ForemanDatacenter
2
+ module DeviceInterfaceConnectionsHelper
3
+ def interfaces_for_connection_form(f, interfaces)
4
+ selectable_f f, :interface_b,
5
+ options_from_collection_for_select(interfaces, :id, :name),
6
+ { include_blank: 'Choose an interface' },
7
+ { required: true, label: 'Interface', help_inline: 'And then specify an interface' }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ module ForemanDatacenter
2
+ module DeviceInterfacesHelper
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ module ForemanDatacenter
2
+ module DeviceRolesHelper
3
+ def device_role_colors_for_select
4
+ DeviceRole::COLORS.zip(DeviceRole::COLORS)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module ForemanDatacenter
2
+ module DeviceTypesHelper
3
+ def device_type_subdevice_roles
4
+ DeviceType::SUBDEVICE_ROLES.zip(DeviceType::SUBDEVICE_ROLES)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,54 @@
1
+ module ForemanDatacenter
2
+ module DevicesHelper
3
+ def device_roles_for_select(selected_id = nil)
4
+ options_from_collection_for_select(DeviceRole.all, 'id', 'name', selected_id)
5
+ end
6
+
7
+ def device_manufacturers_for_select(selected_id = nil)
8
+ options_from_collection_for_select(Manufacturer.all, 'id', 'name', selected_id)
9
+ end
10
+
11
+ def device_types_for_device_form(f, manufacturer_id, device_type_id = nil)
12
+ if manufacturer_id
13
+ collection = DeviceType.select(:id, :model).
14
+ where(manufacturer_id: manufacturer_id).
15
+ all
16
+ else
17
+ collection = []
18
+ end
19
+ selectable_f f, :device_type_id,
20
+ options_from_collection_for_select(collection, 'id', 'model', device_type_id),
21
+ { include_blank: 'Choose a device type' },
22
+ { required: true, label: 'Device Type' }
23
+ end
24
+
25
+ def racks_for_device_form(f, site_id, rack_id = nil)
26
+ if site_id
27
+ collection = Rack.where(site_id: site_id).select(:id, :name).all
28
+ else
29
+ collection = []
30
+ end
31
+ selectable_f f, :rack_id,
32
+ options_from_collection_for_select(collection, 'id', 'name', rack_id),
33
+ { include_blank: 'Choose a rack' },
34
+ { required: true, label: 'Rack' }
35
+ end
36
+
37
+ def sites_for_device_form(site_id)
38
+ collection = Site.select(:id, :name).all
39
+ select_tag :site_id,
40
+ options_from_collection_for_select(collection, 'id', 'name', site_id),
41
+ { :include_blank => 'Choose a site',
42
+ :onchange => 'devicesNewSiteSelected(this)',
43
+ :'data-url' => racks_devices_path,
44
+ :class => 'form-control' }
45
+ end
46
+
47
+ def platforms_for_device_form(f, platform_id)
48
+ collection = Platform.select(:id, :name).all
49
+ selectable_f f, :platform_id,
50
+ options_from_collection_for_select(collection, 'id', 'name', platform_id),
51
+ { include_blank: 'Choose a platform', label: 'Platform' }
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,7 @@
1
+ module ForemanDatacenter
2
+ module InterfaceTemplatesHelper
3
+ def interface_template_form_factors
4
+ InterfaceTemplate::FORM_FACTORS.zip(InterfaceTemplate::FORM_FACTORS)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module ForemanDatacenter
2
+ module PlatformsHelper
3
+ def rpc_clients_for_select
4
+ Platform::RPC_CLIENTS.zip(Platform::RPC_CLIENTS)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanDatacenter
2
+ module PowerOutletsHelper
3
+ def power_outlets_list_for_device(f, device = nil)
4
+ collection = device ? device.free_power_outlets.select(:id, :name) : []
5
+ selectable_f f, :id,
6
+ options_from_collection_for_select(collection, :id, :name),
7
+ { include_blank: 'Choose a power outlet' },
8
+ { required: true, label: 'Port', help_inline: 'And then specify a power outlet' }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanDatacenter
2
+ module PowerPortsHelper
3
+ def power_ports_list_for_device(f, device = nil)
4
+ collection = device ? device.free_power_ports.select(:id, :name) : []
5
+ selectable_f f, :id,
6
+ options_from_collection_for_select(collection, :id, :name),
7
+ { include_blank: 'Choose a port' },
8
+ { required: true, label: 'Port', help_inline: 'And then specify a port' }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module ForemanDatacenter
2
+ module RacksHelper
3
+ def rack_groups_for_select(rack)
4
+ collection = rack.site ? rack.site.rack_groups : []
5
+ options_from_collection_for_select(collection, 'id', 'name', rack.rack_group_id)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ module ForemanDatacenter
2
+ module SharedHelper
3
+ def racks_list_for_site(site = nil)
4
+ if site
5
+ collection = ForemanDatacenter::Rack.select(:id, :name).where(site: site)
6
+ else
7
+ collection = []
8
+ end
9
+ select_tag :rack_id,
10
+ options_from_collection_for_select(collection, 'id', 'name'),
11
+ { :include_blank => 'Choose a rack', :class => 'form-control',
12
+ :'data-url' => for_rack_devices_path,
13
+ :onchange => 'connectionsNewRackSelected(this)' }
14
+ end
15
+
16
+ def devices_list_for_rack(rack = nil)
17
+ collection = rack ? rack.devices.select(:id, :name) : []
18
+ select_tag :device_id,
19
+ options_from_collection_for_select(collection, :id, :name),
20
+ { include_blank: 'Choose a device', class: 'form-control',
21
+ :onchange => 'newDeviceSelected(this)' }
22
+ end
23
+
24
+ def rack_device_select(site, options)
25
+ render partial: 'foreman_datacenter/shared/rack_device_select',
26
+ locals: { site: site, options: options }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module ForemanDatacenter
2
+ class ConsolePort < ActiveRecord::Base
3
+ belongs_to :device, :class_name => 'ForemanDatacenter::Device'
4
+ belongs_to :console_server_port, :class_name => 'ForemanDatacenter::ConsoleServerPort'
5
+
6
+ enum connection_status: [:connected, :planned]
7
+
8
+ validates :device_id, presence: true
9
+ validates :name, presence: true, length: { maximum: 30 }
10
+
11
+ def connect(port, connection_status)
12
+ update(console_server_port: port, connection_status: connection_status)
13
+ end
14
+
15
+ def disconnect
16
+ update(console_server_port: nil)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ module ForemanDatacenter
2
+ class ConsolePortTemplate < ActiveRecord::Base
3
+ belongs_to :device_type, :class_name => 'ForemanDatacenter::DeviceType'
4
+
5
+ validates :device_type_id, presence: true
6
+ validates :name, presence: true, length: { maximum: 30 }
7
+
8
+ def attrs_to_copy
9
+ attributes.slice('name')
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module ForemanDatacenter
2
+ class ConsoleServerPort < ActiveRecord::Base
3
+ belongs_to :device, :class_name => 'ForemanDatacenter::Device'
4
+ has_one :console_port, :class_name => 'ForemanDatacenter::ConsolePort'
5
+
6
+ validates :device_id, presence: true
7
+ validates :name, presence: true, length: { maximum: 30 }
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module ForemanDatacenter
2
+ class ConsoleServerPortTemplate < ActiveRecord::Base
3
+ belongs_to :device_type, :class_name => 'ForemanDatacenter::DeviceType'
4
+
5
+ validates :device_type_id, presence: true
6
+ validates :name, presence: true, length: { maximum: 30 }
7
+
8
+ def attrs_to_copy
9
+ attributes.slice('name')
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,136 @@
1
+ module ForemanDatacenter
2
+ class Device < ActiveRecord::Base
3
+ belongs_to :device_type, :class_name => 'ForemanDatacenter::DeviceType'
4
+ belongs_to :device_role, :class_name => 'ForemanDatacenter::DeviceRole'
5
+ belongs_to :platform, :class_name => 'ForemanDatacenter::Platform'
6
+ belongs_to :rack, :class_name => 'ForemanDatacenter::Rack'
7
+ has_many :device_bays, :class_name => 'ForemanDatacenter::DeviceBay'
8
+ has_one :parent_device_bay, :class_name => 'ForemanDatacenter::DeviceBay',
9
+ :foreign_key => 'installed_device_id'
10
+ has_many :power_outlets, :class_name => 'ForemanDatacenter::PowerOutlet'
11
+ has_many :power_ports, :class_name => 'ForemanDatacenter::PowerPort'
12
+ has_many :console_server_ports, :class_name => 'ForemanDatacenter::ConsoleServerPort'
13
+ has_many :console_ports, :class_name => 'ForemanDatacenter::ConsolePort'
14
+ has_many :interfaces, :class_name => 'ForemanDatacenter::DeviceInterface'
15
+ has_many :management_interfaces, -> { where(mgmt_only: true) },
16
+ :class_name => 'ForemanDatacenter::DeviceInterface'
17
+ has_many :non_management_interfaces, -> { where(mgmt_only: false) },
18
+ :class_name => 'ForemanDatacenter::DeviceInterface'
19
+ has_many :modules, :class_name => 'ForemanDatacenter::DeviceModule'
20
+
21
+ enum face: [:front, :rear]
22
+ enum status: [:active, :offline]
23
+
24
+ validates :device_type_id, presence: true
25
+ validates :device_role_id, presence: true
26
+ validates :name, presence: true, uniqueness: true, length: { maximum: 50 }
27
+ validates :serial, length: { maximum: 50 }
28
+ validates :rack_id, presence: true
29
+ validates :position, numericality: { only_integer: true }, allow_nil: true
30
+
31
+ after_create :create_interfaces
32
+ after_create :create_console_ports
33
+ after_create :create_power_ports
34
+ after_create :create_console_server_ports
35
+ after_create :create_power_outlets
36
+ after_create :create_device_bays
37
+
38
+ def site_id
39
+ rack.try(:site_id)
40
+ end
41
+
42
+ def site
43
+ rack.site
44
+ end
45
+
46
+ def ip_address
47
+ primary_ip4 || primary_ip6
48
+ end
49
+
50
+ def manufacturer_id
51
+ device_type.try(:manufacturer_id)
52
+ end
53
+
54
+ def is_console_server
55
+ device_type.try(:is_console_server)
56
+ end
57
+
58
+ def is_pdu
59
+ device_type.try(:is_pdu)
60
+ end
61
+
62
+ def is_network_device
63
+ device_type.try(:is_network_device)
64
+ end
65
+
66
+ def parent?
67
+ device_type.try(:subdevice_role) == 'Parent'
68
+ end
69
+
70
+ def free_interfaces
71
+ interfaces.where(mgmt_only: false).reject(&:connected?)
72
+ end
73
+
74
+ def free_console_ports
75
+ console_ports.where(console_server_port_id: nil)
76
+ end
77
+
78
+ def free_power_ports
79
+ power_ports.where(power_outlet_id: nil)
80
+ end
81
+
82
+ def free_console_server_ports
83
+ console_server_ports.joins('LEFT JOIN console_ports ON console_server_ports.id = console_ports.console_server_port_id').
84
+ where(console_ports: { console_server_port_id: nil })
85
+ end
86
+
87
+ def free_power_outlets
88
+ power_outlets.joins('LEFT JOIN power_ports ON power_outlets.id = power_ports.power_outlet_id').
89
+ where(power_ports: { power_outlet_id: nil })
90
+ end
91
+
92
+ protected
93
+
94
+ def create_interfaces
95
+ device_type.interface_templates.each do |template|
96
+ interfaces.create(template.attrs_to_copy)
97
+ end
98
+ end
99
+
100
+ def create_console_ports
101
+ device_type.console_port_templates.each do |template|
102
+ console_ports.create(template.attrs_to_copy)
103
+ end
104
+ end
105
+
106
+ def create_power_ports
107
+ device_type.power_port_templates.each do |template|
108
+ power_ports.create(template.attrs_to_copy)
109
+ end
110
+ end
111
+
112
+ def create_console_server_ports
113
+ if device_type.is_console_server?
114
+ device_type.console_server_port_templates.each do |template|
115
+ console_server_ports.create(template.attrs_to_copy)
116
+ end
117
+ end
118
+ end
119
+
120
+ def create_power_outlets
121
+ if device_type.is_pdu?
122
+ device_type.power_outlet_templates.each do |template|
123
+ power_outlets.create(template.attrs_to_copy)
124
+ end
125
+ end
126
+ end
127
+
128
+ def create_device_bays
129
+ if device_type.parent?
130
+ device_type.device_bay_templates.each do |template|
131
+ device_bays.create(template.attrs_to_copy)
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end