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()
-