Skip to content
Snippets Groups Projects
Commit 1905b3bc authored by Neda Moeini's avatar Neda Moeini
Browse files

Improved interface speed functionality.

parent c86f3d4b
Branches
Tags
1 merge request!82IP-TRUNK-CREATE-WORKFLOW-NETBOX-INTEGRATION
Pipeline #84215 passed
......@@ -106,6 +106,15 @@ class NetboxClient:
device_manufacturer = Manufacturer(**{"name": name, "slug": slug})
return self.netbox.dcim.manufacturers.create(dict(device_manufacturer))
@staticmethod
def calculate_interface_speed(interface: Interfaces) -> int | None:
"""Calculate the interface speed in bits per second."""
type_parts = interface.type.value.split("-")
if "gbase" in type_parts[0]:
return int("".join(filter(str.isdigit, type_parts[0]))) * 1000000
return None
def create_device(self, router_name: str, site_tier: str) -> Devices:
"""Create a new device in netbox."""
......@@ -137,12 +146,7 @@ class NetboxClient:
)
for interface in self.netbox.dcim.interfaces.filter(device_id=device.id):
speed = None
type_parts = interface.type.value.split("-")
if "gbase" in type_parts[0]:
# Extract the numeric part and convert to bits per second
speed = int("".join(filter(str.isdigit, type_parts[0]))) * 1000000
interface.speed = speed
interface.speed = self.calculate_interface_speed(interface)
interface.enabled = False
interface.save()
......@@ -237,9 +241,20 @@ class NetboxClient:
# Return available lags not assigned to the device
return [lag for lag in all_feasible_lags if lag not in lag_interface_names]
@staticmethod
def calculate_speed_bits_per_sec(speed: str) -> int:
"""Extract the numeric part from the speed."""
numeric_part = int("".join(filter(str.isdigit, speed)))
# Convert to bits per second
return numeric_part * 1000000
def get_available_interfaces(self, router_id: UUID, speed: str) -> Interfaces:
"""Return all available interfaces of a device filtered by speed."""
router = Router.from_subscription(router_id).router.router_fqdn
device = self.get_device_by_name(router)
speed_bps = self.calculate_speed_bits_per_sec(speed)
return self.netbox.dcim.interfaces.filter(
device=device.name, enabled=False, mark_connected=False, speed=int(speed.split("G")[0]) * 1000000
device=device.name, enabled=False, mark_connected=False, speed=speed_bps
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment