aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/topology
diff options
context:
space:
mode:
Diffstat (limited to 'resources/tools/topology')
-rwxr-xr-xresources/tools/topology/update_topology.py41
1 files changed, 22 insertions, 19 deletions
diff --git a/resources/tools/topology/update_topology.py b/resources/tools/topology/update_topology.py
index d7a3929643..a5711d0922 100755
--- a/resources/tools/topology/update_topology.py
+++ b/resources/tools/topology/update_topology.py
@@ -26,12 +26,13 @@ import yaml
from resources.libraries.python.ssh import SSH
+
def load_topology(args):
"""Load topology file referenced to by parameter passed to this script.
- :param args: arguments parsed from commandline
+ :param args: Arguments parsed from commandline.
:type args: ArgumentParser().parse_args()
- :return: Python representation of topology yaml
+ :return: Python representation of topology YAML.
:rtype: dict
"""
data = None
@@ -45,15 +46,16 @@ def load_topology(args):
return data
+
def ssh_no_error(ssh, cmd):
"""Execute a command over ssh channel, and log and exit if the command
- fials.
+ fails.
- :param ssh: SSH() object connected to a node
- :param cmd: Command line to execute on remote node
+ :param ssh: SSH() object connected to a node.
+ :param cmd: Command line to execute on remote node.
:type ssh: SSH() object
:type cmd: str
- :return: stdout from the SSH command
+ :return: stdout from the SSH command.
:rtype: str
"""
ret, stdo, stde = ssh.exec_command(cmd)
@@ -65,6 +67,7 @@ def ssh_no_error(ssh, cmd):
return stdo
+
def update_mac_addresses_for_node(node):
"""For given node loop over all ports with PCI address and look for its MAC
address.
@@ -73,12 +76,13 @@ def update_mac_addresses_for_node(node):
and binds it to linux kernel driver. After the device is bound to specific
linux kernel driver the MAC address is extracted from /sys/bus/pci location
and stored within the node dictionary that was passed to this function.
- :param node: Node from topology
+
+ :param node: Node from topology.
:type node: dict
:return: None
"""
for port_name, port in node['interfaces'].items():
- if not port.has_key('driver'):
+ if 'driver' not in port:
err_msg = '{0} port {1} has no driver element, exiting'.format(
node['host'], port_name)
raise RuntimeError(err_msg)
@@ -101,7 +105,7 @@ def update_mac_addresses_for_node(node):
# Then bind to the 'driver' from topology for given port
cmd = 'echo {0} | sudo tee /sys/bus/pci/drivers/{1}/bind'.\
- format(port['pci_address'], port['driver'])
+ format(port['pci_address'], port['driver'])
ssh_no_error(ssh, cmd)
# Then extract the mac address and store it in the topology
@@ -111,35 +115,35 @@ def update_mac_addresses_for_node(node):
pattern = re.compile("^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$")
if not pattern.match(mac):
raise RuntimeError('MAC address read from host {0} {1} is in '
- 'bad format "{2}"'.format(node['host'],
- port['pci_address'], mac))
+ 'bad format "{2}"'
+ .format(node['host'], port['pci_address'], mac))
print '{0}: Found MAC address of PCI device {1}: {2}'.format(
node['host'], port['pci_address'], mac)
port['mac_address'] = mac
+
def update_nodes_mac_addresses(topology):
"""Loop over nodes in topology and get mac addresses for all listed ports
based on PCI addresses.
- :param topology: Topology information with nodes
+ :param topology: Topology information with nodes.
:type topology: dict
:return: None
"""
-
for node in topology['nodes'].values():
update_mac_addresses_for_node(node)
+
def dump_updated_topology(topology, args):
"""Writes or prints out updated topology file.
- :param topology: Topology information with nodes
- :param args: arguments parsed from command line
+ :param topology: Topology information with nodes.
+ :param args: Arguments parsed from command line.
:type topology: dict
:type args: ArgumentParser().parse_args()
- :return: 1 if error occured, 0 if successful
+ :return: 1 if error occurred, 0 if successful.
:rtype: int
"""
-
if args.output_file:
if not args.force:
if os.path.isfile(args.output_file):
@@ -153,6 +157,7 @@ def dump_updated_topology(topology, args):
print yaml.dump(topology, default_flow_style=False)
return 0
+
def main():
"""Main function"""
parser = ArgumentParser()
@@ -172,5 +177,3 @@ def main():
if __name__ == "__main__":
sys.exit(main())
-
-