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

Merge branch 'NAT-51' into develop

parents 06a1e905 ec538f50
Branches
Tags
No related merge requests found
...@@ -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
if __name__ == "__main__":
fqdns = ["core1.spa.private", "core2.spa.private", "core3.spa.private"]
routers = import_routers(fqdns)
list(routers)
\ No newline at end of file
import logging
import json
from jnpr.junos import Device
from jnpr.junos.exception import ConnectError, ConnectTimeoutError
from jnpr.junos.op.fpc import FpcHwTable
from jnpr.junos.op.phyport import PhyPortTable
logger = logging.getLogger(__name__)
def load_router(fqdn):
line_cards = []
ports = []
# Establish connection to router
try:
dev = Device(host=fqdn, passwd="Ansible01@", ssh_config="/home/ubuntu/.ssh/config")
dev.open()
# Fetch hw info
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()
"""add speed column to ports table
Revision ID: cdbd931a47d4
Revises: 8901d3bca270
Create Date: 2022-10-24 08:02:14.845868
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'cdbd931a47d4'
down_revision = '8901d3bca270'
branch_labels = None
depends_on = None
def upgrade() -> None:
with op.batch_alter_table('ports') as batch_op:
batch_op.add_column(
Column('speed', sa.Integer, nullable=False)),
insert_after='name'
)
def downgrade() -> None:
op.drop_column('ports','speed')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment