foreman_datacenter 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +619 -0
- data/README.md +38 -0
- data/Rakefile +47 -0
- data/app/assets/javascripts/foreman_datacenter/ajax.js +18 -0
- data/app/assets/javascripts/foreman_datacenter/console_ports.js +2 -0
- data/app/assets/javascripts/foreman_datacenter/device_interface_connections.js +16 -0
- data/app/assets/javascripts/foreman_datacenter/devices.js +33 -0
- data/app/assets/javascripts/foreman_datacenter/racks.js +16 -0
- data/app/assets/javascripts/foreman_datacenter/shared.js +19 -0
- data/app/assets/stylesheets/foreman_datacenter/device_interface_connections.css +3 -0
- data/app/controllers/foreman_datacenter/console_port_templates_controller.rb +41 -0
- data/app/controllers/foreman_datacenter/console_ports_controller.rb +94 -0
- data/app/controllers/foreman_datacenter/console_server_port_templates_controller.rb +41 -0
- data/app/controllers/foreman_datacenter/console_server_ports_controller.rb +78 -0
- data/app/controllers/foreman_datacenter/device_bay_templates_controller.rb +41 -0
- data/app/controllers/foreman_datacenter/device_bays_controller.rb +74 -0
- data/app/controllers/foreman_datacenter/device_interface_connections_controller.rb +65 -0
- data/app/controllers/foreman_datacenter/device_interfaces_controller.rb +65 -0
- data/app/controllers/foreman_datacenter/device_modules_controller.rb +53 -0
- data/app/controllers/foreman_datacenter/device_roles_controller.rb +55 -0
- data/app/controllers/foreman_datacenter/device_types_controller.rb +60 -0
- data/app/controllers/foreman_datacenter/devices_controller.rb +82 -0
- data/app/controllers/foreman_datacenter/interface_templates_controller.rb +52 -0
- data/app/controllers/foreman_datacenter/manufacturers_controller.rb +55 -0
- data/app/controllers/foreman_datacenter/platforms_controller.rb +55 -0
- data/app/controllers/foreman_datacenter/power_outlet_templates_controller.rb +41 -0
- data/app/controllers/foreman_datacenter/power_outlets_controller.rb +77 -0
- data/app/controllers/foreman_datacenter/power_port_templates_controller.rb +41 -0
- data/app/controllers/foreman_datacenter/power_ports_controller.rb +94 -0
- data/app/controllers/foreman_datacenter/rack_groups_controller.rb +55 -0
- data/app/controllers/foreman_datacenter/racks_controller.rb +63 -0
- data/app/controllers/foreman_datacenter/sites_controller.rb +56 -0
- data/app/helpers/foreman_datacenter/console_ports_helper.rb +11 -0
- data/app/helpers/foreman_datacenter/console_server_ports_helper.rb +11 -0
- data/app/helpers/foreman_datacenter/device_bays_helper.rb +12 -0
- data/app/helpers/foreman_datacenter/device_interface_connections_helper.rb +10 -0
- data/app/helpers/foreman_datacenter/device_interfaces_helper.rb +4 -0
- data/app/helpers/foreman_datacenter/device_roles_helper.rb +7 -0
- data/app/helpers/foreman_datacenter/device_types_helper.rb +7 -0
- data/app/helpers/foreman_datacenter/devices_helper.rb +54 -0
- data/app/helpers/foreman_datacenter/interface_templates_helper.rb +7 -0
- data/app/helpers/foreman_datacenter/platforms_helper.rb +7 -0
- data/app/helpers/foreman_datacenter/power_outlets_helper.rb +11 -0
- data/app/helpers/foreman_datacenter/power_ports_helper.rb +11 -0
- data/app/helpers/foreman_datacenter/racks_helper.rb +8 -0
- data/app/helpers/foreman_datacenter/shared_helper.rb +29 -0
- data/app/models/foreman_datacenter/console_port.rb +19 -0
- data/app/models/foreman_datacenter/console_port_template.rb +12 -0
- data/app/models/foreman_datacenter/console_server_port.rb +9 -0
- data/app/models/foreman_datacenter/console_server_port_template.rb +12 -0
- data/app/models/foreman_datacenter/device.rb +136 -0
- data/app/models/foreman_datacenter/device_bay.rb +15 -0
- data/app/models/foreman_datacenter/device_bay_template.rb +12 -0
- data/app/models/foreman_datacenter/device_interface.rb +36 -0
- data/app/models/foreman_datacenter/device_interface_connection.rb +43 -0
- data/app/models/foreman_datacenter/device_module.rb +10 -0
- data/app/models/foreman_datacenter/device_role.rb +14 -0
- data/app/models/foreman_datacenter/device_type.rb +43 -0
- data/app/models/foreman_datacenter/interface_template.rb +17 -0
- data/app/models/foreman_datacenter/manufacturer.rb +7 -0
- data/app/models/foreman_datacenter/platform.rb +16 -0
- data/app/models/foreman_datacenter/power_outlet.rb +9 -0
- data/app/models/foreman_datacenter/power_outlet_template.rb +12 -0
- data/app/models/foreman_datacenter/power_port.rb +19 -0
- data/app/models/foreman_datacenter/power_port_template.rb +12 -0
- data/app/models/foreman_datacenter/rack.rb +13 -0
- data/app/models/foreman_datacenter/rack_group.rb +9 -0
- data/app/models/foreman_datacenter/site.rb +22 -0
- data/app/views/foreman_datacenter/console_port_templates/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/console_port_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/console_ports/_for_device.html.erb +5 -0
- data/app/views/foreman_datacenter/console_ports/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/console_ports/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/console_ports/index.html.erb +29 -0
- data/app/views/foreman_datacenter/console_ports/new.html.erb +3 -0
- data/app/views/foreman_datacenter/console_ports/new_connection.html.erb +22 -0
- data/app/views/foreman_datacenter/console_server_port_templates/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/console_server_port_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/console_server_ports/_for_device.html.erb +5 -0
- data/app/views/foreman_datacenter/console_server_ports/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/console_server_ports/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/console_server_ports/new.html.erb +3 -0
- data/app/views/foreman_datacenter/console_server_ports/new_connection.html.erb +22 -0
- data/app/views/foreman_datacenter/device_bay_templates/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/device_bay_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_bays/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/device_bays/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/device_bays/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_bays/populate_new.html.erb +21 -0
- data/app/views/foreman_datacenter/device_interface_connections/_form.html.erb +72 -0
- data/app/views/foreman_datacenter/device_interface_connections/_interfaces.html.erb +5 -0
- data/app/views/foreman_datacenter/device_interface_connections/index.html.erb +32 -0
- data/app/views/foreman_datacenter/device_interface_connections/new.html.erb +7 -0
- data/app/views/foreman_datacenter/device_interfaces/_form.html.erb +22 -0
- data/app/views/foreman_datacenter/device_interfaces/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/device_interfaces/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_modules/_form.html.erb +17 -0
- data/app/views/foreman_datacenter/device_modules/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/device_modules/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_roles/_form.html.erb +11 -0
- data/app/views/foreman_datacenter/device_roles/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/device_roles/index.html.erb +36 -0
- data/app/views/foreman_datacenter/device_roles/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_roles/show.html.erb +56 -0
- data/app/views/foreman_datacenter/device_types/_form.html.erb +26 -0
- data/app/views/foreman_datacenter/device_types/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/device_types/index.html.erb +36 -0
- data/app/views/foreman_datacenter/device_types/new.html.erb +3 -0
- data/app/views/foreman_datacenter/device_types/show.html.erb +357 -0
- data/app/views/foreman_datacenter/devices/_console_port.html.erb +60 -0
- data/app/views/foreman_datacenter/devices/_console_server_port.html.erb +64 -0
- data/app/views/foreman_datacenter/devices/_device_bay.html.erb +46 -0
- data/app/views/foreman_datacenter/devices/_device_module.html.erb +16 -0
- data/app/views/foreman_datacenter/devices/_device_types.html.erb +5 -0
- data/app/views/foreman_datacenter/devices/_for_rack.html.erb +9 -0
- data/app/views/foreman_datacenter/devices/_form.html.erb +80 -0
- data/app/views/foreman_datacenter/devices/_interface.html.erb +67 -0
- data/app/views/foreman_datacenter/devices/_management_interface.html.erb +67 -0
- data/app/views/foreman_datacenter/devices/_power_outlet.html.erb +60 -0
- data/app/views/foreman_datacenter/devices/_power_port.html.erb +60 -0
- data/app/views/foreman_datacenter/devices/_racks.html.erb +5 -0
- data/app/views/foreman_datacenter/devices/edit.html.erb +5 -0
- data/app/views/foreman_datacenter/devices/index.html.erb +51 -0
- data/app/views/foreman_datacenter/devices/inventory.html.erb +66 -0
- data/app/views/foreman_datacenter/devices/new.html.erb +5 -0
- data/app/views/foreman_datacenter/devices/show.html.erb +303 -0
- data/app/views/foreman_datacenter/hosts/hosts/new_action.html.erb +1 -0
- data/app/views/foreman_datacenter/hosts/new_action.html.erb +1 -0
- data/app/views/foreman_datacenter/interface_templates/_form.html.erb +19 -0
- data/app/views/foreman_datacenter/interface_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/layouts/layouts/new_layout.html.erb +0 -0
- data/app/views/foreman_datacenter/layouts/new_layout.html.erb +0 -0
- data/app/views/foreman_datacenter/manufacturers/_form.html.erb +7 -0
- data/app/views/foreman_datacenter/manufacturers/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/manufacturers/index.html.erb +34 -0
- data/app/views/foreman_datacenter/manufacturers/new.html.erb +3 -0
- data/app/views/foreman_datacenter/manufacturers/show.html.erb +52 -0
- data/app/views/foreman_datacenter/platforms/_form.html.erb +11 -0
- data/app/views/foreman_datacenter/platforms/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/platforms/index.html.erb +34 -0
- data/app/views/foreman_datacenter/platforms/new.html.erb +3 -0
- data/app/views/foreman_datacenter/platforms/show.html.erb +56 -0
- data/app/views/foreman_datacenter/power_outlet_templates/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/power_outlet_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/power_outlets/_for_device.html.erb +5 -0
- data/app/views/foreman_datacenter/power_outlets/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/power_outlets/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/power_outlets/new.html.erb +3 -0
- data/app/views/foreman_datacenter/power_outlets/new_connection.html.erb +22 -0
- data/app/views/foreman_datacenter/power_port_templates/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/power_port_templates/new.html.erb +3 -0
- data/app/views/foreman_datacenter/power_ports/_for_device.html.erb +5 -0
- data/app/views/foreman_datacenter/power_ports/_form.html.erb +15 -0
- data/app/views/foreman_datacenter/power_ports/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/power_ports/index.html.erb +29 -0
- data/app/views/foreman_datacenter/power_ports/new.html.erb +3 -0
- data/app/views/foreman_datacenter/power_ports/new_connection.html.erb +22 -0
- data/app/views/foreman_datacenter/rack_groups/_form.html.erb +11 -0
- data/app/views/foreman_datacenter/rack_groups/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/rack_groups/index.html.erb +36 -0
- data/app/views/foreman_datacenter/rack_groups/new.html.erb +3 -0
- data/app/views/foreman_datacenter/rack_groups/show.html.erb +56 -0
- data/app/views/foreman_datacenter/racks/_form.html.erb +25 -0
- data/app/views/foreman_datacenter/racks/_rack_groups.html.erb +8 -0
- data/app/views/foreman_datacenter/racks/edit.html.erb +5 -0
- data/app/views/foreman_datacenter/racks/index.html.erb +50 -0
- data/app/views/foreman_datacenter/racks/new.html.erb +5 -0
- data/app/views/foreman_datacenter/racks/show.html.erb +67 -0
- data/app/views/foreman_datacenter/shared/_rack_device_select.html.erb +22 -0
- data/app/views/foreman_datacenter/sites/_form.html.erb +12 -0
- data/app/views/foreman_datacenter/sites/edit.html.erb +3 -0
- data/app/views/foreman_datacenter/sites/index.html.erb +40 -0
- data/app/views/foreman_datacenter/sites/new.html.erb +3 -0
- data/app/views/foreman_datacenter/sites/show.html.erb +98 -0
- data/config/routes.rb +92 -0
- data/db/migrate/20160727161914_create_sites.rb +16 -0
- data/db/migrate/20160728123353_create_rack_groups.rb +12 -0
- data/db/migrate/20160728143149_create_racks.rb +16 -0
- data/db/migrate/20160728161636_create_platforms.rb +12 -0
- data/db/migrate/20160728162635_create_device_roles.rb +12 -0
- data/db/migrate/20160728163815_create_manufacturers.rb +12 -0
- data/db/migrate/20160728164858_create_device_types.rb +18 -0
- data/db/migrate/20160728171422_create_devices.rb +31 -0
- data/db/migrate/20160728194401_create_device_interfaces.rb +17 -0
- data/db/migrate/20160728195242_create_device_interface_connections.rb +18 -0
- data/db/migrate/20160804104103_create_interface_templates.rb +15 -0
- data/db/migrate/20160804142618_create_console_port_templates.rb +13 -0
- data/db/migrate/20160804164301_create_power_port_templates.rb +13 -0
- data/db/migrate/20160805080626_create_console_server_port_templates.rb +13 -0
- data/db/migrate/20160805084726_create_power_outlet_templates.rb +13 -0
- data/db/migrate/20160805100411_create_device_bay_templates.rb +13 -0
- data/db/migrate/20160809091611_create_device_bays.rb +16 -0
- data/db/migrate/20160809103211_create_power_outlets.rb +13 -0
- data/db/migrate/20160809104325_create_power_ports.rb +17 -0
- data/db/migrate/20160809112815_create_console_server_ports.rb +13 -0
- data/db/migrate/20160809113846_create_console_ports.rb +17 -0
- data/db/migrate/20160816224805_create_device_modules.rb +15 -0
- data/lib/foreman_datacenter.rb +4 -0
- data/lib/foreman_datacenter/engine.rb +70 -0
- data/lib/foreman_datacenter/version.rb +3 -0
- data/lib/tasks/foreman_datacenter_tasks.rake +45 -0
- data/locale/Makefile +60 -0
- data/locale/en/foreman_datacenter.po +19 -0
- data/locale/foreman_datacenter.pot +19 -0
- data/locale/gemspec.rb +2 -0
- data/test/factories/foreman_datacenter_factories.rb +5 -0
- data/test/test_plugin_helper.rb +6 -0
- data/test/unit/foreman_datacenter_test.rb +11 -0
- 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,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,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,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
|