mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Closes #5225: CircuitTermination port_speed is now optional
This commit is contained in:
parent
96650b0216
commit
30778a9c40
@ -57,6 +57,7 @@ All end-to-end cable paths are now cached using the new CablePath model. This al
|
|||||||
* [#4360](https://github.com/netbox-community/netbox/issues/4360) - Remove support for the Django template language from export templates
|
* [#4360](https://github.com/netbox-community/netbox/issues/4360) - Remove support for the Django template language from export templates
|
||||||
* [#4878](https://github.com/netbox-community/netbox/issues/4878) - Custom field data is now stored directly on each object
|
* [#4878](https://github.com/netbox-community/netbox/issues/4878) - Custom field data is now stored directly on each object
|
||||||
* [#4941](https://github.com/netbox-community/netbox/issues/4941) - `commit` argument is now required argument in a custom script's `run()` method
|
* [#4941](https://github.com/netbox-community/netbox/issues/4941) - `commit` argument is now required argument in a custom script's `run()` method
|
||||||
|
* [#5225](https://github.com/netbox-community/netbox/issues/5225) - Circuit termination port speed is now an optional field
|
||||||
|
|
||||||
### REST API Changes
|
### REST API Changes
|
||||||
|
|
||||||
@ -65,6 +66,7 @@ All end-to-end cable paths are now cached using the new CablePath model. This al
|
|||||||
* Added the `/trace/` endpoint
|
* Added the `/trace/` endpoint
|
||||||
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
|
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
|
||||||
* Added `cable_peer` and `cable_peer_type`
|
* Added `cable_peer` and `cable_peer_type`
|
||||||
|
* `port_speed` may now be null
|
||||||
* dcim.Cable: Added `custom_fields`
|
* dcim.Cable: Added `custom_fields`
|
||||||
* dcim.ConsolePort:
|
* dcim.ConsolePort:
|
||||||
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
|
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.1 on 2020-10-09 17:54
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('circuits', '0022_cablepath'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='circuittermination',
|
||||||
|
name='port_speed',
|
||||||
|
field=models.PositiveIntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -248,7 +248,9 @@ class CircuitTermination(PathEndpoint, CableTermination):
|
|||||||
related_name='circuit_terminations'
|
related_name='circuit_terminations'
|
||||||
)
|
)
|
||||||
port_speed = models.PositiveIntegerField(
|
port_speed = models.PositiveIntegerField(
|
||||||
verbose_name='Port speed (Kbps)'
|
verbose_name='Port speed (Kbps)',
|
||||||
|
blank=True,
|
||||||
|
null=True
|
||||||
)
|
)
|
||||||
upstream_speed = models.PositiveIntegerField(
|
upstream_speed = models.PositiveIntegerField(
|
||||||
blank=True,
|
blank=True,
|
||||||
|
@ -153,10 +153,10 @@ class CircuitTerminationTest(APIViewTestCases.APIViewTestCase):
|
|||||||
Circuit.objects.bulk_create(circuits)
|
Circuit.objects.bulk_create(circuits)
|
||||||
|
|
||||||
circuit_terminations = (
|
circuit_terminations = (
|
||||||
CircuitTermination(circuit=circuits[0], site=sites[0], port_speed=100000, term_side=SIDE_A),
|
CircuitTermination(circuit=circuits[0], site=sites[0], term_side=SIDE_A),
|
||||||
CircuitTermination(circuit=circuits[0], site=sites[1], port_speed=100000, term_side=SIDE_Z),
|
CircuitTermination(circuit=circuits[0], site=sites[1], term_side=SIDE_Z),
|
||||||
CircuitTermination(circuit=circuits[1], site=sites[0], port_speed=100000, term_side=SIDE_A),
|
CircuitTermination(circuit=circuits[1], site=sites[0], term_side=SIDE_A),
|
||||||
CircuitTermination(circuit=circuits[1], site=sites[1], port_speed=100000, term_side=SIDE_Z),
|
CircuitTermination(circuit=circuits[1], site=sites[1], term_side=SIDE_Z),
|
||||||
)
|
)
|
||||||
CircuitTermination.objects.bulk_create(circuit_terminations)
|
CircuitTermination.objects.bulk_create(circuit_terminations)
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ class ProviderTestCase(TestCase):
|
|||||||
Circuit.objects.bulk_create(circuits)
|
Circuit.objects.bulk_create(circuits)
|
||||||
|
|
||||||
CircuitTermination.objects.bulk_create((
|
CircuitTermination.objects.bulk_create((
|
||||||
CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A', port_speed=1000),
|
CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A'),
|
||||||
CircuitTermination(circuit=circuits[1], site=sites[0], term_side='A', port_speed=1000),
|
CircuitTermination(circuit=circuits[1], site=sites[0], term_side='A'),
|
||||||
))
|
))
|
||||||
|
|
||||||
def test_id(self):
|
def test_id(self):
|
||||||
@ -176,9 +176,9 @@ class CircuitTestCase(TestCase):
|
|||||||
Circuit.objects.bulk_create(circuits)
|
Circuit.objects.bulk_create(circuits)
|
||||||
|
|
||||||
circuit_terminations = ((
|
circuit_terminations = ((
|
||||||
CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A', port_speed=1000),
|
CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A'),
|
||||||
CircuitTermination(circuit=circuits[1], site=sites[1], term_side='A', port_speed=1000),
|
CircuitTermination(circuit=circuits[1], site=sites[1], term_side='A'),
|
||||||
CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A', port_speed=1000),
|
CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A'),
|
||||||
))
|
))
|
||||||
CircuitTermination.objects.bulk_create(circuit_terminations)
|
CircuitTermination.objects.bulk_create(circuit_terminations)
|
||||||
|
|
||||||
|
@ -234,9 +234,7 @@ class CablePathTestCase(TestCase):
|
|||||||
[IF1] --C1-- [CT1A]
|
[IF1] --C1-- [CT1A]
|
||||||
"""
|
"""
|
||||||
interface1 = Interface.objects.create(device=self.device, name='Interface 1')
|
interface1 = Interface.objects.create(device=self.device, name='Interface 1')
|
||||||
circuittermination1 = CircuitTermination.objects.create(
|
circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A')
|
||||||
circuit=self.circuit, site=self.site, term_side='A', port_speed=1000
|
|
||||||
)
|
|
||||||
|
|
||||||
# Create cable 1
|
# Create cable 1
|
||||||
cable1 = Cable(termination_a=interface1, termination_b=circuittermination1)
|
cable1 = Cable(termination_a=interface1, termination_b=circuittermination1)
|
||||||
|
@ -390,8 +390,8 @@ class CableTestCase(TestCase):
|
|||||||
self.provider = Provider.objects.create(name='Provider 1', slug='provider-1')
|
self.provider = Provider.objects.create(name='Provider 1', slug='provider-1')
|
||||||
self.circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
|
self.circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
|
||||||
self.circuit = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='1')
|
self.circuit = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='1')
|
||||||
self.circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=site, term_side='A', port_speed=1000)
|
self.circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=site, term_side='A')
|
||||||
self.circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=site, term_side='Z', port_speed=1000)
|
self.circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=site, term_side='Z')
|
||||||
|
|
||||||
def test_cable_creation(self):
|
def test_cable_creation(self):
|
||||||
"""
|
"""
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
<div class="panel-heading"><strong>Termination Details</strong></div>
|
<div class="panel-heading"><strong>Termination Details</strong></div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-3 control-label required" for="id_port_speed">{{ form.port_speed.label }}</label>
|
<label class="col-md-3 control-label" for="id_port_speed">{{ form.port_speed.label }}</label>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
{{ form.port_speed }}
|
{{ form.port_speed }}
|
||||||
|
@ -83,11 +83,13 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Speed</td>
|
<td>Speed</td>
|
||||||
<td>
|
<td>
|
||||||
{% if termination.upstream_speed %}
|
{% if termination.port_speed and termination.upstream_speed %}
|
||||||
<i class="fa fa-arrow-down" title="Downstream"></i> {{ termination.port_speed|humanize_speed }}
|
<i class="fa fa-arrow-down" title="Downstream"></i> {{ termination.port_speed|humanize_speed }}
|
||||||
<i class="fa fa-arrow-up" title="Upstream"></i> {{ termination.upstream_speed|humanize_speed }}
|
<i class="fa fa-arrow-up" title="Upstream"></i> {{ termination.upstream_speed|humanize_speed }}
|
||||||
{% else %}
|
{% elif termination.port_speed %}
|
||||||
{{ termination.port_speed|humanize_speed }}
|
{{ termination.port_speed|humanize_speed }}
|
||||||
|
{% else %}
|
||||||
|
<span class="text-muted">—</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user