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

Improved interface speed functionality.

parent c86f3d4b
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment