Skip to content

Commit 6c1c695

Browse files
Merge pull request #6172 from netbox-community/develop
Release v2.10.10
2 parents b493d73 + 8bdab34 commit 6c1c695

File tree

19 files changed

+234
-83
lines changed

19 files changed

+234
-83
lines changed

.github/ISSUE_TEMPLATE/bug_report.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,3 @@ body:
5656
placeholder: "A TypeError exception was raised"
5757
validations:
5858
required: true
59-
- type: markdown
60-
attributes:
61-
value: |
62-
### Additional information
63-
You can use the space below to provide any additional information or to attach files.

.github/ISSUE_TEMPLATE/documentation_change.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,3 @@ body:
3333
description: "Describe the proposed changes and why they are necessary"
3434
validations:
3535
required: true
36-
- type: markdown
37-
attributes:
38-
value: |
39-
### Additional information
40-
You can use the space below to provide any additional information or to attach files.

.github/ISSUE_TEMPLATE/feature_request.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,3 @@ body:
5151
description: "List any new dependencies on external libraries or services that this
5252
new feature would introduce. For example, does the proposal require the installation
5353
of a new Python package? (Not all new features introduce new dependencies.)"
54-
- type: markdown
55-
attributes:
56-
value: |
57-
### Additional information
58-
You can use the space below to provide any additional information or to attach files.

.github/ISSUE_TEMPLATE/housekeeping.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,3 @@ body:
2020
description: "Please provide justification for the proposed change(s)."
2121
validations:
2222
required: true
23-
- type: markdown
24-
attributes:
25-
value: |
26-
### Additional information
27-
You can use the space below to provide any additional information or to attach files.

.github/stale.yml

Lines changed: 0 additions & 30 deletions
This file was deleted.

.github/workflows/stale.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# close-stale-issues (https://github.com/marketplace/actions/close-stale-issues)
2+
name: 'Close stale issues/PRs'
3+
on:
4+
schedule:
5+
- cron: '0 4 * * *'
6+
7+
jobs:
8+
stale:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/stale@v3
12+
with:
13+
close-issue-message: >
14+
This issue has been automatically closed due to lack of activity. In an
15+
effort to reduce noise, please do not comment any further. Note that the
16+
core maintainers may elect to reopen this issue at a later date if deemed
17+
necessary.
18+
close-pr-message: >
19+
This PR has been automatically closed due to lack of activity.
20+
days-before-stale: 45
21+
days-before-close: 15
22+
exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone'
23+
remove-stale-when-updated: false
24+
stale-issue-label: 'pending closure'
25+
stale-issue-message: >
26+
This issue has been automatically marked as stale because it has not had
27+
recent activity. It will be closed if no further activity occurs. NetBox
28+
is governed by a small group of core maintainers which means not all opened
29+
issues may receive direct feedback. Please see our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
30+
stale-pr-label: 'pending closure'
31+
stale-pr-message: >
32+
This PR has been automatically marked as stale because it has not had
33+
recent activity. It will be closed automatically if no further action is
34+
taken.

docs/release-notes/version-2.10.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# NetBox v2.10
22

3+
## v2.10.10 (2021-04-15)
4+
5+
### Enhancements
6+
7+
* [#5796](https://github.com/netbox-community/netbox/issues/5796) - Add DC terminal power port, outlet types
8+
* [#5980](https://github.com/netbox-community/netbox/issues/5980) - Add Saf-D-Grid power port, outlet types
9+
* [#6157](https://github.com/netbox-community/netbox/issues/6157) - Support Markdown rendering for report logs
10+
* [#6160](https://github.com/netbox-community/netbox/issues/6160) - Add F connector port type
11+
* [#6168](https://github.com/netbox-community/netbox/issues/6168) - Add SFP56 50GE interface type
12+
13+
### Bug Fixes
14+
15+
* [#5419](https://github.com/netbox-community/netbox/issues/5419) - Update parent device/VM when deleting a primary IP
16+
* [#5643](https://github.com/netbox-community/netbox/issues/5643) - Fix VLAN assignment when editing VM interfaces in bulk
17+
* [#5652](https://github.com/netbox-community/netbox/issues/5652) - Update object data when renaming a custom field
18+
* [#6056](https://github.com/netbox-community/netbox/issues/6056) - Optimize change log cleanup
19+
* [#6144](https://github.com/netbox-community/netbox/issues/6144) - Fix MAC address field display in VM interfaces search form
20+
* [#6152](https://github.com/netbox-community/netbox/issues/6152) - Fix custom field filtering for cables, virtual chassis
21+
* [#6162](https://github.com/netbox-community/netbox/issues/6162) - Fix choice field filters (multiple models)
22+
23+
---
24+
325
## v2.10.9 (2021-04-12)
426

527
### Enhancements

docs/rest-api/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ curl -s -X GET http://netbox/api/ipam/ip-addresses/5618/ | jq '.'
387387

388388
### Creating a New Object
389389

390-
To create a new object, make a `POST` request to the model's _list_ endpoint with JSON data pertaining to the object being created. Note that a REST API token is required for all write operations; see the [authentication documentation](../authentication/index.md) for more information. Also be sure to set the `Content-Type` HTTP header to `application/json`.
390+
To create a new object, make a `POST` request to the model's _list_ endpoint with JSON data pertaining to the object being created. Note that a REST API token is required for all write operations; see the [authentication documentation](authentication.md) for more information. Also be sure to set the `Content-Type` HTTP header to `application/json`.
391391

392392
```no-highlight
393393
curl -s -X POST \

netbox/dcim/choices.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@ class PowerPortTypeChoices(ChoiceSet):
314314
TYPE_USB_MICRO_B = 'usb-micro-b'
315315
TYPE_USB_3_B = 'usb-3-b'
316316
TYPE_USB_3_MICROB = 'usb-3-micro-b'
317+
# Direct current (DC)
318+
TYPE_DC = 'dc-terminal'
319+
# Proprietary
320+
TYPE_SAF_D_GRID = 'saf-d-grid'
317321

318322
CHOICES = (
319323
('IEC 60320', (
@@ -414,6 +418,12 @@ class PowerPortTypeChoices(ChoiceSet):
414418
(TYPE_USB_3_B, 'USB 3.0 Type B'),
415419
(TYPE_USB_3_MICROB, 'USB 3.0 Micro B'),
416420
)),
421+
('DC', (
422+
(TYPE_DC, 'DC Terminal'),
423+
)),
424+
('Proprietary', (
425+
(TYPE_SAF_D_GRID, 'Saf-D-Grid'),
426+
)),
417427
)
418428

419429

@@ -507,8 +517,11 @@ class PowerOutletTypeChoices(ChoiceSet):
507517
TYPE_USB_A = 'usb-a'
508518
TYPE_USB_MICROB = 'usb-micro-b'
509519
TYPE_USB_C = 'usb-c'
520+
# Direct current (DC)
521+
TYPE_DC = 'dc-terminal'
510522
# Proprietary
511523
TYPE_HDOT_CX = 'hdot-cx'
524+
TYPE_SAF_D_GRID = 'saf-d-grid'
512525

513526
CHOICES = (
514527
('IEC 60320', (
@@ -602,8 +615,12 @@ class PowerOutletTypeChoices(ChoiceSet):
602615
(TYPE_USB_MICROB, 'USB Micro B'),
603616
(TYPE_USB_C, 'USB Type C'),
604617
)),
618+
('DC', (
619+
(TYPE_DC, 'DC Terminal'),
620+
)),
605621
('Proprietary', (
606622
(TYPE_HDOT_CX, 'HDOT Cx'),
623+
(TYPE_SAF_D_GRID, 'Saf-D-Grid'),
607624
)),
608625
)
609626

@@ -645,6 +662,7 @@ class InterfaceTypeChoices(ChoiceSet):
645662
TYPE_10GE_XENPAK = '10gbase-x-xenpak'
646663
TYPE_10GE_X2 = '10gbase-x-x2'
647664
TYPE_25GE_SFP28 = '25gbase-x-sfp28'
665+
TYPE_50GE_SFP56 = '50gbase-x-sfp56'
648666
TYPE_40GE_QSFP_PLUS = '40gbase-x-qsfpp'
649667
TYPE_50GE_QSFP28 = '50gbase-x-sfp28'
650668
TYPE_100GE_CFP = '100gbase-x-cfp'
@@ -749,6 +767,7 @@ class InterfaceTypeChoices(ChoiceSet):
749767
(TYPE_10GE_XENPAK, 'XENPAK (10GE)'),
750768
(TYPE_10GE_X2, 'X2 (10GE)'),
751769
(TYPE_25GE_SFP28, 'SFP28 (25GE)'),
770+
(TYPE_50GE_SFP56, 'SFP56 (50GE)'),
752771
(TYPE_40GE_QSFP_PLUS, 'QSFP+ (40GE)'),
753772
(TYPE_50GE_QSFP28, 'QSFP28 (50GE)'),
754773
(TYPE_100GE_CFP, 'CFP (100GE)'),
@@ -881,6 +900,7 @@ class PortTypeChoices(ChoiceSet):
881900
TYPE_TERA1P = 'tera-1p'
882901
TYPE_110_PUNCH = '110-punch'
883902
TYPE_BNC = 'bnc'
903+
TYPE_F = 'f'
884904
TYPE_MRJ21 = 'mrj21'
885905
TYPE_ST = 'st'
886906
TYPE_SC = 'sc'
@@ -910,6 +930,7 @@ class PortTypeChoices(ChoiceSet):
910930
(TYPE_TERA1P, 'TERA 1P'),
911931
(TYPE_110_PUNCH, '110 Punch'),
912932
(TYPE_BNC, 'BNC'),
933+
(TYPE_F, 'F Connector'),
913934
(TYPE_MRJ21, 'MRJ21'),
914935
),
915936
),

netbox/dcim/filters.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import django_filters
22
from django.contrib.auth.models import User
3-
from django.db.models import Count
43

54
from extras.filters import CustomFieldModelFilterSet, LocalConfigContextFilterSet, CreatedUpdatedFilterSet
65
from tenancy.filters import TenancyFilterSet
@@ -447,27 +446,43 @@ class Meta:
447446

448447

449448
class PowerOutletTemplateFilterSet(BaseFilterSet, DeviceTypeComponentFilterSet):
449+
feed_leg = django_filters.MultipleChoiceFilter(
450+
choices=PowerOutletFeedLegChoices,
451+
null_value=None
452+
)
450453

451454
class Meta:
452455
model = PowerOutletTemplate
453456
fields = ['id', 'name', 'type', 'feed_leg']
454457

455458

456459
class InterfaceTemplateFilterSet(BaseFilterSet, DeviceTypeComponentFilterSet):
460+
type = django_filters.MultipleChoiceFilter(
461+
choices=InterfaceTypeChoices,
462+
null_value=None
463+
)
457464

458465
class Meta:
459466
model = InterfaceTemplate
460467
fields = ['id', 'name', 'type', 'mgmt_only']
461468

462469

463470
class FrontPortTemplateFilterSet(BaseFilterSet, DeviceTypeComponentFilterSet):
471+
type = django_filters.MultipleChoiceFilter(
472+
choices=PortTypeChoices,
473+
null_value=None
474+
)
464475

465476
class Meta:
466477
model = FrontPortTemplate
467478
fields = ['id', 'name', 'type']
468479

469480

470481
class RearPortTemplateFilterSet(BaseFilterSet, DeviceTypeComponentFilterSet):
482+
type = django_filters.MultipleChoiceFilter(
483+
choices=PortTypeChoices,
484+
null_value=None
485+
)
471486

472487
class Meta:
473488
model = RearPortTemplate
@@ -818,6 +833,10 @@ class PowerOutletFilterSet(BaseFilterSet, DeviceComponentFilterSet, CableTermina
818833
choices=PowerOutletTypeChoices,
819834
null_value=None
820835
)
836+
feed_leg = django_filters.MultipleChoiceFilter(
837+
choices=PowerOutletFeedLegChoices,
838+
null_value=None
839+
)
821840

822841
class Meta:
823842
model = PowerOutlet
@@ -918,13 +937,21 @@ def filter_kind(self, queryset, name, value):
918937

919938

920939
class FrontPortFilterSet(BaseFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet):
940+
type = django_filters.MultipleChoiceFilter(
941+
choices=PortTypeChoices,
942+
null_value=None
943+
)
921944

922945
class Meta:
923946
model = FrontPort
924947
fields = ['id', 'name', 'label', 'type', 'description']
925948

926949

927950
class RearPortFilterSet(BaseFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet):
951+
type = django_filters.MultipleChoiceFilter(
952+
choices=PortTypeChoices,
953+
null_value=None
954+
)
928955

929956
class Meta:
930957
model = RearPort
@@ -1011,7 +1038,7 @@ def search(self, queryset, name, value):
10111038
return queryset.filter(qs_filter)
10121039

10131040

1014-
class VirtualChassisFilterSet(BaseFilterSet):
1041+
class VirtualChassisFilterSet(BaseFilterSet, CustomFieldModelFilterSet):
10151042
q = django_filters.CharFilter(
10161043
method='search',
10171044
label='Search',
@@ -1078,7 +1105,7 @@ def search(self, queryset, name, value):
10781105
return queryset.filter(qs_filter).distinct()
10791106

10801107

1081-
class CableFilterSet(BaseFilterSet):
1108+
class CableFilterSet(BaseFilterSet, CustomFieldModelFilterSet):
10821109
q = django_filters.CharFilter(
10831110
method='search',
10841111
label='Search',
@@ -1302,6 +1329,10 @@ class PowerFeedFilterSet(
13021329
queryset=Rack.objects.all(),
13031330
label='Rack (ID)',
13041331
)
1332+
status = django_filters.MultipleChoiceFilter(
1333+
choices=PowerFeedStatusChoices,
1334+
null_value=None
1335+
)
13051336
tag = TagFilter()
13061337

13071338
class Meta:

0 commit comments

Comments
 (0)