added type hinting for core.nodes
This commit is contained in:
parent
4e71759ac9
commit
c0fcc91d10
10 changed files with 534 additions and 360 deletions
|
@ -2,30 +2,17 @@
|
|||
Clients for dealing with bridge/interface commands.
|
||||
"""
|
||||
import json
|
||||
from typing import Callable
|
||||
|
||||
from core.constants import ETHTOOL_BIN, IP_BIN, OVS_BIN, TC_BIN
|
||||
|
||||
|
||||
def get_net_client(use_ovs, run):
|
||||
"""
|
||||
Retrieve desired net client for running network commands.
|
||||
|
||||
:param bool use_ovs: True for OVS bridges, False for Linux bridges
|
||||
:param func run: function used to run net client commands
|
||||
:return: net client class
|
||||
"""
|
||||
if use_ovs:
|
||||
return OvsNetClient(run)
|
||||
else:
|
||||
return LinuxNetClient(run)
|
||||
|
||||
|
||||
class LinuxNetClient:
|
||||
"""
|
||||
Client for creating Linux bridges and ip interfaces for nodes.
|
||||
"""
|
||||
|
||||
def __init__(self, run):
|
||||
def __init__(self, run: Callable) -> None:
|
||||
"""
|
||||
Create LinuxNetClient instance.
|
||||
|
||||
|
@ -33,7 +20,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run = run
|
||||
|
||||
def set_hostname(self, name):
|
||||
def set_hostname(self, name: str) -> None:
|
||||
"""
|
||||
Set network hostname.
|
||||
|
||||
|
@ -42,7 +29,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"hostname {name}")
|
||||
|
||||
def create_route(self, route, device):
|
||||
def create_route(self, route: str, device: str) -> None:
|
||||
"""
|
||||
Create a new route for a device.
|
||||
|
||||
|
@ -52,7 +39,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} route add {route} dev {device}")
|
||||
|
||||
def device_up(self, device):
|
||||
def device_up(self, device: str) -> None:
|
||||
"""
|
||||
Bring a device up.
|
||||
|
||||
|
@ -61,7 +48,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set {device} up")
|
||||
|
||||
def device_down(self, device):
|
||||
def device_down(self, device: str) -> None:
|
||||
"""
|
||||
Bring a device down.
|
||||
|
||||
|
@ -70,7 +57,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set {device} down")
|
||||
|
||||
def device_name(self, device, name):
|
||||
def device_name(self, device: str, name: str) -> None:
|
||||
"""
|
||||
Set a device name.
|
||||
|
||||
|
@ -80,7 +67,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set {device} name {name}")
|
||||
|
||||
def device_show(self, device):
|
||||
def device_show(self, device: str) -> str:
|
||||
"""
|
||||
Show information for a device.
|
||||
|
||||
|
@ -90,7 +77,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
return self.run(f"{IP_BIN} link show {device}")
|
||||
|
||||
def get_mac(self, device):
|
||||
def get_mac(self, device: str) -> str:
|
||||
"""
|
||||
Retrieve MAC address for a given device.
|
||||
|
||||
|
@ -100,7 +87,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
return self.run(f"cat /sys/class/net/{device}/address")
|
||||
|
||||
def get_ifindex(self, device):
|
||||
def get_ifindex(self, device: str) -> str:
|
||||
"""
|
||||
Retrieve ifindex for a given device.
|
||||
|
||||
|
@ -110,7 +97,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
return self.run(f"cat /sys/class/net/{device}/ifindex")
|
||||
|
||||
def device_ns(self, device, namespace):
|
||||
def device_ns(self, device: str, namespace: str) -> None:
|
||||
"""
|
||||
Set netns for a device.
|
||||
|
||||
|
@ -120,7 +107,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set {device} netns {namespace}")
|
||||
|
||||
def device_flush(self, device):
|
||||
def device_flush(self, device: str) -> None:
|
||||
"""
|
||||
Flush device addresses.
|
||||
|
||||
|
@ -132,7 +119,7 @@ class LinuxNetClient:
|
|||
shell=True,
|
||||
)
|
||||
|
||||
def device_mac(self, device, mac):
|
||||
def device_mac(self, device: str, mac: str) -> None:
|
||||
"""
|
||||
Set MAC address for a device.
|
||||
|
||||
|
@ -142,7 +129,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set dev {device} address {mac}")
|
||||
|
||||
def delete_device(self, device):
|
||||
def delete_device(self, device: str) -> None:
|
||||
"""
|
||||
Delete device.
|
||||
|
||||
|
@ -151,7 +138,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link delete {device}")
|
||||
|
||||
def delete_tc(self, device):
|
||||
def delete_tc(self, device: str) -> None:
|
||||
"""
|
||||
Remove traffic control settings for a device.
|
||||
|
||||
|
@ -160,7 +147,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{TC_BIN} qdisc delete dev {device} root")
|
||||
|
||||
def checksums_off(self, interface_name):
|
||||
def checksums_off(self, interface_name: str) -> None:
|
||||
"""
|
||||
Turns interface checksums off.
|
||||
|
||||
|
@ -169,7 +156,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{ETHTOOL_BIN} -K {interface_name} rx off tx off")
|
||||
|
||||
def create_address(self, device, address, broadcast=None):
|
||||
def create_address(self, device: str, address: str, broadcast: str = None) -> None:
|
||||
"""
|
||||
Create address for a device.
|
||||
|
||||
|
@ -185,7 +172,7 @@ class LinuxNetClient:
|
|||
else:
|
||||
self.run(f"{IP_BIN} address add {address} dev {device}")
|
||||
|
||||
def delete_address(self, device, address):
|
||||
def delete_address(self, device: str, address: str) -> None:
|
||||
"""
|
||||
Delete an address from a device.
|
||||
|
||||
|
@ -195,7 +182,7 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} address delete {address} dev {device}")
|
||||
|
||||
def create_veth(self, name, peer):
|
||||
def create_veth(self, name: str, peer: str) -> None:
|
||||
"""
|
||||
Create a veth pair.
|
||||
|
||||
|
@ -205,7 +192,9 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link add name {name} type veth peer name {peer}")
|
||||
|
||||
def create_gretap(self, device, address, local, ttl, key):
|
||||
def create_gretap(
|
||||
self, device: str, address: str, local: str, ttl: int, key: int
|
||||
) -> None:
|
||||
"""
|
||||
Create a GRE tap on a device.
|
||||
|
||||
|
@ -225,7 +214,7 @@ class LinuxNetClient:
|
|||
cmd += f" key {key}"
|
||||
self.run(cmd)
|
||||
|
||||
def create_bridge(self, name):
|
||||
def create_bridge(self, name: str) -> None:
|
||||
"""
|
||||
Create a Linux bridge and bring it up.
|
||||
|
||||
|
@ -238,7 +227,7 @@ class LinuxNetClient:
|
|||
self.run(f"{IP_BIN} link set {name} type bridge mcast_snooping 0")
|
||||
self.device_up(name)
|
||||
|
||||
def delete_bridge(self, name):
|
||||
def delete_bridge(self, name: str) -> None:
|
||||
"""
|
||||
Bring down and delete a Linux bridge.
|
||||
|
||||
|
@ -248,7 +237,7 @@ class LinuxNetClient:
|
|||
self.device_down(name)
|
||||
self.run(f"{IP_BIN} link delete {name} type bridge")
|
||||
|
||||
def create_interface(self, bridge_name, interface_name):
|
||||
def create_interface(self, bridge_name: str, interface_name: str) -> None:
|
||||
"""
|
||||
Create an interface associated with a Linux bridge.
|
||||
|
||||
|
@ -259,7 +248,7 @@ class LinuxNetClient:
|
|||
self.run(f"{IP_BIN} link set dev {interface_name} master {bridge_name}")
|
||||
self.device_up(interface_name)
|
||||
|
||||
def delete_interface(self, bridge_name, interface_name):
|
||||
def delete_interface(self, bridge_name: str, interface_name: str) -> None:
|
||||
"""
|
||||
Delete an interface associated with a Linux bridge.
|
||||
|
||||
|
@ -269,11 +258,12 @@ class LinuxNetClient:
|
|||
"""
|
||||
self.run(f"{IP_BIN} link set dev {interface_name} nomaster")
|
||||
|
||||
def existing_bridges(self, _id):
|
||||
def existing_bridges(self, _id: int) -> bool:
|
||||
"""
|
||||
Checks if there are any existing Linux bridges for a node.
|
||||
|
||||
:param _id: node id to check bridges for
|
||||
:return: True if there are existing bridges, False otherwise
|
||||
"""
|
||||
output = self.run(f"{IP_BIN} -j link show type bridge")
|
||||
bridges = json.loads(output)
|
||||
|
@ -286,7 +276,7 @@ class LinuxNetClient:
|
|||
return True
|
||||
return False
|
||||
|
||||
def disable_mac_learning(self, name):
|
||||
def disable_mac_learning(self, name: str) -> None:
|
||||
"""
|
||||
Disable mac learning for a Linux bridge.
|
||||
|
||||
|
@ -301,7 +291,7 @@ class OvsNetClient(LinuxNetClient):
|
|||
Client for creating OVS bridges and ip interfaces for nodes.
|
||||
"""
|
||||
|
||||
def create_bridge(self, name):
|
||||
def create_bridge(self, name: str) -> None:
|
||||
"""
|
||||
Create a OVS bridge and bring it up.
|
||||
|
||||
|
@ -314,7 +304,7 @@ class OvsNetClient(LinuxNetClient):
|
|||
self.run(f"{OVS_BIN} set bridge {name} other_config:stp-forward-delay=4")
|
||||
self.device_up(name)
|
||||
|
||||
def delete_bridge(self, name):
|
||||
def delete_bridge(self, name: str) -> None:
|
||||
"""
|
||||
Bring down and delete a OVS bridge.
|
||||
|
||||
|
@ -324,7 +314,7 @@ class OvsNetClient(LinuxNetClient):
|
|||
self.device_down(name)
|
||||
self.run(f"{OVS_BIN} del-br {name}")
|
||||
|
||||
def create_interface(self, bridge_name, interface_name):
|
||||
def create_interface(self, bridge_name: str, interface_name: str) -> None:
|
||||
"""
|
||||
Create an interface associated with a network bridge.
|
||||
|
||||
|
@ -335,7 +325,7 @@ class OvsNetClient(LinuxNetClient):
|
|||
self.run(f"{OVS_BIN} add-port {bridge_name} {interface_name}")
|
||||
self.device_up(interface_name)
|
||||
|
||||
def delete_interface(self, bridge_name, interface_name):
|
||||
def delete_interface(self, bridge_name: str, interface_name: str) -> None:
|
||||
"""
|
||||
Delete an interface associated with a OVS bridge.
|
||||
|
||||
|
@ -345,11 +335,12 @@ class OvsNetClient(LinuxNetClient):
|
|||
"""
|
||||
self.run(f"{OVS_BIN} del-port {bridge_name} {interface_name}")
|
||||
|
||||
def existing_bridges(self, _id):
|
||||
def existing_bridges(self, _id: int) -> bool:
|
||||
"""
|
||||
Checks if there are any existing OVS bridges for a node.
|
||||
|
||||
:param _id: node id to check bridges for
|
||||
:return: True if there are existing bridges, False otherwise
|
||||
"""
|
||||
output = self.run(f"{OVS_BIN} list-br")
|
||||
if output:
|
||||
|
@ -359,7 +350,7 @@ class OvsNetClient(LinuxNetClient):
|
|||
return True
|
||||
return False
|
||||
|
||||
def disable_mac_learning(self, name):
|
||||
def disable_mac_learning(self, name: str) -> None:
|
||||
"""
|
||||
Disable mac learning for a OVS bridge.
|
||||
|
||||
|
@ -367,3 +358,17 @@ class OvsNetClient(LinuxNetClient):
|
|||
:return: nothing
|
||||
"""
|
||||
self.run(f"{OVS_BIN} set bridge {name} other_config:mac-aging-time=0")
|
||||
|
||||
|
||||
def get_net_client(use_ovs: bool, run: Callable) -> LinuxNetClient:
|
||||
"""
|
||||
Retrieve desired net client for running network commands.
|
||||
|
||||
:param bool use_ovs: True for OVS bridges, False for Linux bridges
|
||||
:param func run: function used to run net client commands
|
||||
:return: net client class
|
||||
"""
|
||||
if use_ovs:
|
||||
return OvsNetClient(run)
|
||||
else:
|
||||
return LinuxNetClient(run)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue