#1231 IX-F consistency (#1588)

This commit is contained in:
Arturo Baldo
2024-04-15 12:42:10 -03:00
committed by GitHub
parent 0187e99377
commit 5aff840e39
25 changed files with 120 additions and 120 deletions
+2 -2
View File
@@ -98,7 +98,7 @@ Utilities for geocoding and geo normalization.
## [import_views.py](/docs/dev/modules/import_views.py.md)
Define ix-f import preview, review and post-mortem views.
Define IX-F import preview, review and post-mortem views.
## [inet.py](/docs/dev/modules/inet.py.md)
@@ -112,7 +112,7 @@ Prefix renumbering.
IX-F importer implementation.
Handles import of ix-f feeds, creation of suggestions for networks and exchanges
Handles import of IX-F feeds, creation of suggestions for networks and exchanges
to follow.
Handles notifications of networks and exchanges as part of that process.
@@ -41,8 +41,8 @@ Returns:
ToolIXFIXPMemberImport(peeringdb_server.admin_commandline_tools.CommandLineToolWrapper)
```
Allows resets for various parts of the ix-f member data import protocol.
And import ix-f member data for a single Ixlan at a time.
Allows resets for various parts of the IX-F member data import protocol.
And import IX-F member data for a single Ixlan at a time.
### Instanced Attributes
+1 -1
View File
@@ -2,7 +2,7 @@ Generated from import_views.py on 2023-04-12 10:09:44.563425
# peeringdb_server.import_views
Define ix-f import preview, review and post-mortem views.
Define IX-F import preview, review and post-mortem views.
# Functions
---
+3 -3
View File
@@ -4,7 +4,7 @@ Generated from ixf.py on 2023-04-12 10:09:44.563425
IX-F importer implementation.
Handles import of ix-f feeds, creation of suggestions for networks and exchanges
Handles import of IX-F feeds, creation of suggestions for networks and exchanges
to follow.
Handles notifications of networks and exchanges as part of that process.
@@ -20,7 +20,7 @@ A substantial part of the import logic is handled through models.py::IXFMemberDa
MultipleVlansInPrefix(builtins.ValueError)
```
This error is raised when an ix-f export contains
This error is raised when an IX-F export contains
multiple vlan ids for the prefixes defined in the processed ixlan.
Since peeringdb treats each vlan as it's own exchange this currently
@@ -42,7 +42,7 @@ Initialize self. See help(type(self)) for accurate signature.
PostMortem(builtins.object)
```
Generate postmortem report for ix-f import.
Generate postmortem report for IX-F import.
### Methods
+8 -8
View File
@@ -564,7 +564,7 @@ A copy of all emails sent by the IX-F importer.
IXFMemberData(django_peeringdb.models.abstract.NetworkIXLanBase)
```
Describes a potential data update that arose during an ix-f import
Describes a potential data update that arose during an IX-F import
attempt for a specific member (asn, ip4, ip6) to netixlan
(asn, ip4, ip6) where the importer could not complete the
update automatically.
@@ -615,14 +615,14 @@ this entry.
- ix_contacts (`@property`): Returns a list of email addresses that
are suitable contact points for conflict resolution
at the exchange end.
- ixf_id (`@property`): Returns a tuple that identifies the ix-f member
- ixf_id (`@property`): Returns a tuple that identifies the IX-F member
as a unqiue record by asn, ip4 and ip6 address.
- ixf_id_pretty_str (`@property`): None
- json (`@property`): Returns dict for self.data
- marked_for_removal (`@property`): Returns whether or not this entry implies that
the related netixlan should be removed.
We do this by checking if the ix-f data was provided
We do this by checking if the IX-F data was provided
or not.
- modify_is_rs_peer (`@property`): Returns whether or not the `is_rs_peer` property
is enabled to receive modify updates or not (#793).
@@ -669,7 +669,7 @@ If an empty dict is returned that means no changes.
had data at the IX-F source.
If not it indicates that it does not exist at the
ix-f source.
IX-F source.
- requirements (`@property`): Returns list of all IXFMemberData objects
that are still active requirements for this
IXFMemberData object.
@@ -887,7 +887,7 @@ instance to ac, ix and net as warranted.
#### validate_speed
`def validate_speed(self)`
Speed errors in ix-f data are raised during parse
Speed errors in IX-F data are raised during parse
and speed will be on the attribute.
In order to properly handle invalid speed values,
@@ -1035,7 +1035,7 @@ the change.
These attributes / properties will be available on instances of the class
- changes (`@property`): Returns a dict of changes between the netixlan version
saved by the ix-f import and the version before.
saved by the IX-F import and the version before.
Fields `created`, `updated` and `version` will be ignored.
@@ -1619,7 +1619,7 @@ DataChangeNotificationQueue
- ix_result_name (`@property`): None
- ix_sub_result_name (`@property`): None
- ixf_id (`@property`): Returns a tuple that identifies the netixlan
in the context of an ix-f member data entry as a unqiue record by asn, ip4 and ip6 address.
in the context of an IX-F member data entry as a unqiue record by asn, ip4 and ip6 address.
- ixf_id_pretty_str (`@property`): None
- name (`@property`): None
- net_id (`@property`): None
@@ -1722,7 +1722,7 @@ NetworkProtocolsDisabled(builtins.ValueError)
```
Raised when a network has both ipv6 and ipv4 support
disabled during ix-f import.
disabled during IX-F import.
## OAuthApplication
+1 -1
View File
@@ -298,7 +298,7 @@ object, exposed to api/ix/{id}/{action}
#### request_ixf_import
`def request_ixf_import(self, request, *args, **kwargs)`
Allows managers of an ix to request an ix-f import.
Allows managers of an ix to request an IX-F import.
(#779)
---
+1 -1
View File
@@ -27,7 +27,7 @@ PeeringDB specific javascript code can be found in these files:
- custom 20c-edit input types
- custom 20c-edit editor handlers
- data loaders
- ix-f post mortem, preview and review tools
- IX-F post mortem, preview and review tools
- quick search
- api key permissions
- user permissions
+6 -6
View File
@@ -1171,24 +1171,24 @@ set_option(
set_option("IXF_POSTMORTEM_LIMIT", 250)
# when encountering problems where an exchange's ix-f feed
# when encountering problems where an exchange's IX-F feed
# becomes unavilable / unparsable this setting controls
# the interval in which we communicate the issue to them (hours)
set_option("IXF_PARSE_ERROR_NOTIFICATION_PERIOD", 360)
# toggle the creation of DeskPRO tickets from ix-f importer
# toggle the creation of DeskPRO tickets from IX-F importer
# conflicts
set_option("IXF_TICKET_ON_CONFLICT", True)
# send the ix-f importer generated tickets to deskpro
# send the IX-F importer generated tickets to deskpro
set_option("IXF_SEND_TICKETS", False)
# toggle the notification of exchanges via email
# for ix-f importer conflicts
# for IX-F importer conflicts
set_option("IXF_NOTIFY_IX_ON_CONFLICT", False)
# toggle the notification of networks via email
# for ix-f importer conflicts
# for IX-F importer conflicts
set_option("IXF_NOTIFY_NET_ON_CONFLICT", False)
# number of days of a conflict being unresolved before
@@ -1208,7 +1208,7 @@ set_option("IXF_REMOVE_STALE_NETIXLAN_NOTIFY_COUNT", 3)
set_option("IXF_REMOVE_STALE_NETIXLAN_NOTIFY_PERIOD", 30)
# on / off toggle for automatic stale netixlan removal
# through ix-f (#1271)
# through IX-F (#1271)
#
# default was changed to False as part of #1360
set_option("IXF_REMOVE_STALE_NETIXLAN", False)
+3 -3
View File
@@ -419,8 +419,8 @@ class ToolUndelete(CommandLineToolWrapper):
@register_tool
class ToolIXFIXPMemberImport(CommandLineToolWrapper):
"""
Allows resets for various parts of the ix-f member data import protocol.
And import ix-f member data for a single Ixlan at a time.
Allows resets for various parts of the IX-F member data import protocol.
And import IX-F member data for a single Ixlan at a time.
"""
tool = "pdb_ixf_ixp_member_import"
@@ -431,7 +431,7 @@ class ToolIXFIXPMemberImport(CommandLineToolWrapper):
queryset=InternetExchange.objects.all(),
widget=autocomplete.ModelSelect2(url="/autocomplete/ix/json"),
help_text=_(
"Select an Internet Exchange to perform an ix-f memberdata import"
"Select an Internet Exchange to perform an IX-F memberdata import"
),
)
+1 -1
View File
@@ -1,5 +1,5 @@
"""
Define ix-f import preview, review and post-mortem views.
Define IX-F import preview, review and post-mortem views.
"""
import base64
+16 -16
View File
@@ -1,7 +1,7 @@
"""
IX-F importer implementation.
Handles import of ix-f feeds, creation of suggestions for networks and exchanges
Handles import of IX-F feeds, creation of suggestions for networks and exchanges
to follow.
Handles notifications of networks and exchanges as part of that process.
@@ -61,7 +61,7 @@ REASON_VALUES_CHANGED = _(
class MultipleVlansInPrefix(ValueError):
"""
This error is raised when an ix-f export contains
This error is raised when an IX-F export contains
multiple vlan ids for the prefixes defined in the processed ixlan.
Since peeringdb treats each vlan as it's own exchange this currently
@@ -118,7 +118,7 @@ class Importer:
@property
def tickets_enabled(self):
"""
Return whether deskpr ticket creation for ix-f
Return whether deskpr ticket creation for IX-F
conflicts are enabled or not.
This can be controlled by the IXF_TICKET_ON_CONFLICT
@@ -221,7 +221,7 @@ class Importer:
def cache_key(self, url):
"""
Return the django cache key to use for caching ix-f data.
Return the django cache key to use for caching IX-F data.
Argument:
@@ -377,7 +377,7 @@ class Importer:
id = vlan.get("vlan_id", 0)
# the ix-f schema allows setting ipv4 and ipv6 to
# the IX-F schema allows setting ipv4 and ipv6 to
# null, in which case remove the property
if "ipv4" in vlan and not vlan.get("ipv4"):
@@ -443,13 +443,13 @@ class Importer:
# handle `null` properties inside connection list
for conn in member.get("connection_list", []):
# handle case where ix-f feed has set `vlan_list` to `null` (#1244)
# handle case where IX-F feed has set `vlan_list` to `null` (#1244)
# treat same as if it wasn't set at all
if conn.get("vlan_list", []) is None:
conn.pop("vlan_list")
# handle case where ix-f feed has set `if_list` to `null` (#1244)
# handle case where IX-F feed has set `if_list` to `null` (#1244)
# treat same as if it wasn't set at all
if conn.get("if_list", []) is None:
@@ -558,7 +558,7 @@ class Importer:
self.log_error(f"Internal Error 'KeyError': {exc}", save=save)
return False
# null ix-f error note on ixlan if it had error'd before
# null IX-F error note on ixlan if it had error'd before
if self.ixlan.ixf_ixp_import_error:
with transaction.atomic():
with reversion.create_revision():
@@ -752,7 +752,7 @@ class Importer:
qset = qset.filter(asn=self.asn)
# clean up old ix-f memeber data objects
# clean up old IX-F memeber data objects
for ixf_member in qset:
# proposed deletion got fulfilled
@@ -773,7 +773,7 @@ class Importer:
self.queue_notification(ixf_member, "resolved")
# proposed change / addition is now gone from
# ix-f data
# IX-F data
elif not self.skip_import and ixf_member.ixf_id not in self.ixf_ids:
if ixf_member.action in ["add", "modify"]:
@@ -844,7 +844,7 @@ class Importer:
if self.asn and asn != self.asn:
continue
# keep track of asns we find in the ix-f data
# keep track of asns we find in the IX-F data
if asn not in self.asns:
self.asns.append(asn)
@@ -1907,8 +1907,8 @@ class Importer:
if ixf_member_data.requirement_of_id:
continue
# check the date of when the ix-f information that suggests
# the netixlan removal was last seen in the ix-f data.
# check the date of when the IX-F information that suggests
# the netixlan removal was last seen in the IX-F data.
# ignore any that were not seen the last time the importer ran
#
# this is to catch edge cases where the ix has had i turned off
@@ -1980,8 +1980,8 @@ class Importer:
if ixf_member_data.requirement_of_id:
continue
# check the date of when the ix-f information that suggests
# the netixlan removal was last seen in the ix-f data.
# check the date of when the IX-F information that suggests
# the netixlan removal was last seen in the IX-F data.
# ignore any that were not seen the last time the importer ran
#
# this is to catch edge cases where the ix has had i turned off
@@ -2212,7 +2212,7 @@ class Importer:
class PostMortem:
"""
Generate postmortem report for ix-f import.
Generate postmortem report for IX-F import.
"""
def reset(self, asn, **kwargs):
@@ -55,7 +55,7 @@ class Migration(migrations.Migration):
"data",
models.TextField(
default="{}",
help_text="JSON snapshot of the ix-f member data that created this entry",
help_text="JSON snapshot of the IX-F member data that created this entry",
),
),
(
@@ -31,7 +31,7 @@ class Migration(migrations.Migration):
("finished", "Finished"),
],
default="queued",
help_text="The current status of the manual ix-f import request",
help_text="The current status of the manual IX-F import request",
max_length=32,
verbose_name="Manual IX-F import status",
),
@@ -41,7 +41,7 @@ class Migration(migrations.Migration):
name="ixf_import_request_user",
field=models.ForeignKey(
blank=True,
help_text="The user that triggered the manual ix-f import request",
help_text="The user that triggered the manual IX-F import request",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="requested_ixf_imports",
@@ -22,7 +22,7 @@ class Migration(migrations.Migration):
("error", "Import failed"),
],
default="queued",
help_text="The current status of the manual ix-f import request",
help_text="The current status of the manual IX-F import request",
max_length=32,
verbose_name="Manual IX-F import status",
),
+13 -13
View File
@@ -2206,7 +2206,7 @@ class InternetExchange(
ixf_import_request_status = models.CharField(
_("Manual IX-F import status"),
help_text=_("The current status of the manual ix-f import request"),
help_text=_("The current status of the manual IX-F import request"),
choices=(
("queued", _("Queued")),
("importing", _("Importing")),
@@ -2221,7 +2221,7 @@ class InternetExchange(
"peeringdb_server.User",
null=True,
blank=True,
help_text=_("The user that triggered the manual ix-f import request"),
help_text=_("The user that triggered the manual IX-F import request"),
on_delete=models.SET_NULL,
related_name="requested_ixf_imports",
)
@@ -3388,7 +3388,7 @@ class IXLanIXFMemberImportLogEntry(models.Model):
def changes(self):
"""
Returns a dict of changes between the netixlan version
saved by the ix-f import and the version before.
saved by the IX-F import and the version before.
Fields `created`, `updated` and `version` will be ignored.
"""
@@ -3429,14 +3429,14 @@ class IXLanIXFMemberImportLogEntry(models.Model):
class NetworkProtocolsDisabled(ValueError):
"""
Raised when a network has both ipv6 and ipv4 support
disabled during ix-f import.
disabled during IX-F import.
"""
class IXFMemberData(pdb_models.NetworkIXLanBase):
"""
Describes a potential data update that arose during an ix-f import
Describes a potential data update that arose during an IX-F import
attempt for a specific member (asn, ip4, ip6) to netixlan
(asn, ip4, ip6) where the importer could not complete the
update automatically.
@@ -3445,7 +3445,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
data = models.TextField(
null=False,
default="{}",
help_text=_("JSON snapshot of the ix-f member data that " "created this entry"),
help_text=_("JSON snapshot of the IX-F member data that " "created this entry"),
)
log = models.TextField(blank=True, help_text=_("Activity for this entry"))
@@ -3513,7 +3513,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
)
# field names of fields that can receive
# modifications from ix-f
# modifications from IX-F
data_fields = [
"speed",
@@ -3896,7 +3896,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
@property
def ixf_id(self):
"""
Returns a tuple that identifies the ix-f member
Returns a tuple that identifies the IX-F member
as a unqiue record by asn, ip4 and ip6 address.
"""
@@ -4035,7 +4035,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
had data at the IX-F source.
If not it indicates that it does not exist at the
ix-f source.
IX-F source.
"""
return self.data == "{}" or not self.data
@@ -4046,7 +4046,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
Returns whether or not this entry implies that
the related netixlan should be removed.
We do this by checking if the ix-f data was provided
We do this by checking if the IX-F data was provided
or not.
"""
@@ -4372,7 +4372,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
def validate_speed(self):
"""
Speed errors in ix-f data are raised during parse
Speed errors in IX-F data are raised during parse
and speed will be on the attribute.
In order to properly handle invalid speed values,
@@ -4505,7 +4505,7 @@ class IXFMemberData(pdb_models.NetworkIXLanBase):
"""
self.reason = reason
# we perist this ix-f member data that proposes removal
# we perist this IX-F member data that proposes removal
# if any of these conditions are met
# marked for removal, but not saved
@@ -5297,7 +5297,7 @@ class NetworkIXLan(pdb_models.NetworkIXLanBase, ParentStatusCheckMixin):
def ixf_id(self):
"""
Returns a tuple that identifies the netixlan
in the context of an ix-f member data entry as a unqiue record by asn, ip4 and ip6 address.
in the context of an IX-F member data entry as a unqiue record by asn, ip4 and ip6 address.
"""
self.network
+1 -1
View File
@@ -891,7 +891,7 @@ class InternetExchangeMixin:
@action(detail=True, methods=["POST"], throttle_classes=[IXFImportThrottle])
def request_ixf_import(self, request, *args, **kwargs):
"""
Allows managers of an ix to request an ix-f import.
Allows managers of an ix to request an IX-F import.
(#779)
"""
+23 -23
View File
@@ -13059,7 +13059,7 @@ paths:
type: date-time
- name: ixf_import_request_status
in: query
description: 'The current status of the manual ix-f import request
description: 'The current status of the manual IX-F import request
Filter results by matching a value against this field.
@@ -13074,7 +13074,7 @@ paths:
type: string
- name: ixf_import_request_user
in: query
description: 'The user that triggered the manual ix-f import request
description: 'The user that triggered the manual IX-F import request
Filter results by matching a value against this field.
@@ -14738,7 +14738,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -15653,7 +15653,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -16521,7 +16521,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -17214,7 +17214,7 @@ paths:
type: date-time
- name: ix__ixf_import_request_status
in: query
description: 'The current status of the manual ix-f import request
description: 'The current status of the manual IX-F import request
Filter results by matching a value against this field.
@@ -18393,7 +18393,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -20592,7 +20592,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -22743,7 +22743,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -24320,7 +24320,7 @@ paths:
type: date-time
- name: ix__ixf_import_request_status
in: query
description: 'The current status of the manual ix-f import request
description: 'The current status of the manual IX-F import request
Filter results by matching a value against this field.
@@ -25606,7 +25606,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -26948,7 +26948,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -27974,7 +27974,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -28952,7 +28952,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -44499,7 +44499,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -46189,7 +46189,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -47830,7 +47830,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import
description: The current status of the manual IX-F import
request
service_level:
enum:
@@ -54600,7 +54600,7 @@ paths:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -58990,7 +58990,7 @@ components:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -59823,7 +59823,7 @@ components:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -61913,7 +61913,7 @@ components:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -62811,7 +62811,7 @@ components:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
@@ -67641,7 +67641,7 @@ components:
- finished
- error
type: string
description: The current status of the manual ix-f import request
description: The current status of the manual IX-F import request
service_level:
enum:
- ''
+3 -3
View File
@@ -1084,7 +1084,7 @@ PeeringDB.IXFPreview = twentyc.cls.define(
render_data : function(data, renderTo) {
/**
* Renders the changes made by the ix-f import, called automatically
* Renders the changes made by the IX-F import, called automatically
* by `render`
*
* @method render_data
@@ -1151,7 +1151,7 @@ PeeringDB.IXFNetPreview = twentyc.cls.extend(
render_data : function(data, renderTo) {
/**
* Renders the changes made by the ix-f import, called automatically
* Renders the changes made by the IX-F import, called automatically
* by `render`
*
* @method render_data
@@ -1230,7 +1230,7 @@ PeeringDB.IXFNetPostmortem = twentyc.cls.extend(
render_data : function(data, renderTo) {
/**
* Renders the changes made by the ix-f import, called automatically
* Renders the changes made by the IX-F import, called automatically
* by `render`
*
* @method render_data
@@ -1,9 +1,9 @@
The ix-f data for this entry has changes
The IX-F data for this entry has changes
{% for name, value in instance.remote_changes.items %}
- {{ name }}: {{ value.from }} to {{ value.to }}
{% endfor %}
{% if recipient=="net" %}
Your network currently has automatic ix-f updates disabled. You may review and manually accept this proposed change at <a href="{{ instance.net_url }}" target="_blank">{{ instance.net_url }}</a>
Your network currently has automatic IX-F updates disabled. You may review and manually accept this proposed change at <a href="{{ instance.net_url }}" target="_blank">{{ instance.net_url }}</a>
{% endif %}
{% if ixf_url_public %}- IX-F Data: <a href="{{ ixf_url }}" target="_blank">{{ ixf_url }}</a>{% endif %}
@@ -212,7 +212,7 @@
<div class="ixf-result"></div>
</div>
<div role="tabpanel" class="tab-pane ixf-errors" id="ixf-errors">
<div>{% blocktrans %}Sometimes we encounter some errors when parsing ix-f data, these will usually affect the import, you can view any of those errors below{% endblocktrans %}</div>
<div>{% blocktrans %}Sometimes we encounter some errors when parsing IX-F data, these will usually affect the import, you can view any of those errors below{% endblocktrans %}</div>
<div class="ixf-errors-list"></div>
</div>
</div>
@@ -251,7 +251,7 @@
<div class="ixf-result"></div>
</div>
<div role="tabpanel" class="tab-pane ixf-errors" id="ixf-errors">
<div>{% blocktrans %}Sometimes we encounter some errors when parsing ix-f data, these will usually affect the import, you can view any of those errors below{% endblocktrans %}</div>
<div>{% blocktrans %}Sometimes we encounter some errors when parsing IX-F data, these will usually affect the import, you can view any of those errors below{% endblocktrans %}</div>
<div class="ixf-errors-list"></div>
</div>
</div>
+2 -2
View File
@@ -616,7 +616,7 @@ class AdminTests(TestCase):
# create partnership we can check
_ = models.Partnership.objects.create(org=org)
# create ixlan ix-f import log we can check
# create ixlan IX-F import log we can check
ixfmemberdata = models.IXFMemberData.instantiate(
ixlan=models.NetworkIXLan.objects.first().ixlan,
ipaddr4=models.NetworkIXLan.objects.first().ipaddr4,
@@ -625,7 +625,7 @@ class AdminTests(TestCase):
)
ixfmemberdata.save()
# create ixlan ix-f import log we can check
# create ixlan IX-F import log we can check
_ = models.IXLanIXFMemberImportLog.objects.create(
ixlan=models.IXLan.objects.all().first()
)
+10 -10
View File
@@ -208,7 +208,7 @@ def test_resolve_local_ixf_stale_netixlan(entities, use_ip, save):
if not save:
return assert_idempotent(importer, ixlan, data, save=False)
# first update should not remove the netixlan or ix-f entry
# first update should not remove the netixlan or IX-F entry
# since the notification count requirement is not met
importer.update(ixlan, data=data)
@@ -230,7 +230,7 @@ def test_resolve_local_ixf_stale_netixlan(entities, use_ip, save):
# this initial ixf import will send two additional emails (one to the net, one to the ix)
# due to protocol mismatch which we need to account for here - this is due to the test
# data which is not otherwise relevant to this test, but
# needs to be there for the ix-f import to be valid
# needs to be there for the IX-F import to be valid
#
# then we also expect one re-notificaiton email about the stale network
@@ -241,7 +241,7 @@ def test_resolve_local_ixf_stale_netixlan(entities, use_ip, save):
assert IXFImportEmail.objects.count() == 1
# now notification count rquirement is set to the required amount
# stale netixlan and ix-f entry should be removed
# stale netixlan and IX-F entry should be removed
ixm.extra_notifications_net_num = settings.IXF_REMOVE_STALE_NETIXLAN_NOTIFY_COUNT
ixm.save()
@@ -325,7 +325,7 @@ def test_resolve_local_ixf_stale_netixlan_import_disabled(entities, use_ip, save
if not save:
return assert_idempotent(importer, ixlan, data, save=False)
# first update should not remove the netixlan or ix-f entry
# first update should not remove the netixlan or IX-F entry
# since the notification count requirement is not met
importer.update(ixlan, data=data)
@@ -347,7 +347,7 @@ def test_resolve_local_ixf_stale_netixlan_import_disabled(entities, use_ip, save
# this initial ixf import will send two additional emails (one to the net, one to the ix)
# due to protocol mismatch which we need to account for here - this is due to the test
# data which is not otherwise relevant to this test, but
# needs to be there for the ix-f import to be valid
# needs to be there for the IX-F import to be valid
#
# then we also expect one re-notificaiton email about the stale network
@@ -445,7 +445,7 @@ def test_resolve_local_ixf_stale_netixlan_removal_disabled(entities, save):
if not save:
return assert_idempotent(importer, ixlan, data, save=False)
# first update should not remove the netixlan or ix-f entry
# first update should not remove the netixlan or IX-F entry
importer.update(ixlan, data=data)
importer.notify_proposals()
@@ -888,7 +888,7 @@ def test_suggest_modify_local_ixf(entities, use_ip, save):
elif (network.ipv4_support and network.ipv6_support and not use_ip(4)) or (
network.ipv6_support and network.ipv4_support and not use_ip(6)
):
# network supports both protocols, old ix-f data only has one
# network supports both protocols, old IX-F data only has one
# of the ips set, suggest adding the other
# #770 #771
@@ -1586,13 +1586,13 @@ def test_suggest_add_delete(entities, use_ip_alt, save):
network = entities["net"]["UPDATE_DISABLED"] # asn1001
ixlan = entities["ixlan"][0]
# remove ip from ix-f data as per use_ip_alt fixture
# remove ip from IX-F data as per use_ip_alt fixture
if not use_ip_alt(4):
del data["member_list"][0]["connection_list"][0]["vlan_list"][0]["ipv4"]
elif not use_ip_alt(6):
del data["member_list"][0]["connection_list"][0]["vlan_list"][0]["ipv6"]
# we don't want the extra ix-f entry for this test
# we don't want the extra IX-F entry for this test
del data["member_list"][0]["connection_list"][1]
# This appears in the remote-ixf data so should not
@@ -3602,7 +3602,7 @@ def entities_base():
for ixlan in entities["ixlan"]:
ixlan.ixf_ixp_import_enabled = True
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
# create ixlan prefix(s)
+1 -1
View File
@@ -449,7 +449,7 @@ def entities():
for ixlan in entities["ixlan"]:
ixlan.ixf_ixp_import_enabled = True
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
# create ixlan prefix(s)
+15 -15
View File
@@ -416,7 +416,7 @@ def test_ghost_peer_vs_real_peer_one_netixlan():
asn=1010, name="AS1010", status="ok", org=org
)
ixlan = ix.ixlan
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
IXLanPrefix.objects.create(
@@ -448,20 +448,20 @@ def test_ghost_peer_vs_real_peer_one_netixlan():
operational=False,
)
# setup ix-f cache
# setup IX-F cache
data = setup_test_data("ixf.member.1")
cache.set(f"IXF-CACHE-{ix.ixlan.ixf_ixp_member_list_url}", data)
ix = ixlan.ix
# real peer should exist in ix-f data
# real peer should exist in IX-F data
real4, real6 = ix.peer_exists_in_ixf_data(1001, IP4, IP6)
assert real4
assert real6
# ghost peer should NOT exist in ix-f data
# ghost peer should NOT exist in IX-F data
ghost4, ghost6 = ix.peer_exists_in_ixf_data(1010, IP4, IP6)
assert not ghost4
@@ -513,7 +513,7 @@ def test_ghost_peer_vs_real_peer_two_netixlan():
asn=1010, name="AS1010", status="ok", org=org
)
ixlan = ix.ixlan
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
IXLanPrefix.objects.create(
@@ -557,20 +557,20 @@ def test_ghost_peer_vs_real_peer_two_netixlan():
operational=False,
)
# setup ix-f data
# setup IX-F data
data = setup_test_data("ixf.member.1")
cache.set(f"IXF-CACHE-{ix.ixlan.ixf_ixp_member_list_url}", data)
ix = ixlan.ix
# real peer should exist in ix-f data
# real peer should exist in IX-F data
real4, real6 = ix.peer_exists_in_ixf_data(1001, IP4, IP6)
assert real4
assert real6
# ghost peer should NOT exist in ix-f data
# ghost peer should NOT exist in IX-F data
ghost4, ghost6 = ix.peer_exists_in_ixf_data(1010, IP4, IP6)
assert not ghost4
@@ -623,7 +623,7 @@ def test_ghost_peer_vs_real_peer_two_netixlan_partial():
asn=1010, name="AS1010", status="ok", org=org
)
ixlan = ix.ixlan
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
IXLanPrefix.objects.create(
@@ -667,20 +667,20 @@ def test_ghost_peer_vs_real_peer_two_netixlan_partial():
operational=False,
)
# setup ix-f data
# setup IX-F data
data = setup_test_data("ixf.member.1")
cache.set(f"IXF-CACHE-{ix.ixlan.ixf_ixp_member_list_url}", data)
ix = ixlan.ix
# real peer should exist in ix-f data
# real peer should exist in IX-F data
real4, real6 = ix.peer_exists_in_ixf_data(1001, IP4, IP6)
assert real4
assert real6
# ghost peer should NOT exist in ix-f data
# ghost peer should NOT exist in IX-F data
ghost4, ghost6 = ix.peer_exists_in_ixf_data(1010, IP4, IP6)
assert not ghost4
@@ -724,7 +724,7 @@ def test_ghost_peer_vs_real_peer_invalid_ixf_data():
"""
Tests that a real peer can claim the ip addresses of a gohst peer. #983
Test the handling of invalid ix-f data, in which case the ghost peer vs real peer
Test the handling of invalid IX-F data, in which case the ghost peer vs real peer
logic should be skipped.
"""
@@ -737,7 +737,7 @@ def test_ghost_peer_vs_real_peer_invalid_ixf_data():
asn=1010, name="AS1010", status="ok", org=org
)
ixlan = ix.ixlan
ixlan.ixf_ixp_member_list_url = "https://localhost/ix-f"
ixlan.ixf_ixp_member_list_url = "https://localhost/IX-F"
ixlan.save()
IXLanPrefix.objects.create(
@@ -768,7 +768,7 @@ def test_ghost_peer_vs_real_peer_invalid_ixf_data():
is_rs_peer=False,
operational=False,
)
# setup ix-f data
# setup IX-F data
cache.set(f"IXF-CACHE-{ix.ixlan.ixf_ixp_member_list_url}", {"invalid": "data"})