diff --git a/resource_management/__init__.py b/resource_management/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d5f1d2445712ecc70bc2ca6645848d94498398d8 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 2116506c85b2fabc6d63f2656951c64472bb09aa..48a10aa75fc591bcd4e84e4b363bd1c619b6233f 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 0000000000000000000000000000000000000000..7dc7c148e54ddff52bccdcc874ed3267e8101d28 --- /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 deafb24d0ae7b2008f134e2499460b20ee754bca..82da0d677a72e74009b691a69061ab0e503a4a03 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() -