Skip to content
Snippets Groups Projects
Commit 9c1c52e0 authored by JORGE SASIAIN's avatar JORGE SASIAIN
Browse files

NAT-53: create skeleton for module to import router in db, and reorganize code flow

parent 1bd62a19
Branches
No related tags found
No related merge requests found
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)
...@@ -45,6 +45,7 @@ class Port(base_schema): ...@@ -45,6 +45,7 @@ class Port(base_schema):
__tablename__ = 'ports' __tablename__ = 'ports'
id = Column('id', Integer, primary_key=True) id = Column('id', Integer, primary_key=True)
name = Column('name', String, nullable=False) name = Column('name', String, nullable=False)
speed = Column('speed', Integer, nullable=False)
line_card_id = Column( line_card_id = Column(
'line_card_id', Integer, ForeignKey('line_cards.id')) 'line_card_id', Integer, ForeignKey('line_cards.id'))
line_card = relationship('LineCard', back_populates='ports') line_card = relationship('LineCard', back_populates='ports')
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
...@@ -7,60 +7,41 @@ from jnpr.junos.op.phyport import PhyPortTable ...@@ -7,60 +7,41 @@ from jnpr.junos.op.phyport import PhyPortTable
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
PORT_SPEEDS = { "ge": 1, "xe": 10, "et": 40 } def load_router(fqdn):
nodes = [ line_cards = []
{ "_id": 1, "fqdn": "core1.spa.private" }, ports = []
{ "_id": 2, "fqdn": "core2.spa.private" },
{ "_id": 3, "fqdn": "core3.spa.private" },
]
line_cards = []
ports = []
#def load_router(list_of_nodes_fqdn) # Establish connection to router
def load_router(): try:
dev = Device(host=fqdn, passwd="Ansible01@", ssh_config="/home/ubuntu/.ssh/config")
for node in nodes: dev.open()
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))
# Fetch hw info # Fetch hw info
try: line_cards = []
# For line_cards table ports = []
_fpcs = FpcHwTable(dev)
_fpcs.get() # For line_cards table
for key, value in _fpcs.items(): _fpcs = FpcHwTable(dev)
line_cards.append( { "position": int(key.replace("FPC ", "")), "model": value[4][1], "node_id": dev_id } ) _fpcs.get()
for key, value in _fpcs.items():
# For ports table line_cards.append( { "position": int(key.replace("FPC ", "")), "model": value[4][1], "node_id": fqdn } )
_ports = PhyPortTable(dev)
_ports.get() # For ports table
for key, value in _ports.items(): _ports = PhyPortTable(dev)
line_card_position = int(key[3]) _ports.get()
speed = PORT_SPEEDS[key[:2]] for key, value in _ports.items():
ports.append( { "name": key[-3:], "speed": speed, "<line_card_position>": line_card_position } ) line_card_position = int(key[3])
ports.append( { "name": key[-3:], "speed": key[:2], "<line_card_position>": line_card_position } )
except Exception as err:
print("Error reading hardware information for {1}: {0}".format(err, devname)) 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() 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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment