summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vyroute/DataIO.py81
-rw-r--r--vyroute/Router.py503
-rw-r--r--vyroute/Routing.py29
-rw-r--r--vyroute/basic_function/Modifylo.py43
-rw-r--r--vyroute/basic_function/OSPFRoute.py126
-rw-r--r--vyroute/basic_function/RIPRoute.py44
-rw-r--r--vyroute/basic_function/StaticRoute.py47
7 files changed, 649 insertions, 224 deletions
diff --git a/vyroute/DataIO.py b/vyroute/DataIO.py
deleted file mode 100644
index 979820e..0000000
--- a/vyroute/DataIO.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# author=hochikong
-import shelve
-
-
-class IO(object):
-
- def post(self):
- pass
-
- def put(self):
- pass
-
-
-class RawIO(IO):
- # The router node record is in a python shelve object (.dat file).
- def __init__(self, datafile):
- """Initial member self.file.
-
- :param datafile: a string
- """
- self.file = datafile
-
- def post(self, key, data):
- """Create a new record in the shelve object.
-
- :param key: a string
- :param data: a python dictionary
- :return : a python dictionary
- """
- temp = shelve.open(self.file)
- temp[key] = data
- temp.close()
- return {"Result": "Create successfully."}
-
- def put(self, key, data):
- """Update a record or delete a existing record.
-
- :param key: a string
- :param data: a python dictionary
- :return: different python dictionaries
- """
- if data == {"content": "delete"}:
- temp = shelve.open(self.file)
- try:
- del temp[key]
- return {"Result": "Delete successfully."}
- except KeyError:
- return {"Result": "There is no key '%s'." % key}
- finally:
- temp.close()
- else:
- self.post(key, data)
- return {"Result": "Update successfully."}
-
- def get(self, key="all"):
- """Query a specific record or all records.
-
- :param key: 'none' or a vaild key
- :param args: 'all' or 'none'
- :return: different python dictionaries
- """
- temp = shelve.open(self.file)
- if key == "all":
- print temp
- temp.close()
- else:
- try:
- print temp[key]
- except KeyError:
- return {"Result": "'There is no key '%s'." % key}
- finally:
- temp.close()
-
-
-
-
-
-
-
-
-
diff --git a/vyroute/Router.py b/vyroute/Router.py
new file mode 100644
index 0000000..b8c6aca
--- /dev/null
+++ b/vyroute/Router.py
@@ -0,0 +1,503 @@
+# author=hochikong
+from Exscript.protocols import SSH2
+from Exscript import Account
+from vyroute.basic_function import Modifylo
+from vyroute.basic_function import StaticRoute
+from vyroute.basic_function import RIPRoute
+from vyroute.basic_function import OSPFRoute
+
+
+class Router(object):
+ # Static router configuration func
+ def static_route(self, data):
+ pass
+
+ # RIP router configuration func
+ def rip_route(self, data):
+ pass
+
+ # OSPF router configuration func
+ def ospf_area(self, data):
+ pass
+
+ def router_id(self, data):
+ pass
+
+ def ospf_redistribute(self, data):
+ pass
+
+ def ospf_adjacency(self):
+ pass
+
+ def ospf_default_route(self, data):
+ pass
+
+ def ospf_route_map(self, data):
+ pass
+
+ # Interfaces configuration func
+ def lo(self, data):
+ pass
+
+ # Basic VyOS configuration func
+ def configure(self):
+ pass
+
+ def commit_config(self):
+ pass
+
+ def save_config(self):
+ pass
+
+ def exit_config(self):
+ pass
+
+ # Login and logout a router
+ def login(self):
+ pass
+
+ def logout(self):
+ pass
+
+
+class BasicRouter(Router):
+ def __init__(self, address, cred):
+ """Initial a router object
+
+ :param address: Router address,example:'192.168.10.10'
+ :param cred: Router user and password,example:'vyos:vyos'
+ """
+ self.address = address
+ self.cred = list(cred)
+ self.divi = self.cred.index(":")
+ self.username = ''.join(self.cred[:self.divi])
+ self.passwd = ''.join(self.cred[self.divi+1:])
+ self.account = Account(self.username, self.passwd)
+ self.conn = SSH2()
+ self.status = {"object": None, "commit": None, "save": None, "configure": None}
+
+ def login(self):
+ """Login the router
+
+ :return: a python dictionary
+ """
+ try:
+ if self.conn.connect(self.address) == "True":
+ self.conn.login(self.account)
+ self.status["object"] = "login"
+ return {"Result": "Login successfully."}
+ else:
+ return {"Error": "Connect Failed."}
+ except Exception, e:
+ return {"Error": e}
+
+ def logout(self):
+ """Logout the router
+
+ :return: a python dictionary
+ """
+ try:
+ self.conn.close(force=True)
+ self.status["object"] = "logout"
+ return {"Result": "Logout successfully."}
+ except Exception, e:
+ return {"Error": e}
+
+ def configure(self):
+ """Enter the VyOS configure mode
+
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] is None:
+ self.conn.execute("configure")
+ self.status["configure"] = "Yes"
+ return {"Result": "Active configure mode successfully."}
+ else:
+ return {"Error": "In configure mode now!"}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def commit_config(self):
+ """Commit the configuration changes
+
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ if self.status["commit"] is None:
+ return {"Error": "You don't need to commit."}
+ if self.status["commit"] == "No":
+ self.conn.execute("commit")
+ self.status["commit"] = "Yes"
+ return {"Result": "Commit successfully."}
+ else:
+ return {"Error": "You have committed!"}
+ else:
+ return {"Error": "Router not in configure mode!"}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def save_config(self):
+ """Save the configuration after commit
+
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ if self.status["commit"] == "Yes":
+ if self.status["save"] is None:
+ return {"Error": "You don't need to save."}
+ if self.status["save"] == "No":
+ self.conn.execute("save")
+ self.status["save"] = "Yes"
+ else:
+ return {"Error": "You have saved!"}
+ else:
+ return {"Error": "You need to commit first!"}
+ else:
+ return {"Error": "Router not in configure mode!"}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def exit_config(self, force=False):
+ """Exit VyOS configure mode
+
+ :param force: True or False
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ if force is True:
+ self.conn.execute("exit")
+ self.status["configure"] = None
+ self.status["save"] = None
+ self.status["commit"] = None
+ return {"Result": "Exit configure mode successfully."}
+ if force is False:
+ if self.status["commit"] == "Yes":
+ if self.status["save"] == "Yes":
+ self.conn.execute("exit")
+ self.status["configure"] = None
+ self.status["save"] = None
+ self.status["commit"] = None
+ return {"Result": "Exit configure mode successfully."}
+ else:
+ return {"Error": "You should save first."}
+ else:
+ return {"Error": "You should commit first."}
+ else:
+ return {"Error": "You are not in configure mode,need not exit."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def lo(self, data):
+ """Modify a router loopback address
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = Modifylo.modifylo(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def static_route(self, data):
+ """Static router setting
+
+ Parameter data example:
+ {'config':[{'target':'10.20.10.0/24','next-hop':'10.20.10.1','distance':'1'},
+ {'target':"192.168.20.0/24','next-hop':'192.168.20.1','distance':'1'},
+ ],
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = StaticRoute.staticroute(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def rip_route(self, data):
+ """RIP protocols router setting
+
+ Parameter data example:
+ {'config':['192.168.10.0/24','10.20.10.0/24'],
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = RIPRoute.riproute(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def ospf_area(self, data):
+ """OSPF area setting
+
+ Parameter data example:
+ {'config':[{'area':'0','network':'192.168.10.0/24'},
+ {'area':'0','network':'10.20.10.0/24'},
+ ],
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.ospfarea(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def router_id(self, data):
+ """OSPF router id setting
+
+ Parameter data example:
+ {'config':{'id':'1.1.1.1'},
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.router_id(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def ospf_redistribute(self, data):
+ """OSPF redistribute setting
+
+ Parameter data example:
+ {'config':{'type':'2'},
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.ospf_redistribute(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def ospf_adjacency(self):
+ """set protocols ospf log-adjacency-changes
+
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.ospf_adjacency(self.conn)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def ospf_default_route(self, data):
+ """set protocols ospf default-information originate always (and other 2 commands)
+
+ Parameter data example:
+ {'config':{'metric':'10','metric-type':'2'},
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.ospf_default_route(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+ def ospf_route_map(self, data):
+ """VyOS route-map setting when you configure a OSPF router
+
+ Parameter data example:
+ {'config':{'rule':'10','interface':'lo'},
+ }
+
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ try:
+ if self.status["object"] == "login":
+ if self.status["configure"] == "Yes":
+ res = OSPFRoute.ospf_route_map(self.conn, data)
+ if "Result" in res:
+ if self.status["commit"] == "No":
+ pass
+ else:
+ self.status["commit"] = "No"
+ if self.status["save"] == "No":
+ pass
+ else:
+ self.status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return {"Error": "You are not in configure mode."}
+ else:
+ return {"Error": "Router object not connect to a router."}
+ except Exception, e:
+ return {"Error": e}
+
+
+
+
+
+
+
diff --git a/vyroute/Routing.py b/vyroute/Routing.py
deleted file mode 100644
index 8c1ec11..0000000
--- a/vyroute/Routing.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# author=hochikong
-from vyroute.basic_function import RIPRoute
-from vyroute.basic_function import StaticRoute
-
-
-class BasicRouting(object):
- def static_routing(self,data):
- pass
-
- def rip_routing(self,data):
- pass
-
- def ospf_routing(self,data):
- pass
-
-
-class Routing(BasicRouting):
- def static_routing(self, data):
- return StaticRoute.staticroute(data)
-
- def rip_routing(self,data):
- return RIPRoute.riproute(data)
-
-
-
-
-
-
-
diff --git a/vyroute/basic_function/Modifylo.py b/vyroute/basic_function/Modifylo.py
index 6808c0d..9d88427 100644
--- a/vyroute/basic_function/Modifylo.py
+++ b/vyroute/basic_function/Modifylo.py
@@ -1,50 +1,21 @@
# author=hochikong
-from Exscript.protocols import SSH2
-from Exscript import Account
-
-
-def modifylo(data):
+def modifylo(obj, data):
"""This method provide a loopback address configuration function
Parameter data example:
- {'router':'vyos@172.16.77.188','passwd':'vyos','config':'1.1.1.1/32'
+ {'config':'1.1.1.1/32'
}
+ :param obj: a connection object
:param data: a python dictionary
:return: a python dictionary
"""
+
lo_basic_configuration = "set interfaces loopback lo address %s"
try:
- stringlist = list(data['router'])
- divi = stringlist.index('@')
- user = ''.join(stringlist[:divi])
- passwd = data['passwd']
- address = ''.join(stringlist[divi+1:])
- account = Account(user, passwd)
- conn = SSH2()
- conn.connect(address)
- conn.login(account)
-
-# configure mode
- conn.execute("configure")
-
-# configure loopback interface lo address
- conn.execute(lo_basic_configuration % data['config'])
-
- # commit configuration
- conn.execute("commit")
-
- # save configuration
- conn.execute("save")
-
- # exit configure mode
- conn.execute("exit")
-
- # close connection
- conn.close(force=True)
-
- return {"Result": "Configured successfully"}
-
+ # Configure loopback interface lo address
+ obj.execute(lo_basic_configuration % data['config'])
+ return {"Result": "Modify successfully."}
except Exception, e:
return {'Error': e}
diff --git a/vyroute/basic_function/OSPFRoute.py b/vyroute/basic_function/OSPFRoute.py
new file mode 100644
index 0000000..b89edd6
--- /dev/null
+++ b/vyroute/basic_function/OSPFRoute.py
@@ -0,0 +1,126 @@
+# author=hochikong
+def ospfarea(obj, data):
+ """This method provide a OSPF area configuration function
+
+ Parameter data example:
+ {'config':[{'area':'0','network':'192.168.10.0/24'},
+ {'area':'0','network':'10.20.10.0/24'},
+ ],
+ }
+
+ :param obj: a connection object
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ ospf_basic_configuration = "set protocols ospf area %s network %s"
+
+ try:
+ # Configure ospf area
+ for i in data["config"]:
+ obj.execute(ospf_basic_configuration % (i['area'], i['network']))
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
+
+
+def router_id(obj, data):
+ """This method provide a router id configuration function
+
+ Parameter data example:
+ {'config':{'id':'1.1.1.1'},
+ }
+
+ :param obj: a connection object
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ router_id_configuration = "set protocols ospf parameters router-id %s"
+ try:
+ # Configure router id
+ obj.execute(router_id_configuration % data['config']['id'])
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
+
+
+def ospf_redistribute(obj, data):
+ """This method provide a router redistribute function
+
+ Parameter data example:
+ {'config':{'type':'2'},
+ }
+
+ :param obj: a connection object
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ redistribute_configuration = {"0": "set protocols ospf redistribute connected metric-type %s",
+ "1": "set protocols ospf redistribute connected route-map CONNECT",
+ }
+ try:
+ obj.execute(redistribute_configuration['0'] % data['config']['type'])
+ obj.execute(redistribute_configuration['1'])
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
+
+
+def ospf_adjacency(obj):
+ """This method execute : set protocols ospf log-adjacency-changes
+
+ :param obj: a connection object
+ :return: a python dictionary
+ """
+ log_adjacency_changes_configuration = "set protocols ospf log-adjacency-changes"
+ try:
+ obj.execute(log_adjacency_changes_configuration)
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
+
+
+def ospf_default_route(obj, data):
+ """This method execute : set protocols ospf default-information originate always
+ and other commands
+
+ Parameter data example:
+ {'config':{'metric':'10','metric-type':'2'},
+ }
+
+ :param obj: a connection object
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ default_route_configuration = {"0": "set protocols ospf default-information originate always",
+ "1": "set protocols ospf default-information originate metric %s",
+ "2": "set protocols ospf default-information originate metric-type %",
+ }
+ try:
+ obj.execute(default_route_configuration['0'])
+ obj.execute(default_route_configuration['1'] % data['config']['metric'])
+ obj.execute(default_route_configuration['2'] % data['config']['metric-type'])
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
+
+
+def ospf_route_map(obj, data):
+ """This method used for VyOS route-map setting when you configure a OSPF router
+
+ Parameter data example:
+ {'config':{'rule':'10','interface':'lo'},
+ }
+
+ :param obj: a connection object
+ :param data: a python dictionary
+ :return: a python dictionary
+ """
+ route_map_configuration = {"0": "set policy route-map CONNECT rule %s action permit",
+ "1": "set policy route-map CONNECT rule %s match interface %s",
+ }
+ try:
+ obj.execute(route_map_configuration['0'] % data['config']['rule'])
+ obj.execute(route_map_configuration['1'] % (data['config']['rule'], data['config']['interface']))
+ return {"Result": "Configured successfully"}
+ except Exception, e:
+ return {"Error": e}
diff --git a/vyroute/basic_function/RIPRoute.py b/vyroute/basic_function/RIPRoute.py
index f559a17..085299e 100644
--- a/vyroute/basic_function/RIPRoute.py
+++ b/vyroute/basic_function/RIPRoute.py
@@ -1,55 +1,23 @@
# author=hochikong
-from Exscript.protocols import SSH2
-from Exscript import Account
-
-
-def riproute(data):
+def riproute(obj, data):
"""This method provide a RIP protocols router configuration function
Parameter data example:
- {'router':'vyos@172.16.77.188','passwd':'vyos',
- 'config':['192.168.10.0/24','10.20.10.0/24'],
+ {'config':['192.168.10.0/24','10.20.10.0/24'],
}
+ :param obj: a connection object
:param data: a python dictionary
:return: a python dictionary
"""
rip_basic_configuration = "set protocols rip network %s"
redistribute_configuration = "set protocols rip redistribute connected"
try:
- stringlist = list(data['router'])
- divi = stringlist.index('@')
- user = ''.join(stringlist[:divi])
- passwd = data['passwd']
- address = ''.join(stringlist[divi + 1:])
- account = Account(user, passwd)
- conn = SSH2()
- conn.connect(address)
- conn.login(account)
-
- # configure mode
- conn.execute("configure")
-
- # configure RIP router
+ # Configure RIP router
for i in data['config']:
- conn.execute(rip_basic_configuration % i)
-
- conn.execute(redistribute_configuration)
-
- # commit configuration
- conn.execute("commit")
-
- # save configuration
- conn.execute("save")
-
- # exit configure mode
- conn.execute("exit")
-
- # close connection
- conn.close(force=True)
-
+ obj.execute(rip_basic_configuration % i)
+ obj.execute(redistribute_configuration)
return {"Result": "Configured successfully"}
-
except Exception, e:
return {"Error": e}
diff --git a/vyroute/basic_function/StaticRoute.py b/vyroute/basic_function/StaticRoute.py
index f9fa233..f0d6afc 100644
--- a/vyroute/basic_function/StaticRoute.py
+++ b/vyroute/basic_function/StaticRoute.py
@@ -1,57 +1,24 @@
# author=hochikong
-from Exscript.protocols import SSH2
-from Exscript import Account
-
-
-def staticroute(data):
+def staticroute(obj, data):
"""This method provide a basic static router configuration function
Parameter data example:
- {'router':'vyos@172.16.77.188','passwd':'vyos',
- 'config':[{'target':'10.20.10.0/24','next-hop':'10.20.10.1','distance':'1'},
- {'target':"192.168.20.0/24','next-hop':'192.168.20.1','distance':'1'}
- ]
+ {'config':[{'target':'10.20.10.0/24','next-hop':'10.20.10.1','distance':'1'},
+ {'target':"192.168.20.0/24','next-hop':'192.168.20.1','distance':'1'},
+ ],
}
+ :param obj: a connection object
:param data: a python dictionary
:return:a python dictionary
"""
static_basic_configuration = "set protocols static route %s next-hop %s distance %s"
try:
- stringlist = list(data['router'])
- divi = stringlist.index('@')
- user = ''.join(stringlist[:divi])
- passwd = data['passwd']
- address = ''.join(stringlist[divi+1:])
- account = Account(user, passwd)
- conn = SSH2()
- conn.connect(address)
- conn.login(account)
-
- # configure mode
- conn.execute("configure")
-
- # configure static router
+ # Configure static router
for i in data['config']:
- conn.execute(static_basic_configuration % (i['target'],
- i['next-hop'],
- i['distance']))
-
- # commit configuration
- conn.execute("commit")
-
- # save configuration
- conn.execute("save")
-
- # exit configure mode
- conn.execute("exit")
-
- # close connection
- conn.close(force=True)
-
+ obj.execute(static_basic_configuration % (i['target'], i['next-hop'], i['distance']))
return {"Result": "Configured successfully"}
-
except Exception, e:
return {'Error': e}