From 10748edc3a5e977bea264d5460466e14f01ee508 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 27 Dec 2024 12:17:17 -0500 Subject: [PATCH 1/6] Fixes #18222: Include action data from event rule in webhook and custom script data --- docs/models/extras/eventrule.md | 14 +++++++++++++- netbox/extras/events.py | 12 ++++++++---- netbox/extras/tests/test_event_rules.py | 16 +++++++++++++--- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/docs/models/extras/eventrule.md b/docs/models/extras/eventrule.md index b48e17a1e..9dca04529 100644 --- a/docs/models/extras/eventrule.md +++ b/docs/models/extras/eventrule.md @@ -10,7 +10,7 @@ See the [event rules documentation](../../features/event-rules.md) for more inf A unique human-friendly name. -### Content Types +### Object Types The type(s) of object in NetBox that will trigger the rule. @@ -38,3 +38,15 @@ The event types which will trigger the rule. At least one event type must be sel ### Conditions A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger. + +### Action Type + +The type of action to take when the rule triggers. This must be one of the following choices: + +* Webhook +* Custom script +* Notification + +### Action Data + +An optional dictionary of JSON data to pass when executing the rule. This can be useful to include additional context data, e.g. when transmitting a webhook. diff --git a/netbox/extras/events.py b/netbox/extras/events.py index f13a3b48f..95170e18d 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -90,6 +90,10 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non if not event_rule.eval_conditions(data): continue + # Compile event data + event_data = event_rule.action_data or {} + event_data.update(data) + # Webhooks if event_rule.action_type == EventRuleActionChoices.WEBHOOK: @@ -102,7 +106,7 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non "event_rule": event_rule, "model_name": object_type.model, "event_type": event_type, - "data": data, + "data": event_data, "snapshots": snapshots, "timestamp": timezone.now().isoformat(), "username": username, @@ -130,7 +134,7 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non instance=event_rule.action_object, name=script.name, user=user, - data=data + data=event_data ) # Notification groups @@ -138,8 +142,8 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non # Bulk-create notifications for all members of the notification group event_rule.action_object.notify( object_type=object_type, - object_id=data['id'], - object_repr=data.get('display'), + object_id=event_data['id'], + object_repr=event_data.get('display'), event_type=event_type ) diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py index 7f7b0b81f..2565e5bde 100644 --- a/netbox/extras/tests/test_event_rules.py +++ b/netbox/extras/tests/test_event_rules.py @@ -50,21 +50,24 @@ class EventRuleTest(APITestCase): event_types=[OBJECT_CREATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 1}, ), EventRule( name='Event Rule 2', event_types=[OBJECT_UPDATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 2}, ), EventRule( name='Event Rule 3', event_types=[OBJECT_DELETED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 3}, ), )) for event_rule in event_rules: @@ -134,6 +137,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data['id']) + self.assertEqual(job.kwargs['data']['foo'], 1) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) self.assertEqual(job.kwargs['snapshots']['postchange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['postchange']['tags'], ['Bar', 'Foo']) @@ -184,6 +188,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data[i]['id']) + self.assertEqual(job.kwargs['data']['foo'], 1) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) self.assertEqual(job.kwargs['snapshots']['postchange']['name'], response.data[i]['name']) self.assertEqual(job.kwargs['snapshots']['postchange']['tags'], ['Bar', 'Foo']) @@ -215,6 +220,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) + self.assertEqual(job.kwargs['data']['foo'], 2) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -271,6 +277,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], data[i]['id']) + self.assertEqual(job.kwargs['data']['foo'], 2) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], sites[i].name) self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -297,6 +304,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) + self.assertEqual(job.kwargs['data']['foo'], 3) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -330,6 +338,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], sites[i].pk) + self.assertEqual(job.kwargs['data']['foo'], 3) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], sites[i].name) self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -358,6 +367,7 @@ class EventRuleTest(APITestCase): self.assertEqual(body['username'], 'testuser') self.assertEqual(body['request_id'], str(request_id)) self.assertEqual(body['data']['name'], 'Site 1') + self.assertEqual(body['data']['foo'], 1) return HttpResponse() From b9abb3200c3d637e86af126e3ca70da1e362b6c7 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 27 Dec 2024 10:44:23 -0500 Subject: [PATCH 2/6] Fixes #18271: Require only encryption OR authentication algorithm when creating an IPSec proposal via REST API --- netbox/vpn/api/serializers_/crypto.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/netbox/vpn/api/serializers_/crypto.py b/netbox/vpn/api/serializers_/crypto.py index c11b8de2b..dac3bc519 100644 --- a/netbox/vpn/api/serializers_/crypto.py +++ b/netbox/vpn/api/serializers_/crypto.py @@ -64,10 +64,12 @@ class IKEPolicySerializer(NetBoxModelSerializer): class IPSecProposalSerializer(NetBoxModelSerializer): encryption_algorithm = ChoiceField( - choices=EncryptionAlgorithmChoices + choices=EncryptionAlgorithmChoices, + required=False ) authentication_algorithm = ChoiceField( - choices=AuthenticationAlgorithmChoices + choices=AuthenticationAlgorithmChoices, + required=False ) class Meta: From e8e3981da53fa5cdfe82a742c8d15e31679a3e1f Mon Sep 17 00:00:00 2001 From: bctiemann Date: Fri, 3 Jan 2025 12:35:04 -0500 Subject: [PATCH 3/6] Fixes: #18289 - Add 'created' and 'last_updated' fields to ModuleTypeTable (#18292) * Add 'created' and 'last_updated' fields to ModuleTypeTable for consistency * Add 'created' and 'last_updated' fields to ModuleTable for consistency --- netbox/dcim/tables/modules.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/tables/modules.py b/netbox/dcim/tables/modules.py index 5b06e08b2..6bd0d53b5 100644 --- a/netbox/dcim/tables/modules.py +++ b/netbox/dcim/tables/modules.py @@ -41,6 +41,7 @@ class ModuleTypeTable(NetBoxTable): model = ModuleType fields = ( 'pk', 'id', 'model', 'manufacturer', 'part_number', 'airflow', 'weight', 'description', 'comments', 'tags', + 'created', 'last_updated', ) default_columns = ( 'pk', 'model', 'manufacturer', 'part_number', @@ -79,7 +80,7 @@ class ModuleTable(NetBoxTable): model = Module fields = ( 'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', - 'description', 'comments', 'tags', + 'description', 'comments', 'tags', 'created', 'last_updated', ) default_columns = ( 'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', From 40f22533d164c49dac5443e6d7f73758190f1462 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 4 Jan 2025 05:02:13 +0000 Subject: [PATCH 4/6] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 5f49057fb..5d1188333 100644 --- a/netbox/translations/en/LC_MESSAGES/django.po +++ b/netbox/translations/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-13 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -650,7 +650,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1508,7 +1508,7 @@ msgstr "" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -3432,7 +3432,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:96 netbox/dcim/tables/devices.py:172 #: netbox/dcim/tables/devices.py:940 netbox/dcim/tables/devicetypes.py:80 #: netbox/dcim/tables/devicetypes.py:308 netbox/dcim/tables/modules.py:20 -#: netbox/dcim/tables/modules.py:60 netbox/dcim/tables/racks.py:58 +#: netbox/dcim/tables/modules.py:61 netbox/dcim/tables/racks.py:58 #: netbox/dcim/tables/racks.py:132 netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 #: netbox/templates/dcim/manufacturer.html:33 @@ -3679,7 +3679,7 @@ msgid "Device Type" msgstr "" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" @@ -3785,7 +3785,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:597 netbox/dcim/tables/devices.py:697 #: netbox/dcim/tables/devices.py:754 netbox/dcim/tables/devices.py:801 #: netbox/dcim/tables/devices.py:861 netbox/dcim/tables/devices.py:930 -#: netbox/dcim/tables/devices.py:1057 netbox/dcim/tables/modules.py:52 +#: netbox/dcim/tables/devices.py:1057 netbox/dcim/tables/modules.py:53 #: netbox/extras/forms/filtersets.py:321 netbox/ipam/forms/bulk_import.py:304 #: netbox/ipam/forms/bulk_import.py:505 netbox/ipam/forms/filtersets.py:551 #: netbox/ipam/forms/model_forms.py:323 netbox/ipam/forms/model_forms.py:712 @@ -6617,7 +6617,7 @@ msgstr "" msgid "Inventory items" msgstr "" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "" @@ -7336,12 +7336,12 @@ msgstr "" msgid "Show your personal bookmarks" msgstr "" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" From c9ee699633a05c3ce2e2735b55cad7fb48822ea1 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Mon, 6 Jan 2025 09:54:13 -0500 Subject: [PATCH 5/6] Fixes: #18263 - Iterate through a freshly queried set of CableTerminations to find endpoints in update_connected_endpoints (#18264) * Iterate through a freshly queried set of CableTerminations to find endpoints in update_connected_endpoints * Add defensive break if q_filter has not been populated --- netbox/dcim/models/cables.py | 4 ++++ netbox/dcim/signals.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 2a4748610..2bdaa50eb 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -607,6 +607,10 @@ class CablePath(models.Model): cable_end = 'A' if lct.cable_end == 'B' else 'B' q_filter |= Q(cable=lct.cable, cable_end=cable_end) + # Make sure this filter has been populated; if not, we have probably been given invalid data + if not q_filter: + break + remote_cable_terminations = CableTermination.objects.filter(q_filter) remote_terminations = [ct.termination for ct in remote_cable_terminations] else: diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index a51872719..6c213d64c 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -85,7 +85,8 @@ def update_connected_endpoints(instance, created, raw=False, **kwargs): if instance._terminations_modified: a_terminations = [] b_terminations = [] - for t in instance.terminations.all(): + # Note: instance.terminations.all() is not safe to use here as it might be stale + for t in CableTermination.objects.filter(cable=instance): if t.cable_end == CableEndChoices.SIDE_A: a_terminations.append(t.termination) else: From 67657efe1c39f94592af249dd0b7830c0cb3eaf9 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 6 Jan 2025 10:39:52 -0500 Subject: [PATCH 6/6] Release v4.1.11 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- base_requirements.txt | 2 +- docs/release-notes/version-4.1.md | 12 + netbox/release.yaml | 4 +- netbox/translations/ru/LC_MESSAGES/django.mo | Bin 296938 -> 301883 bytes netbox/translations/ru/LC_MESSAGES/django.po | 244 ++++++++++-------- requirements.txt | 12 +- 8 files changed, 153 insertions(+), 125 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index f486791e1..cb39ae9be 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.1.10 + placeholder: v4.1.11 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 2e15c36cb..e42ff3045 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -39,7 +39,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.1.10 + placeholder: v4.1.11 validations: required: true - type: dropdown diff --git a/base_requirements.txt b/base_requirements.txt index 3e5bcb0db..234859962 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -101,7 +101,7 @@ netaddr nh3 # Fork of PIL (Python Imaging Library) for image processing -# https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst +# https://github.com/python-pillow/Pillow/releases Pillow # PostgreSQL database adapter for Python diff --git a/docs/release-notes/version-4.1.md b/docs/release-notes/version-4.1.md index e68aa2344..9a2f79ece 100644 --- a/docs/release-notes/version-4.1.md +++ b/docs/release-notes/version-4.1.md @@ -1,5 +1,17 @@ # NetBox v4.1 +## v4.1.11 (2025-01-06) + +### Bug Fixes + +* [#17771](https://github.com/netbox-community/netbox/issues/17771) - Fix duplicate entries appearing on VLAN list when filtering by interface assignment +* [#18222](https://github.com/netbox-community/netbox/issues/18222) - Pass event rule action data to webhooks as context data +* [#18263](https://github.com/netbox-community/netbox/issues/18263) - Fix recalculation of cable paths when modifying cable terminations via the REST API +* [#18271](https://github.com/netbox-community/netbox/issues/18271) - Require only encryption _or_ authentication algorithm when creating an IPSec proposal via the REST API +* [#18289](https://github.com/netbox-community/netbox/issues/18289) - Enable ordering modules and module types by created & last updated times + +--- + ## v4.1.10 (2024-12-23) ### Bug Fixes diff --git a/netbox/release.yaml b/netbox/release.yaml index e96c80cfa..7126342db 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.1.10" +version: "4.1.11" edition: "Community" -published: "2024-12-23" +published: "2025-01-06" diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index 65ede0d43ad754ab9da9b2b12e0340b2a9c3f444..4b62c2a5b1419eab25391b91fe2a9bd4a23066ac 100644 GIT binary patch delta 69906 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 S^UF-Z|9v+-SEC)NQ~xg!VuU;Z delta 66900 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 diff --git a/netbox/translations/ru/LC_MESSAGES/django.po b/netbox/translations/ru/LC_MESSAGES/django.po index da90e8efc..2cb2074cd 100644 --- a/netbox/translations/ru/LC_MESSAGES/django.po +++ b/netbox/translations/ru/LC_MESSAGES/django.po @@ -11,17 +11,18 @@ # stavr666, 2024 # Alexander Ryazanov (alryaz) , 2024 # Vladyslav V. Prodan, 2024 -# Artem Kotik, 2024 # Jeremy Stretch, 2024 +# Michail Tatarinov, 2024 +# Artem Kotik, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Artem Kotik, 2025\n" "Language-Team: Russian (https://app.transifex.com/netbox-community/teams/178115/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -157,7 +158,7 @@ msgstr "Неактивный" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -169,8 +170,8 @@ msgstr "Регион (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Регион (подстрока)" @@ -180,8 +181,8 @@ msgstr "Регион (подстрока)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Группа сайтов (ID)" @@ -192,7 +193,7 @@ msgstr "Группа сайтов (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -262,8 +263,8 @@ msgstr "Сайт" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -282,13 +283,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Провайдер (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Провайдер (подстрока)" @@ -317,8 +318,8 @@ msgstr "Тип канала связи (подстрока)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Сайт (ID)" @@ -672,7 +673,7 @@ msgstr "Аккаунт провайдера" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1107,7 +1108,7 @@ msgstr "Задание" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1547,7 +1548,7 @@ msgstr "Гарантированная скорость" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -1955,7 +1956,7 @@ msgstr "Фасады стоек" #: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 #: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 msgid "Power" -msgstr "Мощность" +msgstr "Электропитание" #: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 #: netbox/templates/core/inc/config_data.html:37 @@ -2945,7 +2946,7 @@ msgid "Parent site group (slug)" msgstr "Группа сайтов родителя (подстрока)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Группа (ID)" @@ -3003,15 +3004,15 @@ msgstr "Тип стойки (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Роль (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Роль (подстрока)" @@ -3209,7 +3210,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "модель устройства" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Интерфейс (ID)" @@ -3223,8 +3224,8 @@ msgid "Module bay (ID)" msgstr "Отсек для модулей (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Устройство (ID)" @@ -3233,8 +3234,8 @@ msgstr "Устройство (ID)" msgid "Rack (name)" msgstr "Стойка (имя)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Устройство (имя)" @@ -3286,9 +3287,9 @@ msgstr "Назначенный VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3315,19 +3316,19 @@ msgstr "Назначенный VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3421,7 +3422,7 @@ msgstr "Нерасторгнутый" #: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" -msgstr "Панель питания (ID)" +msgstr "Распределительный щит (ID)" #: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 #: netbox/extras/forms/model_forms.py:567 @@ -3489,7 +3490,7 @@ msgstr "Часовой пояс" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3740,7 +3741,7 @@ msgid "Device Type" msgstr "Тип устройства" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3848,7 +3849,7 @@ msgstr "Кластер" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -3946,7 +3947,7 @@ msgstr "Домен" #: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 #: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 msgid "Power panel" -msgstr "Панель питания" +msgstr "Распределительный щит" #: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 #: netbox/dcim/forms/filtersets.py:1180 @@ -4096,15 +4097,15 @@ msgstr "VLAN без тегов" #: netbox/virtualization/forms/bulk_edit.py:256 #: netbox/virtualization/forms/model_forms.py:335 msgid "Tagged VLANs" -msgstr "VLAN с тегами" +msgstr "Тегированные VLAN-ы" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Добавить тегированные VLAN-ы" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Удалить тегированные VLAN-ы" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4152,7 +4153,7 @@ msgstr "Коммутация 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Добавить/удалить" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4230,7 +4231,7 @@ msgstr "Название назначенной роли" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Модель типа стойки" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4239,11 +4240,11 @@ msgstr "Направление воздушного потока" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Если не указан тип стойки, необходимо задать ширину." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "Если не указан тип стойки, необходимо задать высоту в юнитах." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4596,7 +4597,7 @@ msgstr "Имя родительского сайта" #: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" -msgstr "Панель питания в восходящем направлении" +msgstr "Распределительный щит" #: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" @@ -4684,13 +4685,13 @@ msgstr "A {model} названный {name} уже существует" #: netbox/templates/dcim/powerpanel.html:19 #: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" -msgstr "Панель питания" +msgstr "Распределительный щит" #: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" -msgstr "Подача питания" +msgstr "Кабель питания" #: netbox/dcim/forms/connections.py:81 msgid "Side" @@ -4905,6 +4906,10 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Для массового создания поддерживаются алфавитно-цифровые диапазоны. " +"Смешанные имена и номера в одном диапазоне не поддерживаются (например: " +"[ge, xe]-0/0/[0-9]). Переменная {module} будет " +"автоматически заменена значением позиции при создании нового модуля." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -5629,7 +5634,7 @@ msgstr "VLAN без тегов" #: netbox/dcim/models/device_components.py:703 #: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" -msgstr "VLAN без тегов" +msgstr "тегированные VLAN" #: netbox/dcim/models/device_components.py:745 #: netbox/virtualization/models/virtualmachines.py:377 @@ -6325,11 +6330,11 @@ msgstr "При установке веса необходимо указать #: netbox/dcim/models/power.py:55 msgid "power panel" -msgstr "панель питания" +msgstr "распределительный щит" #: netbox/dcim/models/power.py:56 msgid "power panels" -msgstr "панели питания" +msgstr "распределительный щиты" #: netbox/dcim/models/power.py:70 #, python-brace-format @@ -6369,11 +6374,11 @@ msgstr "доступная мощность" #: netbox/dcim/models/power.py:164 msgid "power feed" -msgstr "подача питания" +msgstr "Кабель питания" #: netbox/dcim/models/power.py:165 msgid "power feeds" -msgstr "источники питания" +msgstr "кабели питания" #: netbox/dcim/models/power.py:179 #, python-brace-format @@ -6381,7 +6386,7 @@ msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "" -"Стойка {rack} ({rack_site}) и панель питания {powerpanel} " +"Стойка {rack} ({rack_site}) и распределительный щит {powerpanel} " "({powerpanel_site}) расположены на разных сайтах." #: netbox/dcim/models/power.py:190 @@ -6821,7 +6826,7 @@ msgstr "Отсеки для модулей" msgid "Inventory items" msgstr "Комплектующие" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Модульный отсек" @@ -7040,7 +7045,7 @@ msgstr "Отсеки для модулей" #: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" -msgstr "Источники питания" +msgstr "Кабели питания" #: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" @@ -7550,12 +7555,12 @@ msgstr "Закладки" msgid "Show your personal bookmarks" msgstr "Покажите свои личные закладки" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Неизвестный тип действия для правила события: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Невозможно импортировать конвейер событий {name} ошибка: {error}" @@ -9326,129 +9331,129 @@ msgstr "Экспорт L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Экспорт L2VPN (идентификатор)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Префикс" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (подстрока)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "В префиксе" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "В префиксе и включительно" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Префиксы, содержащие этот префикс или IP-адрес" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Длина маски" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Адрес" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Диапазоны, содержащие этот префикс или IP-адрес" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Родительский префикс" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Виртуальная машина (имя)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Виртуальная машина (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Интерфейс (имя)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Интерфейс виртуальной машины (имя)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Интерфейс виртуальной машины (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP группа (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Присвоен интерфейсу" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Назначено" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Сервис (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Внутренний NAT IP-адрес (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Назначенный интерфейс" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Назначенный интерфейс виртуальной машины" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP-адрес (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адрес" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Основной IPv4 (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Основной IPv6 (ID)" @@ -9672,11 +9677,11 @@ msgstr "Сделайте этот IP-адрес основным для назн #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Внеполосный IP-адрес" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Назначьте это как внеполосный IP-адрес для указанного устройства" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9686,11 +9691,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Устройство не указано; невозможно установить как внеполосный IP-адрес" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Невозможно установить внеполосный IP-адрес для виртуальных машин" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9699,7 +9704,7 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Интерфейс не указан; невозможно установить как внеполосный IP-адрес" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9812,7 +9817,7 @@ msgstr "DNS-имя" #: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 #: netbox/netbox/navigation/menu.py:195 msgid "VLANs" -msgstr "VLAN" +msgstr "VLAN-ы" #: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" @@ -9876,7 +9881,7 @@ msgstr "Сделайте этот IP-адрес основным для устр #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Назначить внеполосным IP-адресом устройства" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9889,10 +9894,13 @@ msgstr "IP-адрес можно присвоить только одному о #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Невозможно переназначить основной IP-адрес родительского " +"устройства/виртуальной машины" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Невозможно переназначить внеполосный IP-адрес родительскому устройству" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9906,6 +9914,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"В качестве внеполосного IP-адреса устройства можно указать только IP-адреса," +" назначенные интерфейсу устройства." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10304,11 +10314,15 @@ msgstr "Невозможно установить scope_id без scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"Начальный идентификатор VLAN в диапазоне ({value}) не может быть меньше " +"{minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"Последний идентификатор VLAN в диапазоне ({value}) не может превышать " +"{maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10316,6 +10330,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Последний идентификатор VLAN в диапазоне должен быть больше или равен " +"начальному идентификатору VLAN ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -11169,7 +11185,7 @@ msgstr "Сети провайдеров" #: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" -msgstr "Панели питания" +msgstr "Распределительный щиты" #: netbox/netbox/navigation/menu.py:309 msgid "Configurations" @@ -12109,7 +12125,7 @@ msgstr "Ширина юнита по умолчанию" #: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" -msgstr "Источники питания" +msgstr "Кабели питания" #: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" @@ -12684,11 +12700,11 @@ msgstr "Скачать" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Ошибка при отображении шаблона" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Для этого устройства не назначен шаблон конфигурации." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -12842,7 +12858,7 @@ msgstr "Без тегов" #: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" -msgstr "VLAN не назначены" +msgstr "VLAN-ы не назначены" #: netbox/templates/dcim/inc/interface_vlans_table.html:44 #: netbox/templates/ipam/prefix_list.html:16 @@ -13013,7 +13029,7 @@ msgstr "Фаза электропитания" #: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" -msgstr "Добавить каналы питания" +msgstr "Добавить кабели питания" #: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" @@ -13555,7 +13571,7 @@ msgstr "Повторить" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "Не удалось загрузить скрипты из модуля %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14369,7 +14385,7 @@ msgstr "Добавить виртуальный диск" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." -msgstr "" +msgstr "Для этой виртуальной машины не назначен шаблон конфигурации." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15448,12 +15464,12 @@ msgstr "Память (МБ)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Диск (МБ)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Размер (МБ)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15664,19 +15680,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/requirements.txt b/requirements.txt index 08d06210c..88d642d79 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,28 +11,28 @@ django-redis==5.4.0 django-rich==1.13.0 django-rq==3.0 django-taggit==6.1.0 -django-tables2==2.7.0 +django-tables2==2.7.5 django-timezone-field==7.0 djangorestframework==3.15.2 drf-spectacular==0.28.0 drf-spectacular-sidecar==2024.12.1 feedparser==6.0.11 gunicorn==23.0.0 -Jinja2==3.1.4 +Jinja2==3.1.5 Markdown==3.7 mkdocs-material==9.5.49 mkdocstrings[python-legacy]==0.27.0 netaddr==1.3.0 nh3==0.2.20 -Pillow==11.0.0 +Pillow==11.1.0 psycopg[c,pool]==3.2.3 PyYAML==6.0.2 requests==2.32.3 -rq==2.0 +rq==2.1.0 social-auth-app-django==5.4.2 social-auth-core==4.5.4 -strawberry-graphql==0.254.0 -strawberry-graphql-django==0.52.0 +strawberry-graphql==0.256.1 +strawberry-graphql-django==0.53.1 svgwrite==1.4.3 tablib==3.7.0 tzdata==2024.2