1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

342 lines
15 KiB
HTML
Raw Normal View History

2021-03-02 15:58:33 -05:00
{% extends 'generic/object.html' %}
{% load buttons %}
2016-03-01 11:23:03 -05:00
{% load helpers %}
{% load static %}
{% load plugins %}
2016-03-01 11:23:03 -05:00
2021-03-02 15:58:33 -05:00
{% block title %}Rack {{ object }}{% endblock %}
{% block breadcrumbs %}
2021-07-20 12:14:01 -04:00
{{ block.super }}
Merge branch 'feature' of https://github.com/netbox-community/netbox into feature # Conflicts: # netbox/dcim/tables/template_code.py # netbox/netbox/views/__init__.py # netbox/project-static/css/base.css # netbox/templates/base.html # netbox/templates/circuits/circuit.html # netbox/templates/circuits/circuittermination_edit.html # netbox/templates/circuits/inc/circuit_termination.html # netbox/templates/circuits/provider.html # netbox/templates/dcim/device.html # netbox/templates/dcim/device/base.html # netbox/templates/dcim/device_component.html # netbox/templates/dcim/devicetype.html # netbox/templates/dcim/inc/device_napalm_tabs.html # netbox/templates/dcim/rack.html # netbox/templates/dcim/site.html # netbox/templates/dcim/virtualchassis.html # netbox/templates/extras/configcontext.html # netbox/templates/extras/object_journal.html # netbox/templates/extras/tag.html # netbox/templates/generic/object.html # netbox/templates/generic/object_list.html # netbox/templates/home.html # netbox/templates/inc/nav_menu.html # netbox/templates/ipam/aggregate.html # netbox/templates/ipam/ipaddress.html # netbox/templates/ipam/prefix.html # netbox/templates/ipam/vlan.html # netbox/templates/ipam/vlangroup_edit.html # netbox/templates/ipam/vlangroup_vlans.html # netbox/templates/secrets/secret.html # netbox/templates/tenancy/tenant.html # netbox/templates/users/api_tokens.html # netbox/templates/virtualization/cluster.html # netbox/templates/virtualization/vminterface_edit.html # netbox/utilities/forms/fields.py # netbox/utilities/templates/buttons/export.html
2021-04-14 11:30:15 -07:00
<li class="breadcrumb-item"><a href="{% url 'dcim:rack_list' %}?site_id={{ object.site.pk }}">{{ object.site }}</a></li>
2021-07-20 12:14:01 -04:00
{% if object.location %}
{% for location in object.location.get_ancestors %}
<li class="breadcrumb-item"><a href="{% url 'dcim:rack_list' %}?location_id={{ location.pk }}">{{ location }}</a></li>
2021-03-02 15:58:33 -05:00
{% endfor %}
2021-07-20 12:14:01 -04:00
<li class="breadcrumb-item"><a href="{% url 'dcim:rack_list' %}?location_id={{ object.location.pk }}">{{ object.location }}</a></li>
2021-03-02 15:58:33 -05:00
{% endif %}
{% endblock %}
2021-03-19 09:25:27 -07:00
{% block extra_controls %}
<select class="btn btn-sm btn-outline-dark rack-view">
<option value="images-and-labels" selected="selected">Images and Labels</option>
<option value="images-only">Images only</option>
<option value="labels-only">Labels only</option>
</select>
<a {% if prev_rack %}href="{% url 'dcim:rack' pk=prev_rack.pk %}{% endif %}" class="btn btn-sm btn-primary{% if not prev_rack %} disabled{% endif %}">
2021-07-20 13:46:59 -04:00
<i class="mdi mdi-chevron-left" aria-hidden="true"></i> Previous
2021-03-02 15:58:33 -05:00
</a>
<a {% if next_rack %}href="{% url 'dcim:rack' pk=next_rack.pk %}{% endif %}" class="btn btn-sm btn-primary{% if not next_rack %} disabled{% endif %}">
2021-07-20 13:46:59 -04:00
<i class="mdi mdi-chevron-right" aria-hidden="true"></i> Next
2021-03-02 15:58:33 -05:00
</a>
2018-06-14 16:15:14 -04:00
{% endblock %}
{% block content %}
2021-07-21 11:20:35 -04:00
<div class="row">
<div class="col col-12 col-xl-5">
<div class="card">
<h5 class="card-header">
Rack
</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Site</th>
<td>
{% if object.site.region %}
<a href="{{ object.site.region.get_absolute_url }}">{{ object.site.region }}</a> /
2017-02-28 16:10:53 -05:00
{% endif %}
<a href="{{ object.site.get_absolute_url }}">{{ object.site }}</a>
</td>
2021-07-21 11:20:35 -04:00
</tr>
<tr>
2021-07-21 11:20:35 -04:00
<th scope="row">Location</th>
<td>
2021-07-21 11:20:35 -04:00
{% if object.location %}
{% for location in object.location.get_ancestors %}
<a href="{{ location.get_absolute_url }}">{{ location }}</a> /
{% endfor %}
2021-07-21 11:20:35 -04:00
<a href="{{ object.location.get_absolute_url }}">{{ object.location }}</a>
{% else %}
<span class="text-muted">None</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Facility ID</th>
<td>{{ object.facility_id|placeholder }}</td>
</tr>
<tr>
<th scope="row">Tenant</th>
<td>
{% if object.tenant %}
{% if object.tenant.group %}
<a href="{{ object.tenant.group.get_absolute_url }}">{{ object.tenant.group }}</a> /
{% endif %}
<a href="{{ object.tenant.get_absolute_url }}">{{ object.tenant }}</a>
{% else %}
<span class="text-muted">None</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Status</th>
<td>
<span class="badge bg-{{ object.get_status_class }}">{{ object.get_status_display }}</span>
</td>
</tr>
<tr>
<th scope="row">Role</th>
<td>
{% if object.role %}
<a href="{{ object.role.get_absolute_url }}">{{ object.role }}</a>
{% else %}
<span class="text-muted">None</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Serial Number</th>
<td class="font-monospace">{{ object.serial|placeholder }}</td>
</tr>
2018-11-02 09:17:51 -04:00
<tr>
<th scope="row">Asset Tag</th>
<td class="font-monospace">{{ object.asset_tag|placeholder }}</td>
2018-11-02 09:17:51 -04:00
</tr>
<tr>
<th scope="row">Devices</th>
<td>
<a href="{% url 'dcim:device_list' %}?rack_id={{ object.id }}">{{ device_count }}</a>
</td>
</tr>
<tr>
<th scope="row">Space Utilization</th>
<td>{% utilization_graph object.get_utilization %}</td>
</tr>
<tr>
<th scope="row">Power Utilization</th>
<td>{% utilization_graph object.get_power_utilization %}</td>
</tr>
</table>
</div>
</div>
<div class="card">
<h5 class="card-header">
Dimensions
</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Type</th>
<td>
{% if object.type %}
{{ object.get_type_display }}
{% else %}
<span class="text-muted">None</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Width</th>
<td>{{ object.get_width_display }}</td>
</tr>
<tr>
<th scope="row">Height</th>
<td>{{ object.u_height }}U ({% if object.desc_units %}descending{% else %}ascending{% endif %})</td>
</tr>
<tr>
<th scope="row">Outer Width</th>
<td>
{% if object.outer_width %}
<span>{{ object.outer_width }} {{ object.get_outer_unit_display }}</span>
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Outer Depth</th>
<td>
{% if object.outer_depth %}
<span>{{ object.outer_depth }} {{ object.get_outer_unit_display }}</span>
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
</table>
</div>
2016-03-01 11:23:03 -05:00
</div>
2020-11-19 13:53:37 -05:00
{% include 'inc/custom_fields_panel.html' %}
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='dcim:rack_list' %}
{% include 'inc/comments_panel.html' %}
2019-03-12 11:36:29 -04:00
{% if power_feeds %}
<div class="card">
<h5 class="card-header">
Power Feeds
</h5>
<div class="card-body">
<table class="table">
2019-03-12 11:36:29 -04:00
<tr>
<th>Panel</th>
<th>Feed</th>
<th>Status</th>
<th>Type</th>
<th>Utilization</th>
2016-03-01 11:23:03 -05:00
</tr>
{% for powerfeed in power_feeds %}
<tr>
<td>
<a href="{{ powerfeed.power_panel.get_absolute_url }}">{{ powerfeed.power_panel.name }}</a>
<td>
<a href="{{ powerfeed.get_absolute_url }}">{{ powerfeed.name }}</a>
</td>
<td>
<span class="badge bg-{{ powerfeed.get_status_class }}">{{ powerfeed.get_status_display }}</span>
</td>
<td>
<span class="badge bg-{{ powerfeed.get_type_class }}">{{ powerfeed.get_type_display }}</span>
</td>
{% with power_port=powerfeed.connected_endpoint %}
{% if power_port %}
<td>{% utilization_graph power_port.get_power_draw.allocated|percentage:powerfeed.available_power %}</td>
{% else %}
<td class="text-muted">N/A</td>
{% endif %}
{% endwith %}
</tr>
{% endfor %}
</table>
</div>
2019-03-12 11:36:29 -04:00
</div>
{% endif %}
{% include 'inc/image_attachments_panel.html' %}
<div class="card">
<h5 class="card-header">
Reservations
</h5>
<div class="card-body">
{% if reservations %}
<table class="table table-hover">
<tr>
<th>Units</th>
<th>Tenant</th>
<th>Description</th>
<th></th>
</tr>
{% for resv in reservations %}
<tr>
<td>
<a href="{{ resv.get_absolute_url }}">{{ resv.unit_list }}</a>
</td>
2017-11-15 14:06:58 -05:00
<td>
{% if resv.tenant %}
<a href="{{ resv.tenant.get_absolute_url }}">{{ resv.tenant }}</a>
{% else %}
<span class="text-muted">None</span>
{% endif %}
</td>
<td>
{{ resv.description }}<br />
<small>{{ resv.user }} &middot; {{ resv.created|annotated_date }}</small>
</td>
<td class="text-end noprint">
{% if perms.dcim.change_rackreservation %}
2021-04-18 16:42:28 -07:00
<a href="{% url 'dcim:rackreservation_edit' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-warning btn-sm" title="Edit Reservation">
<i class="mdi mdi-pencil" aria-hidden="true"></i>
</a>
{% endif %}
{% if perms.dcim.delete_rackreservation %}
2021-04-18 16:42:28 -07:00
<a href="{% url 'dcim:rackreservation_delete' pk=resv.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-danger btn-sm" title="Delete Reservation">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i>
</a>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="text-muted">None</div>
{% endif %}
</div>
{% if perms.dcim.add_rackreservation %}
<div class="card-footer text-end noprint">
<a href="{% url 'dcim:rackreservation_add' %}?rack={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-primary btn-sm">
<i class="mdi mdi-plus-thick" aria-hidden="true"></i>
Add a Reservation
</a>
</div>
{% endif %}
</div>
{% plugin_left_page object %}
2021-07-21 11:20:35 -04:00
</div>
<div class="col col-12 col-xl-7">
2019-04-02 13:50:57 -04:00
<div class="row" style="margin-bottom: 20px">
2021-04-30 15:55:37 -07:00
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: 30px">
<h4>Front</h4>
{% include 'dcim/inc/rack_elevation.html' with face='front' %}
</div>
2019-04-02 13:50:57 -04:00
</div>
2021-04-30 15:55:37 -07:00
<div class="col col-md-6 col-sm-6 col-xs-12 text-center">
<div style="margin-left: 30px">
<h4>Rear</h4>
{% include 'dcim/inc/rack_elevation.html' with face='rear' %}
</div>
2019-04-02 13:50:57 -04:00
</div>
</div>
<div class="card">
<h5 class="card-header">
Non-Racked Devices
</h5>
<div class="card-body">
2019-03-12 11:36:29 -04:00
{% if nonracked_devices %}
<table class="table table-hover">
2019-03-12 11:36:29 -04:00
<tr>
<th>Name</th>
<th>Role</th>
<th>Type</th>
<th colspan="2">Parent Device</th>
2019-03-12 11:36:29 -04:00
</tr>
{% for device in nonracked_devices %}
<tr{% if device.device_type.u_height %} class="warning"{% endif %}>
<td>
<a href="{% url 'dcim:device' pk=device.pk %}">{{ device }}</a>
</td>
<td>{{ device.device_role }}</td>
<td>{{ device.device_type }}</td>
{% if device.parent_bay %}
<td><a href="{{ device.parent_bay.device.get_absolute_url }}">{{ device.parent_bay.device }}</a></td>
<td>{{ device.parent_bay }}</td>
{% else %}
<td colspan="2" class="text-muted">&mdash;</td>
{% endif %}
</tr>
2019-03-12 11:36:29 -04:00
{% endfor %}
</table>
{% else %}
<div class="text-muted">
None
</div>
2019-03-12 11:36:29 -04:00
{% endif %}
</div>
2019-03-12 11:36:29 -04:00
{% if perms.dcim.add_device %}
<div class="card-footer text-end noprint">
<a href="{% url 'dcim:device_add' %}?site={{ object.site.pk }}&rack={{ object.pk }}" class="btn btn-primary btn-sm">
<i class="mdi mdi-plus-thick" aria-hidden="true"></i>
Add a Non-Racked Device
2019-03-12 11:36:29 -04:00
</a>
</div>
{% endif %}
</div>
{% plugin_right_page object %}
</div>
2021-07-21 11:20:35 -04:00
</div>
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
2016-03-01 11:23:03 -05:00
{% endblock %}