foreman_datacenter 2.0.2 → 2.1.0
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.
- checksums.yaml +4 -4
- data/app/controllers/foreman_datacenter/application_controller.rb +0 -2
- data/app/controllers/foreman_datacenter/rack_groups_controller.rb +0 -1
- data/app/controllers/foreman_datacenter/racks_controller.rb +1 -9
- data/app/helpers/foreman_datacenter/racks_helper.rb +0 -96
- data/app/models/foreman_datacenter/device.rb +0 -38
- data/app/models/foreman_datacenter/rack.rb +1 -103
- data/app/views/foreman_datacenter/devices/show.html.erb +1 -1
- data/app/views/foreman_datacenter/racks/_device_position.html.erb +1 -10
- data/app/views/foreman_datacenter/racks/show.html.erb +4 -6
- data/config/routes.rb +0 -1
- data/lib/foreman_datacenter/version.rb +1 -1
- metadata +51 -52
- data/app/assets/stylesheets/foreman_datacenter/rack_show.css +0 -56
- data/app/views/foreman_datacenter/racks/_device_position_new.html.erb +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ab7e9ec0fe786c1961e4b02fa75293914f41ce16d61709c33e18c01ed669695
|
4
|
+
data.tar.gz: e9ceeaaba6f46402955f89730dde55b5c295729409943897061b33cbfe34566d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2087643f54e75c4ee6bb1834e4597fbb5db63f52e07127caf07d35f58c5f911418c427afe238b6cee8b4416e162f71d85109f65150ab3277bcd95aa89c53eb64
|
7
|
+
data.tar.gz: 32623525dee6dbb3eb348d27f9555935362d7f94cb0ec3faa45fa2279d92b50c43d3a528628fe610b8dc5d97647864f3af23f438fb1d89db52c97ab4796c20b4
|
@@ -61,7 +61,6 @@ module ForemanDatacenter
|
|
61
61
|
def racks
|
62
62
|
@racks = @rack_group.racks.includes(devices: [:device_role])
|
63
63
|
process_error redirect: rack_groups_path(@rack_group), error_msg: 'Current Rack Group haven\'t any Racks.' if @racks.empty?
|
64
|
-
@order = params[:order] || "desc"
|
65
64
|
end
|
66
65
|
|
67
66
|
def update_associated_objects
|
@@ -3,7 +3,7 @@ module ForemanDatacenter
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
include ForemanDatacenter::Controller::Parameters::Rack
|
5
5
|
|
6
|
-
before_action :find_resource, only: [:show, :edit, :update, :destroy, :devices, :move
|
6
|
+
before_action :find_resource, only: [:show, :edit, :update, :destroy, :devices, :move]
|
7
7
|
|
8
8
|
def index
|
9
9
|
@racks = resource_base_search_and_page.includes(:site, :rack_group)
|
@@ -17,7 +17,6 @@ module ForemanDatacenter
|
|
17
17
|
|
18
18
|
def show
|
19
19
|
@rack = resource_base.includes(devices: [:device_role]).find(params[:id])
|
20
|
-
@order = params[:order] || "desc"
|
21
20
|
end
|
22
21
|
|
23
22
|
def new
|
@@ -65,13 +64,6 @@ module ForemanDatacenter
|
|
65
64
|
process_error object: @rack, error_msg: 'Current Rack haven\'t any Devices.' if @devices.empty?
|
66
65
|
end
|
67
66
|
|
68
|
-
def export_to_csv
|
69
|
-
data = @rack.format_for_csv
|
70
|
-
file = File.open("#{@rack.name}.csv", "r")
|
71
|
-
send_file(file)
|
72
|
-
file.close
|
73
|
-
end
|
74
|
-
|
75
67
|
def update_associated_objects
|
76
68
|
begin
|
77
69
|
@rack = ForemanDatacenter::Rack.find(request.env['HTTP_REFERER'].split('/')[-2])
|
@@ -4,101 +4,5 @@ module ForemanDatacenter
|
|
4
4
|
collection = rack.site ? rack.site.rack_groups : []
|
5
5
|
options_from_collection_for_select(collection, 'id', 'name', rack.rack_group_id)
|
6
6
|
end
|
7
|
-
|
8
|
-
def grid_u_desc(rack)
|
9
|
-
i = rack.height + 1
|
10
|
-
limit = 0
|
11
|
-
result = ""
|
12
|
-
|
13
|
-
while limit <= i do
|
14
|
-
if i == 0 && !rack.unpositioned_devices.empty?
|
15
|
-
concat content_tag(:div, "Unpositioned Devices")
|
16
|
-
else
|
17
|
-
if i != 0
|
18
|
-
if rack.child_devices.any? { |d| d.position == i }
|
19
|
-
concat content_tag :div, &-> do
|
20
|
-
concat "#{i}U"
|
21
|
-
rack.child_devices.each do |d|
|
22
|
-
if d.position == i
|
23
|
-
concat content_tag :strong, &-> do
|
24
|
-
concat link_to("Child", device_path(d))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
else
|
30
|
-
concat content_tag(:div, "#{i}U")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
i -= 1
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def grid_empty_style(cell, id)
|
39
|
-
case cell[1]
|
40
|
-
when ["right"]
|
41
|
-
column = "grid-area: rack-#{id}-row-#{cell[0]}-right-empty"
|
42
|
-
when ["left"]
|
43
|
-
column = "grid-area: rack-#{id}-row-#{cell[0]}-left-empty"
|
44
|
-
when ["left", "right"] || ["right", "left"]
|
45
|
-
column = "grid-area: rack-#{id}-row-#{cell[0]}-full-empty"
|
46
|
-
end
|
47
|
-
return column
|
48
|
-
end
|
49
|
-
|
50
|
-
def margin_style(height)
|
51
|
-
result = "top: "
|
52
|
-
case height
|
53
|
-
when 1
|
54
|
-
result += "7%"
|
55
|
-
when 2
|
56
|
-
result += "30%"
|
57
|
-
when 3
|
58
|
-
result += "35%"
|
59
|
-
when 4
|
60
|
-
result += "40%"
|
61
|
-
else
|
62
|
-
result += "45%"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def grid_rack_style(device)
|
67
|
-
css_class_name = device.name.gsub(/[.@#\s]/, "_")
|
68
|
-
return "grid-area: #{css_class_name}"
|
69
|
-
end
|
70
|
-
|
71
|
-
def grid_rack_height(height)
|
72
|
-
return (height + 1)
|
73
|
-
end
|
74
|
-
|
75
|
-
def grid_template(grid, id, order)
|
76
|
-
result = []
|
77
|
-
gr = JSON.parse(grid)
|
78
|
-
gr = gr.to_a.reverse.to_h if order == "desc"
|
79
|
-
|
80
|
-
gr.each do |k,v|
|
81
|
-
row = "rack-#{id}-u#{k}"
|
82
|
-
if v.instance_of? Array
|
83
|
-
if k == "0"
|
84
|
-
row += " rack-#{id}-unpos-devs rack-#{id}-unpos-devs"
|
85
|
-
else
|
86
|
-
row += " rack-#{id}-row-#{k}-full-empty rack-#{id}-row-#{k}-full-empty"
|
87
|
-
end
|
88
|
-
else
|
89
|
-
if v.size > 1
|
90
|
-
row += " #{v['left']} #{v['right']}"
|
91
|
-
else
|
92
|
-
row += " #{v['left']} rack-#{id}-row-#{k}-right-empty" if v.key?("left")
|
93
|
-
row += " rack-#{id}-row-#{k}-left-empty #{v['right']}" if v.key?("right")
|
94
|
-
row += " #{v['full']} #{v['full']}" if v.key?("full")
|
95
|
-
end
|
96
|
-
end
|
97
|
-
result << row
|
98
|
-
end
|
99
|
-
final = result.join("' '").prepend("'") + "'"
|
100
|
-
return "grid-template-areas: #{final}; grid-template-columns: 22% 39% 39%"
|
101
|
-
end
|
102
|
-
|
103
7
|
end
|
104
8
|
end
|
@@ -34,7 +34,6 @@ module ForemanDatacenter
|
|
34
34
|
validates :serial, length: { maximum: 50 }
|
35
35
|
validates :rack_id, presence: true
|
36
36
|
validates :position, numericality: { only_integer: true }, allow_nil: true
|
37
|
-
validate :correct_position
|
38
37
|
|
39
38
|
after_create :create_interfaces
|
40
39
|
after_create :import_interfaces_from_host
|
@@ -73,10 +72,6 @@ module ForemanDatacenter
|
|
73
72
|
device_type.try(:subdevice_role) == 'Parent'
|
74
73
|
end
|
75
74
|
|
76
|
-
def child?
|
77
|
-
device_type.try(:subdevice_role) == 'Child'
|
78
|
-
end
|
79
|
-
|
80
75
|
def free_interfaces
|
81
76
|
interfaces.where(mgmt_only: false).reject(&:connected?)
|
82
77
|
end
|
@@ -144,39 +139,6 @@ module ForemanDatacenter
|
|
144
139
|
end
|
145
140
|
end
|
146
141
|
|
147
|
-
def correct_position
|
148
|
-
if position > 0
|
149
|
-
grid_template = JSON.parse(self.rack.grid_template_areas)
|
150
|
-
correct_pos = true
|
151
|
-
pos = []
|
152
|
-
sz = (size == 0 || size == 1) ? [position] : [*position..(position + (size - 1))]
|
153
|
-
sd = (side.nil?) ? "full" : side
|
154
|
-
sz.each do |i|
|
155
|
-
if grid_template["#{i}"].is_a?(Hash)
|
156
|
-
if grid_template["#{i}"].key?("full") && grid_template["#{i}"]["full"] != "device-#{self.id}"
|
157
|
-
correct_pos = false
|
158
|
-
pos << "#{i}(full)"
|
159
|
-
end
|
160
|
-
if sd == "full"
|
161
|
-
["left", "right"].each do |s|
|
162
|
-
if grid_template["#{i}"].key?("#{s}") && grid_template["#{i}"]["#{s}"] != "device-#{self.id}"
|
163
|
-
correct_pos = false
|
164
|
-
pos << "#{i}(#{s})"
|
165
|
-
end
|
166
|
-
end
|
167
|
-
else
|
168
|
-
if grid_template["#{i}"].key?("#{sd}") && grid_template["#{i}"]["#{sd}"] != "device-#{self.id}"
|
169
|
-
correct_pos = false
|
170
|
-
pos << "#{i}(#{sd})"
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
pos.uniq!
|
176
|
-
errors.add(:position, "Positions: #{pos.join(', ')} already taken") if correct_pos == false
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
142
|
private
|
181
143
|
|
182
144
|
def create_interfaces
|
@@ -12,7 +12,6 @@ module ForemanDatacenter
|
|
12
12
|
validates :facility_id, length: { maximum: 30 }
|
13
13
|
validates :height, presence: true
|
14
14
|
validates_numericality_of :height, only_integer: true, greater_than: 0
|
15
|
-
validate :correct_position
|
16
15
|
|
17
16
|
scoped_search on: :name, complete_value: true
|
18
17
|
scoped_search on: :height, validator: ScopedSearch::Validators::INTEGER
|
@@ -23,7 +22,6 @@ module ForemanDatacenter
|
|
23
22
|
scoped_search in: :site, on: :name, complete_value: true, rename: :site
|
24
23
|
scoped_search in: :rack_group, on: :name, complete_value: true, rename: :rack_group
|
25
24
|
|
26
|
-
|
27
25
|
def device_at(position)
|
28
26
|
devices.where(position: position).to_a
|
29
27
|
end
|
@@ -45,7 +43,7 @@ module ForemanDatacenter
|
|
45
43
|
end
|
46
44
|
|
47
45
|
def unpositioned_devices
|
48
|
-
devices.where(position: nil).
|
46
|
+
devices.where(position: nil).to_a
|
49
47
|
end
|
50
48
|
|
51
49
|
def devices_count
|
@@ -54,108 +52,8 @@ module ForemanDatacenter
|
|
54
52
|
count
|
55
53
|
end
|
56
54
|
|
57
|
-
def format_for_csv
|
58
|
-
positioned_devices = self.positioned_devices
|
59
|
-
unpositioned_devices = self.unpositioned_devices
|
60
|
-
csv_string = CSV.generate do |csv|
|
61
|
-
csv << ["positions", "left", "full", "right", "no side"]
|
62
|
-
positioned_devices.each do |i|
|
63
|
-
pos = i[0].map{|p| "#{p}"+"U"}.join(",")
|
64
|
-
if i[1].size > 0
|
65
|
-
sort = sort_for_csv(i[1])
|
66
|
-
csv << [pos, sort[0], sort[1], sort[2], sort[3]]
|
67
|
-
else
|
68
|
-
csv << [pos]
|
69
|
-
end
|
70
|
-
end
|
71
|
-
unless unpositioned_devices.empty?
|
72
|
-
csv << []
|
73
|
-
csv << ["Unpositioned", unpositioned_devices.map(&:name).join(",")]
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
File.open("#{self.name}.csv", "w") {|f| f << csv_string}
|
78
|
-
end
|
79
|
-
|
80
|
-
# Finding all empty cells for grid layout
|
81
|
-
def empty_cells
|
82
|
-
cells = {} # all cells of grid
|
83
|
-
devices_cells = {} # cells with devices
|
84
|
-
height.times.each do |i|
|
85
|
-
cells[i+1] = ["left", "right"]
|
86
|
-
end
|
87
|
-
devices.each do |d|
|
88
|
-
if d.size > 0
|
89
|
-
if !d.position.nil? && d.position != 0
|
90
|
-
s = (d.size == 0 || d.size == 1) ? 0 : (d.size - 1)
|
91
|
-
places = [*d.position..d.position+s]
|
92
|
-
places.each do |p|
|
93
|
-
devices_cells[p] = [] unless devices_cells.key?(p)
|
94
|
-
if (d.side == "full" || d.side.nil?)
|
95
|
-
["left", "right"].each {|side| devices_cells[p] << side}
|
96
|
-
else
|
97
|
-
devices_cells[p] << d.side
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
devices_cells.each do |k,v|
|
104
|
-
v.each {|c| cells[k].delete(c)}
|
105
|
-
end
|
106
|
-
cells.each {|k,v| cells.except!(k) if cells[k] == []}
|
107
|
-
return cells
|
108
|
-
end
|
109
|
-
|
110
|
-
def grid_template_areas
|
111
|
-
result = {}
|
112
|
-
(height+1).times.each do |i|
|
113
|
-
if i == 0
|
114
|
-
result[0] = unpositioned_devices.map{|d| "device-#{d.id}"}
|
115
|
-
else
|
116
|
-
dev = {}
|
117
|
-
devices.each do |d|
|
118
|
-
if d.size > 0
|
119
|
-
if !d.position.nil? && d.position != 0
|
120
|
-
css_class_name = "device-#{d.id}"
|
121
|
-
s = (d.size == 1 || d.size == 0) ? 0 : (d.size - 1)
|
122
|
-
if [*d.position..(d.position + s)].include?(i)
|
123
|
-
if d.side.nil?
|
124
|
-
dev["full"] = css_class_name
|
125
|
-
else
|
126
|
-
dev["#{d.side}"] = css_class_name
|
127
|
-
end
|
128
|
-
result[i] = dev
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
(height+1).times.each do |i|
|
136
|
-
result[i] = [] if result[i].nil?
|
137
|
-
end
|
138
|
-
# result[0].reject! if result[0].empty?
|
139
|
-
return result.sort_by{|k,v| k}.to_h.to_json
|
140
|
-
end
|
141
|
-
|
142
|
-
def child_devices
|
143
|
-
devices.joins(:device_type).where("device_types.subdevice_role = ?", "Child")
|
144
|
-
end
|
145
|
-
|
146
55
|
private
|
147
56
|
|
148
|
-
def sort_for_csv(device_array)
|
149
|
-
left, full, right, no_side = "", "", "", []
|
150
|
-
device_array.each do |d|
|
151
|
-
left = d.name if d.side == "left"
|
152
|
-
right = d.name if d.side == "right"
|
153
|
-
full = d.name if d.side == "full"
|
154
|
-
no_side << d.name if d.side == nil
|
155
|
-
end
|
156
|
-
[left, full, right, no_side.join(",")]
|
157
|
-
end
|
158
|
-
|
159
57
|
def device_sorting(devices)
|
160
58
|
devices.reverse.map { |d| [d[0].reverse, d[1]] }
|
161
59
|
end
|
@@ -70,7 +70,7 @@
|
|
70
70
|
</tr>
|
71
71
|
<tr>
|
72
72
|
<td><%= _("Position") %></td>
|
73
|
-
<td><%=
|
73
|
+
<td><%= @device.positions.join(", ") %> / <%= @device.face %> / <%= @device.side %></td>
|
74
74
|
</tr>
|
75
75
|
<tr>
|
76
76
|
<td><%= _("Device Type") %></td>
|
@@ -1,14 +1,5 @@
|
|
1
1
|
<div class="panel panel-default">
|
2
|
-
<div class="panel-heading text-center">
|
3
|
-
<h4 class="nonmargintop nonmarginbottom">
|
4
|
-
<strong>
|
5
|
-
<%= link_to _("#{rack.name}"), rack_path(rack) %>
|
6
|
-
</strong>
|
7
|
-
<strong>
|
8
|
-
<%= link_to 'Export to CSV', export_to_csv_rack_path(rack.id), class: "btn btn-primary btn-xs pull-right" %>
|
9
|
-
</strong>
|
10
|
-
</h4>
|
11
|
-
</div>
|
2
|
+
<div class="panel-heading text-center"><h4 class="nonmargintop nonmarginbottom"><strong><%= link_to _("#{rack.name}"), rack_path(rack) %></strong></h4></div>
|
12
3
|
<table class="<%= table_css_classes 'table-hover panel-body nonmarginbottom' %>">
|
13
4
|
<tbody>
|
14
5
|
<% rack.positioned_devices.each do |positions, devices| %>
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<% stylesheet 'foreman_datacenter/device_roles' %>
|
2
2
|
<% stylesheet 'foreman_datacenter/datacenter' %>
|
3
|
-
<% stylesheet 'foreman_datacenter/rack_show' %>
|
4
3
|
<% stylesheet 'foreman_datacenter/modal' %>
|
5
4
|
<% javascript 'foreman_datacenter/modal' %>
|
6
5
|
|
@@ -90,11 +89,10 @@
|
|
90
89
|
</div>
|
91
90
|
|
92
91
|
<div class="col-md-6">
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
<%#= render "unpositioned_devices", rack: @rack if @rack.unpositioned_devices.count != 0 %>
|
92
|
+
<!-- Devices -->
|
93
|
+
<%= render "device_position", rack: @rack %>
|
94
|
+
<!-- Unpositioned Devices -->
|
95
|
+
<%= render "unpositioned_devices", rack: @rack if @rack.unpositioned_devices.count != 0 %>
|
98
96
|
<div><h6 class="text-right"><%= _("* side is not defined") %></h6></div>
|
99
97
|
<div><h6 class="text-right"><%= _("** size is not defined") %></h6></div>
|
100
98
|
</div>
|
data/config/routes.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_datacenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Ivanov
|
8
8
|
- Eugene Loginov
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-05-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: prawn
|
@@ -92,7 +92,6 @@ files:
|
|
92
92
|
- app/assets/stylesheets/foreman_datacenter/devices.css
|
93
93
|
- app/assets/stylesheets/foreman_datacenter/horizontal-scroll.css
|
94
94
|
- app/assets/stylesheets/foreman_datacenter/modal.css
|
95
|
-
- app/assets/stylesheets/foreman_datacenter/rack_show.css
|
96
95
|
- app/assets/stylesheets/foreman_datacenter/title_filter.css
|
97
96
|
- app/controllers/api/v2/foreman_datacenter/base_controller.rb
|
98
97
|
- app/controllers/api/v2/foreman_datacenter/console_port_templates_controller.rb
|
@@ -464,7 +463,6 @@ files:
|
|
464
463
|
- app/views/foreman_datacenter/rack_groups/show.html.erb
|
465
464
|
- app/views/foreman_datacenter/rack_groups/welcome.html.erb
|
466
465
|
- app/views/foreman_datacenter/racks/_device_position.html.erb
|
467
|
-
- app/views/foreman_datacenter/racks/_device_position_new.html.erb
|
468
466
|
- app/views/foreman_datacenter/racks/_dp.html.erb
|
469
467
|
- app/views/foreman_datacenter/racks/_form.html.erb
|
470
468
|
- app/views/foreman_datacenter/racks/_rack_groups.html.erb
|
@@ -590,7 +588,7 @@ files:
|
|
590
588
|
homepage: https://github.com/theforeman/foreman_datacenter
|
591
589
|
licenses: []
|
592
590
|
metadata: {}
|
593
|
-
post_install_message:
|
591
|
+
post_install_message:
|
594
592
|
rdoc_options: []
|
595
593
|
require_paths:
|
596
594
|
- lib
|
@@ -605,61 +603,62 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
605
603
|
- !ruby/object:Gem::Version
|
606
604
|
version: '0'
|
607
605
|
requirements: []
|
608
|
-
|
609
|
-
|
606
|
+
rubyforge_project:
|
607
|
+
rubygems_version: 2.7.6.2
|
608
|
+
signing_key:
|
610
609
|
specification_version: 4
|
611
610
|
summary: A plugin that lets you document your servers in a datacenter
|
612
611
|
test_files:
|
613
|
-
- test/
|
612
|
+
- test/factories/device_role.rb
|
613
|
+
- test/factories/foreman_datacenter_factories.rb
|
614
|
+
- test/factories/rack.rb
|
615
|
+
- test/factories/site.rb
|
616
|
+
- test/factories/manufacturer.rb
|
617
|
+
- test/factories/rack_group.rb
|
618
|
+
- test/factories/device.rb
|
619
|
+
- test/factories/device_type.rb
|
620
|
+
- test/factories/platform.rb
|
621
|
+
- test/test_plugin_helper.rb
|
622
|
+
- test/controllers/foreman_datacenter/sites_contoller_test.rb
|
623
|
+
- test/controllers/foreman_datacenter/devices_controller_test.rb
|
624
|
+
- test/controllers/foreman_datacenter/rack_groups_contoller_test.rb
|
625
|
+
- test/controllers/foreman_datacenter/manufacturers_controller_test.rb
|
626
|
+
- test/controllers/foreman_datacenter/racks_contoller_test.rb
|
627
|
+
- test/controllers/foreman_datacenter/manufacturers_contoller_test.rb
|
628
|
+
- test/controllers/foreman_datacenter/platforms_contoller_test.rb
|
629
|
+
- test/controllers/foreman_datacenter/device_roles_controller_test.rb
|
630
|
+
- test/controllers/foreman_datacenter/power_port_templates_contoller_test.rb
|
631
|
+
- test/controllers/foreman_datacenter/device_types_contoller_test.rb
|
632
|
+
- test/integration/foreman_datacenter/rack_group_test.rb
|
633
|
+
- test/integration/foreman_datacenter/rack_test.rb
|
634
|
+
- test/integration/foreman_datacenter/device_role_test.rb
|
635
|
+
- test/integration/foreman_datacenter/device_type_test.rb
|
636
|
+
- test/integration/foreman_datacenter/platform_test.rb
|
637
|
+
- test/integration/foreman_datacenter/site_test.rb
|
638
|
+
- test/integration/foreman_datacenter/manufacturer_test.rb
|
639
|
+
- test/fixtures/foreman_datacenter/platforms.yml
|
614
640
|
- test/fixtures/foreman_datacenter/console_server_port_templates.yml
|
615
|
-
- test/fixtures/foreman_datacenter/
|
616
|
-
- test/fixtures/foreman_datacenter/
|
617
|
-
- test/fixtures/foreman_datacenter/device_roles.yml
|
641
|
+
- test/fixtures/foreman_datacenter/console_server_ports.yml
|
642
|
+
- test/fixtures/foreman_datacenter/device_types.yml
|
618
643
|
- test/fixtures/foreman_datacenter/racks.yml
|
619
|
-
- test/fixtures/foreman_datacenter/
|
620
|
-
- test/fixtures/foreman_datacenter/
|
621
|
-
- test/fixtures/foreman_datacenter/management_devices.yml
|
622
|
-
- test/fixtures/foreman_datacenter/interface_templates.yml
|
623
|
-
- test/fixtures/foreman_datacenter/device_modules.yml
|
624
|
-
- test/fixtures/foreman_datacenter/device_interfaces.yml
|
625
|
-
- test/fixtures/foreman_datacenter/power_ports.yml
|
626
|
-
- test/fixtures/foreman_datacenter/devices.yml
|
644
|
+
- test/fixtures/foreman_datacenter/power_port_templates.yml
|
645
|
+
- test/fixtures/foreman_datacenter/rack_groups.yml
|
627
646
|
- test/fixtures/foreman_datacenter/power_outlet_templates.yml
|
628
|
-
- test/fixtures/foreman_datacenter/platforms.yml
|
629
647
|
- test/fixtures/foreman_datacenter/device_bay_templates.yml
|
630
|
-
- test/fixtures/foreman_datacenter/
|
648
|
+
- test/fixtures/foreman_datacenter/device_modules.yml
|
631
649
|
- test/fixtures/foreman_datacenter/console_ports.yml
|
650
|
+
- test/fixtures/foreman_datacenter/device_bays.yml
|
651
|
+
- test/fixtures/foreman_datacenter/sites.yml
|
652
|
+
- test/fixtures/foreman_datacenter/manufacturers.yml
|
653
|
+
- test/fixtures/foreman_datacenter/power_ports.yml
|
632
654
|
- test/fixtures/foreman_datacenter/console_port_templates.yml
|
633
|
-
- test/fixtures/foreman_datacenter/device_types.yml
|
634
655
|
- test/fixtures/foreman_datacenter/power_outlets.yml
|
635
|
-
- test/fixtures/foreman_datacenter/
|
636
|
-
- test/fixtures/foreman_datacenter/
|
637
|
-
- test/
|
638
|
-
- test/
|
639
|
-
- test/
|
640
|
-
- test/
|
641
|
-
- test/
|
642
|
-
- test/controllers/foreman_datacenter/sites_contoller_test.rb
|
643
|
-
- test/controllers/foreman_datacenter/device_types_contoller_test.rb
|
644
|
-
- test/controllers/foreman_datacenter/platforms_contoller_test.rb
|
645
|
-
- test/controllers/foreman_datacenter/manufacturers_controller_test.rb
|
646
|
-
- test/controllers/foreman_datacenter/racks_contoller_test.rb
|
647
|
-
- test/test_plugin_helper.rb
|
656
|
+
- test/fixtures/foreman_datacenter/management_devices.yml
|
657
|
+
- test/fixtures/foreman_datacenter/devices.yml
|
658
|
+
- test/fixtures/foreman_datacenter/device_roles.yml
|
659
|
+
- test/fixtures/foreman_datacenter/interface_templates.yml
|
660
|
+
- test/fixtures/foreman_datacenter/device_interfaces.yml
|
661
|
+
- test/fixtures/foreman_datacenter/comments.yml
|
662
|
+
- test/fixtures/foreman_datacenter/device_interface_connections.yml
|
648
663
|
- test/unit/foreman_datacenter_test.rb
|
649
664
|
- test/datacenter_helper.rb
|
650
|
-
- test/factories/foreman_datacenter_factories.rb
|
651
|
-
- test/factories/rack.rb
|
652
|
-
- test/factories/device_role.rb
|
653
|
-
- test/factories/site.rb
|
654
|
-
- test/factories/device_type.rb
|
655
|
-
- test/factories/device.rb
|
656
|
-
- test/factories/rack_group.rb
|
657
|
-
- test/factories/manufacturer.rb
|
658
|
-
- test/factories/platform.rb
|
659
|
-
- test/integration/foreman_datacenter/device_role_test.rb
|
660
|
-
- test/integration/foreman_datacenter/manufacturer_test.rb
|
661
|
-
- test/integration/foreman_datacenter/rack_test.rb
|
662
|
-
- test/integration/foreman_datacenter/site_test.rb
|
663
|
-
- test/integration/foreman_datacenter/platform_test.rb
|
664
|
-
- test/integration/foreman_datacenter/rack_group_test.rb
|
665
|
-
- test/integration/foreman_datacenter/device_type_test.rb
|
@@ -1,56 +0,0 @@
|
|
1
|
-
.rack-grid {
|
2
|
-
width: 100%;
|
3
|
-
border-bottom: 1px solid #d1d1d1;
|
4
|
-
border-left: 1px solid #d1d1d1;
|
5
|
-
display: inline-grid;
|
6
|
-
}
|
7
|
-
|
8
|
-
.item {
|
9
|
-
justify-content: center;
|
10
|
-
padding: 2px 10px 3px;
|
11
|
-
border-top: 1px solid #d1d1d1;
|
12
|
-
border-right: 1px solid #d1d1d1;
|
13
|
-
}
|
14
|
-
|
15
|
-
.item-dev {
|
16
|
-
position: relative;
|
17
|
-
text-align: center;
|
18
|
-
}
|
19
|
-
|
20
|
-
.dev-cell {
|
21
|
-
overflow: hidden;
|
22
|
-
text-overflow: ellipsis;
|
23
|
-
white-space: nowrap;
|
24
|
-
position: absolute;
|
25
|
-
height: inherit;
|
26
|
-
width: 90%;
|
27
|
-
text-align: center;
|
28
|
-
}
|
29
|
-
|
30
|
-
.a:hover {
|
31
|
-
overflow: visible;
|
32
|
-
}
|
33
|
-
|
34
|
-
.no-border {
|
35
|
-
border: none !important;
|
36
|
-
}
|
37
|
-
|
38
|
-
.panel-head-border {
|
39
|
-
border-top: 1px solid #ddd !important;
|
40
|
-
border-left: 1px solid #ddd !important;
|
41
|
-
border-right: 1px solid #ddd !important;
|
42
|
-
border-bottom: none !important;
|
43
|
-
}
|
44
|
-
|
45
|
-
.item-row {
|
46
|
-
white-space: nowrap;
|
47
|
-
text-overflow: ellipsis;
|
48
|
-
overflow: hidden;
|
49
|
-
}
|
50
|
-
|
51
|
-
.item-row:hover {
|
52
|
-
overflow: visible;
|
53
|
-
}
|
54
|
-
|
55
|
-
.item-empty-cell {
|
56
|
-
}
|
@@ -1,91 +0,0 @@
|
|
1
|
-
<div class="panel panel-default no-border">
|
2
|
-
<div class="panel-heading text-center panel-head-border">
|
3
|
-
<h4 class="nonmargintop nonmarginbottom">
|
4
|
-
<strong>
|
5
|
-
<%= link_to rack.name, rack_path(rack) %>
|
6
|
-
</strong>
|
7
|
-
<strong>
|
8
|
-
<%= link_to 'Export to CSV', export_to_csv_rack_path(rack.id), class: "btn btn-primary btn-xs pull-right" %>
|
9
|
-
</strong>
|
10
|
-
<strong>
|
11
|
-
<% if @order == "asc" %>
|
12
|
-
<%= link_to 'DESC', url_for(), class: "btn btn-success btn-xs pull-left" %>
|
13
|
-
<% else %>
|
14
|
-
<%= link_to 'ASC', url_for(order: "asc"), class: "btn btn-success btn-xs pull-left" %>
|
15
|
-
<% end %>
|
16
|
-
</strong>
|
17
|
-
</h4>
|
18
|
-
</div>
|
19
|
-
|
20
|
-
<!-- Grid -->
|
21
|
-
<div class="rack-grid rack-<%= rack.id %>" style="<%= grid_template(rack.grid_template_areas, rack.id, @order) %>">
|
22
|
-
|
23
|
-
<!-- Rows -->
|
24
|
-
<% (rack.height+1).times.each do |i| %>
|
25
|
-
<% if i == 0 && !rack.unpositioned_devices.empty? %>
|
26
|
-
<div class="item item-row" style="grid-area: rack-<%= rack.id %>-u<%= i %>">
|
27
|
-
<%= i == 0 ? "Unpositioned Devices" : "#{i}U"%>
|
28
|
-
</div>
|
29
|
-
<% else %>
|
30
|
-
<% if i != 0 %>
|
31
|
-
<div class="item item-row" style="grid-area: rack-<%= rack.id %>-u<%= i %>">
|
32
|
-
<%= "#{i}U" %>
|
33
|
-
<% rack.child_devices.each do |d| %>
|
34
|
-
<% if d.position == i %>
|
35
|
-
<strong>
|
36
|
-
<%= link_to "Child", device_path(d), class: "btn btn-primary btn-xs pull-right" %>
|
37
|
-
</strong>
|
38
|
-
<% end %>
|
39
|
-
<% end %>
|
40
|
-
</div>
|
41
|
-
<% else %>
|
42
|
-
<% next %>
|
43
|
-
<% end %>
|
44
|
-
<% end %>
|
45
|
-
<% end %>
|
46
|
-
|
47
|
-
<!-- Empty cells -->
|
48
|
-
<% rack.empty_cells.each do |c| %>
|
49
|
-
<div class="item item-empty-cell" style="<%= grid_empty_style(c, rack.id)%>">
|
50
|
-
|
51
|
-
</div>
|
52
|
-
<% end %>
|
53
|
-
|
54
|
-
<!-- Devices -->
|
55
|
-
<% rack.devices.each do |d| %>
|
56
|
-
<% if !d.position.nil? && d.size != 0 && d.position != 0 %>
|
57
|
-
<div class="item item-dev" style="grid-area: device-<%= d.id %>">
|
58
|
-
<div class="dev-cell" style="<%= margin_style(d.size) %>">
|
59
|
-
<div class="<%= "label " + d.device_role.color.downcase.gsub(" ","") %>" style="border-radius:40px;border:0px;"> </div>
|
60
|
-
<%= link_to d.name, device_path(d) %>
|
61
|
-
<% if d.side.nil? %>
|
62
|
-
*
|
63
|
-
<% end %>
|
64
|
-
<% if d.size.nil? %>
|
65
|
-
**
|
66
|
-
<% end %>
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
<% end %>
|
70
|
-
<% end %>
|
71
|
-
|
72
|
-
<!-- Unpositioned devices -->
|
73
|
-
<% if rack.unpositioned_devices.count != 0 %>
|
74
|
-
<div class="item item-dev" style="grid-area: rack-<%= rack.id %>-unpos-devs">
|
75
|
-
<% rack.unpositioned_devices.each do |d| %>
|
76
|
-
<div class="<%= "label " + d.device_role.color.downcase.gsub(" ","") %>" style="border-radius:40px;border:0px;"> </div>
|
77
|
-
<%= link_to d.name, device_path(d) %>
|
78
|
-
<% if d.side.nil? %>
|
79
|
-
*
|
80
|
-
<% end %>
|
81
|
-
<% if d.size.nil? %>
|
82
|
-
**
|
83
|
-
<% end %>
|
84
|
-
<br>
|
85
|
-
<% end %>
|
86
|
-
</div>
|
87
|
-
<% end %>
|
88
|
-
|
89
|
-
</div>
|
90
|
-
|
91
|
-
</div>
|