From 9c1c52e03851b1c51e6922aa8a75b234d9eb9256 Mon Sep 17 00:00:00 2001 From: ubuntu <jorge.sasiain@ehu.eus> Date: Wed, 2 Nov 2022 11:05:43 +0000 Subject: [PATCH] NAT-53: create skeleton for module to import router in db, and reorganize code flow --- resource_management/__init__.py | 9 +++ resource_management/db/model.py | 1 + resource_management/db/router.py | 16 +++++ resource_management/hardware/router.py | 85 ++++++++++---------------- 4 files changed, 59 insertions(+), 52 deletions(-) create mode 100644 resource_management/db/router.py diff --git a/resource_management/__init__.py b/resource_management/__init__.py index e69de29..d5f1d24 100644 --- a/resource_management/__init__.py +++ b/resource_management/__init__.py @@ -0,0 +1,9 @@ +import logging +from hardware.router import load_router +from db.router import import_routers + +logger = logging.getLogger(__name__) + +fqdns = ["core1.spa.private", "core2.spa.private", "core3.spa.private"] +routers = import_routers(fqdns) +list(routers) diff --git a/resource_management/db/model.py b/resource_management/db/model.py index 2116506..48a10aa 100644 --- a/resource_management/db/model.py +++ b/resource_management/db/model.py @@ -45,6 +45,7 @@ class Port(base_schema): __tablename__ = 'ports' id = Column('id', Integer, primary_key=True) name = Column('name', String, nullable=False) + speed = Column('speed', Integer, nullable=False) line_card_id = Column( 'line_card_id', Integer, ForeignKey('line_cards.id')) line_card = relationship('LineCard', back_populates='ports') diff --git a/resource_management/db/router.py b/resource_management/db/router.py new file mode 100644 index 0000000..7dc7c14 --- /dev/null +++ b/resource_management/db/router.py @@ -0,0 +1,16 @@ +import logging +from hardware.router import load_router + +logger = logging.getLogger(__name__) + +#TODO for each node (fqdn): +# first store this node in DB, get back its ID +# then use the id obtained above for node_id in line_cards table +# store the line cards in DB, and for each of them, get a mapping of id and position fields +# for each line_card_id, use the id from above that matches the position (returned as <line_card_position> from import_routers) +# finally store the ports in DB +def import_routers(fqdns): + for fqdn in fqdns: + router = load_router(fqdn) + print(router) + yield router \ No newline at end of file diff --git a/resource_management/hardware/router.py b/resource_management/hardware/router.py index deafb24..82da0d6 100644 --- a/resource_management/hardware/router.py +++ b/resource_management/hardware/router.py @@ -7,60 +7,41 @@ from jnpr.junos.op.phyport import PhyPortTable logger = logging.getLogger(__name__) -PORT_SPEEDS = { "ge": 1, "xe": 10, "et": 40 } +def load_router(fqdn): -nodes = [ - { "_id": 1, "fqdn": "core1.spa.private" }, - { "_id": 2, "fqdn": "core2.spa.private" }, - { "_id": 3, "fqdn": "core3.spa.private" }, -] -line_cards = [] -ports = [] + line_cards = [] + ports = [] -#def load_router(list_of_nodes_fqdn) -def load_router(): - - for node in nodes: - dev_id = node["_id"] - devname = node["fqdn"] - # Establish connection - try: - dev = Device(host=devname, passwd="Ansible01@", ssh_config="/home/ubuntu/.ssh/config") - dev.open() - except ConnectError as err: - print("Cannot connect to device: {0}".format(err)) - except ConnectTimeoutError as err: - print("Timeout connecting to device: {0}".format(err)) - except Exception as err: - print("Error connecting to device: {0}".format(err)) + # Establish connection to router + try: + dev = Device(host=fqdn, passwd="Ansible01@", ssh_config="/home/ubuntu/.ssh/config") + dev.open() # Fetch hw info - try: - # For line_cards table - _fpcs = FpcHwTable(dev) - _fpcs.get() - for key, value in _fpcs.items(): - line_cards.append( { "position": int(key.replace("FPC ", "")), "model": value[4][1], "node_id": dev_id } ) - - # For ports table - _ports = PhyPortTable(dev) - _ports.get() - for key, value in _ports.items(): - line_card_position = int(key[3]) - speed = PORT_SPEEDS[key[:2]] - ports.append( { "name": key[-3:], "speed": speed, "<line_card_position>": line_card_position } ) - - except Exception as err: - print("Error reading hardware information for {1}: {0}".format(err, devname)) - + line_cards = [] + ports = [] + + # For line_cards table + _fpcs = FpcHwTable(dev) + _fpcs.get() + for key, value in _fpcs.items(): + line_cards.append( { "position": int(key.replace("FPC ", "")), "model": value[4][1], "node_id": fqdn } ) + + # For ports table + _ports = PhyPortTable(dev) + _ports.get() + for key, value in _ports.items(): + line_card_position = int(key[3]) + ports.append( { "name": key[-3:], "speed": key[:2], "<line_card_position>": line_card_position } ) + + return { "node": fqdn, "line_cards": line_cards, "ports": ports } + + except ConnectError as err: + print("Cannot connect to device: {0}".format(err)) + except ConnectTimeoutError as err: + print("Timeout connecting to device: {0}".format(err)) + except Exception as err: + print("Error reading hardware information for {1}: {0}".format(err, fqdn)) + + finally: dev.close() - - print("\nNODES") - print(json.dumps(nodes, indent=4)) - print("\nLINE CARDS") - print(json.dumps(line_cards, indent=4)) - print("\nPORTS") - print(json.dumps(ports, indent=4)) - -load_router() - -- GitLab