Enhancement to CLI/sdncon framework to connect to a remote SDN controller platform
diff --git a/cli/cli.py b/cli/cli.py
index e6987af..a2dd0d8 100755
--- a/cli/cli.py
+++ b/cli/cli.py
@@ -297,6 +297,9 @@
# talk to eth0 addr instead of 127.0.0.1
controller_for_prompt = "127.0.0.1:8000"
cluster = "default"
+
+ known_sdn_platforms = ["127.0.0.1:8080"]
+ sdn_controller_paltform = None
run = True
@@ -780,7 +783,7 @@
parser = OptionParser()
parser.add_option("-c", "--controller", dest="controller",
help="set default controller to CONTROLLER",
- metavar="CONTROLLER", default=self.controller)
+ metavar="CONTROLLER", default=self.sdn_controller_paltform)
parser.add_option("-S", "--syntax", dest='dump_syntax',
help="display syntax of loaded commands",
action='store_true', default=False)
@@ -799,9 +802,11 @@
help='suppress warning messages',
action='store_true', default=False)
(self.options, self.args) = parser.parse_args()
- self.controller = self.options.controller
- if not self.controller:
+ if self.controller is None:
self.controller = "127.0.0.1:8000"
+ self.sdn_controller_paltform = self.options.controller
+ if not self.sdn_controller_paltform:
+ self.sdn_controller_paltform = "127.0.0.1:8080"
self.dump_syntax = self.options.dump_syntax
if not self.dump_syntax:
self.dump_syntax = False
@@ -826,6 +831,7 @@
self.store = StoreClient()
self.store.set_controller(self.controller)
+ self.store.set_sdn_controller_platform_rest_if(self.sdn_controller_paltform)
mi = Modi(self, CliModelInfo())
self.mi = mi
diff --git a/cli/storeclient.py b/cli/storeclient.py
index e7fb50c..fb56372 100755
--- a/cli/storeclient.py
+++ b/cli/storeclient.py
@@ -80,6 +80,7 @@
table_read_url = "http://%s/rest/v1/model/%s/"
entry_post_url = "http://%s/rest/v1/model/%s/"
user_data_url = "http://%s/rest/v1/data/"
+ sdn_platform_data_url = "http://%s/rest/v1/system/"
def set_controller(self,controller):
self.controller = controller
@@ -89,6 +90,11 @@
def display_reply_mode(self, mode):
self.display_rest_reply = mode
+
+ def set_sdn_controller_platform_rest_if(self, sdn_controller_rest_if):
+ url = self.sdn_platform_data_url % (self.controller)
+ url = url + "restifaddr/"
+ data = self.rest_post_request(url, sdn_controller_rest_if)
def rest_simple_request(self,url, use_cache = None, timeout = None):
# include a trivial retry mechanism ... other specific
diff --git a/sdncon/rest/views.py b/sdncon/rest/views.py
index 66dc75a..e6f691a 100755
--- a/sdncon/rest/views.py
+++ b/sdncon/rest/views.py
@@ -49,15 +49,14 @@
JSON_CONTENT_TYPE = 'application/json'
BINARY_DATA_CONTENT_TYPE = 'application/octet-stream'
+controller_rest_ip = "127.0.0.1"
+controller_rest_port = "8080"
+
onos = 1
-if onos == 1:
- #CONTROLLER_URL_PREFIX = 'http://localhost:9000/wm/'
- CONTROLLER_URL_PREFIX = 'http://localhost:8080/wm/'
-else:
- CONTROLLER_URL_PREFIX = 'http://localhost:8080/wm/'
def controller_url(*elements):
+ CONTROLLER_URL_PREFIX = "http://%s:%s/wm/" % (controller_rest_ip, controller_rest_port)
return CONTROLLER_URL_PREFIX + '/'.join(elements)
class RestException(Exception):
@@ -2205,4 +2204,23 @@
url = controller_url('onos', 'segmentrouting','policy')
if request.META['QUERY_STRING']:
url += '?' + request.META['QUERY_STRING']
- return get_sdnplatform_response(url)
\ No newline at end of file
+ return get_sdnplatform_response(url)
+
+@safe_rest_view
+def do_controller_restifaddr(request):
+ global controller_rest_ip, controller_rest_port
+ if request.method != 'PUT':
+ raise RestInvalidMethodException()
+ controller_rest_if = request.raw_post_data
+ if controller_rest_if.startswith('"') and controller_rest_if.endswith('"'):
+ controller_rest_if = controller_rest_if[1:-1]
+ #controller_rest_if.replace('\"','')
+ controller_rest_if_addr = controller_rest_if.split(':')
+ controller_rest_ip = controller_rest_if_addr[0]
+ if (len(controller_rest_if_addr) < 2):
+ controller_rest_port = "8080"
+ else:
+ controller_rest_port = controller_rest_if_addr[1]
+ response_text = "http://%s:%s" % (controller_rest_ip,controller_rest_port)
+ response = HttpResponse(response_text, JSON_CONTENT_TYPE)
+ return response
diff --git a/sdncon/urls.py b/sdncon/urls.py
index 8478eab..c00805d 100755
--- a/sdncon/urls.py
+++ b/sdncon/urls.py
@@ -90,6 +90,7 @@
(r'^rest/v1/realtimetest/network/(?P<subcategory>[A-Za-z0-9_:.\-]+)/?$', 'sdncon.rest.views.do_sdnplatform_realtimetest', {'category': 'network'}),
# REST API for accessing controller system information
+ (r'^rest/v1/system/restifaddr/', 'sdncon.rest.views.do_controller_restifaddr'),
(r'^rest/v1/system/version/?$', 'sdncon.rest.views.do_system_version', {}),
(r'^rest/v1/system/interfaces/?$', 'sdncon.rest.views.do_system_inet4_interfaces', {}),
(r'^rest/v1/system/uptime/?$', 'sdncon.rest.views.do_system_uptime', {}),