sdncontroller mgmt using sol005 api
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 10 May 2018 12:34:13 +0000 (14:34 +0200)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 10 May 2018 12:34:13 +0000 (14:34 +0200)
Change-Id: I642035fa261e6bf41aa361b7db611dc9f0808631
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
osmclient/scripts/osm.py
osmclient/sol005/client.py
osmclient/sol005/sdncontroller.py

index 15b38e4..09f61c0 100755 (executable)
@@ -926,6 +926,182 @@ def vim_show(ctx, name):
     print(table)
 
 
+####################
+# SDN controller operations
+####################
+
+@cli.command(name='sdnc-create')
+@click.option('--name',
+              prompt=True,
+              help='Name to create sdn controller')
+@click.option('--type',
+              prompt=True,
+              help='SDN controller type')
+@click.option('--sdn_controller_version',
+              help='SDN controller username')
+@click.option('--ip_address',
+              prompt=True,
+              help='SDN controller IP address')
+@click.option('--port',
+              prompt=True,
+              help='SDN controller port')
+@click.option('--switch_dpid',
+              prompt=True,
+              help='Switch DPID (Openflow Datapath ID)')
+@click.option('--user',
+              help='SDN controller username')
+@click.option('--password',
+              hide_input=True,
+              confirmation_prompt=True,
+              help='SDN controller password')
+#@click.option('--description',
+#              default='no description',
+#              help='human readable description')
+@click.pass_context
+def sdnc_create(ctx,
+               name,
+               type,
+               sdn_controller_version,
+               ip_address,
+               port,
+               switch_dpid,
+               user,
+               password):
+    '''creates a new SDN controller
+    '''
+    sdncontroller = {}
+    sdncontroller['name'] = name
+    sdncontroller['type'] = type
+    sdncontroller['ip'] = ip_address
+    sdncontroller['port'] = int(port)
+    sdncontroller['dpid'] = switch_dpid
+    if sdn_controller_version:
+        sdncontroller['version'] = sdn_controller_version
+    if user:
+        sdncontroller['user'] = user
+    if password:
+        sdncontroller['password'] = password
+#    sdncontroller['description'] = description
+    try:
+        check_client_version(ctx.obj, ctx.command.name)
+        ctx.obj.sdnc.create(name, sdncontroller)
+    except ClientException as inst:
+        print(inst.message)
+
+
+@cli.command(name='sdnc-update', short_help='updates an SDN controller')
+@click.argument('name')
+@click.option('--newname', help='New name for the SDN controller')
+@click.option('--type', help='SDN controller type')
+@click.option('--sdn_controller_version', help='SDN controller username')
+@click.option('--ip_address', help='SDN controller IP address')
+@click.option('--port', help='SDN controller port')
+@click.option('--switch_dpid', help='Switch DPID (Openflow Datapath ID)')
+@click.option('--user', help='SDN controller username')
+@click.option('--password', help='SDN controller password')
+#@click.option('--description',  default=None, help='human readable description')
+@click.pass_context
+def sdnc_update(ctx,
+               name,
+               newname,
+               type,
+               sdn_controller_version,
+               ip_address,
+               port,
+               switch_dpid,
+               user,
+               password):
+    '''updates an SDN controller
+
+    NAME: name or ID of the SDN controller
+    '''
+    sdncontroller = {}
+    if newname: sdncontroller['name'] = newname
+    if type: sdncontroller['type'] = type
+    if ip_address: sdncontroller['ip'] = ip_address
+    if port: sdncontroller['port'] = int(port)
+    if switch_dpid: sdncontroller['dpid'] = switch_dpid
+#    sdncontroller['description'] = description
+    if sdn_controller_version is not None:
+        if sdn_controller_version=="":
+            sdncontroller['version'] = None
+        else:
+            sdncontroller['version'] = sdn_controller_version
+    if user is not None:
+        if user=="":
+            sdncontroller['user'] = None
+        else:
+            sdncontroller['user'] = user
+    if password is not None:
+        if password=="":
+            sdncontroller['password'] = None
+        else:
+            sdncontroller['password'] = user
+    try:
+        check_client_version(ctx.obj, ctx.command.name)
+        ctx.obj.sdnc.update(name, sdncontroller)
+    except ClientException as inst:
+        print(inst.message)
+        exit(1)
+
+
+@cli.command(name='sdnc-delete')
+@click.argument('name')
+@click.pass_context
+def sdnc_delete(ctx, name):
+    '''deletes an SDN controller
+
+    NAME: name or ID of the SDN controller to be deleted
+    '''
+    try:
+        check_client_version(ctx.obj, ctx.command.name)
+        ctx.obj.sdnc.delete(name)
+    except ClientException as inst:
+        print(inst.message)
+        exit(1)
+
+
+@cli.command(name='sdnc-list')
+@click.option('--filter', default=None,
+              help='restricts the list to the SDN controllers matching the filter')
+@click.pass_context
+def sdnc_list(ctx, filter):
+    '''list all SDN controllers'''
+    try:
+        check_client_version(ctx.obj, ctx.command.name)
+        resp = ctx.obj.sdnc.list(filter)
+    except ClientException as inst:
+        print(inst.message)
+        exit(1)
+    table = PrettyTable(['name', 'id'])
+    for sdnc in resp:
+        table.add_row([sdnc['name'], sdnc['_id']])
+    table.align = 'l'
+    print(table)
+
+
+@cli.command(name='sdnc-show')
+@click.argument('name')
+@click.pass_context
+def sdnc_show(ctx, name):
+    '''shows the details of an SDN controller
+
+    NAME: name or ID of the SDN controller
+    '''
+    try:
+        check_client_version(ctx.obj, ctx.command.name)
+        resp = ctx.obj.sdnc.get(name)
+    except ClientException as inst:
+        print(inst.message)
+        exit(1)
+
+    table = PrettyTable(['key', 'attribute'])
+    for k, v in resp.items():
+        table.add_row([k, json.dumps(v, indent=2)])
+    table.align = 'l'
+    print(table)
+
+
 ####################
 # Other operations
 ####################
index ac35d2f..d1c90aa 100644 (file)
@@ -19,8 +19,6 @@ OSM SOL005 client API
 """
 
 #from osmclient.v1 import vnf
-#from osmclient.v1 import ns
-#from osmclient.v1 import vim
 #from osmclient.v1 import vca
 from osmclient.sol005 import vnfd
 from osmclient.sol005 import nsd
@@ -28,6 +26,7 @@ from osmclient.sol005 import ns
 from osmclient.sol005 import vim
 from osmclient.sol005 import package
 from osmclient.sol005 import http
+from osmclient.sol005 import sdncontroller
 from osmclient.common.exceptions import ClientException
 
 class Client(object):
@@ -84,6 +83,7 @@ class Client(object):
         self.package = package.Package(self._http_client, client=self)
         self.ns = ns.Ns(self._http_client, client=self)
         self.vim = vim.Vim(self._http_client, client=self)
+        self.sdnc = sdncontroller.SdnController(self._http_client, client=self)
         '''
         self.vnf = vnf.Vnf(http_client, client=self, **kwargs)
         self.vca = vca.Vca(http_client, client=self, **kwargs)
index a7b9a47..36605eb 100644 (file)
@@ -30,20 +30,29 @@ class SdnController(object):
         self._client = client
         self._apiName = '/admin'
         self._apiVersion = '/v1'
-        self._apiResource = '/sdn_controllers'
+        self._apiResource = '/sdns'
         self._apiBase = '{}{}{}'.format(self._apiName,
                                         self._apiVersion, self._apiResource)
     def create(self, name, sdn_controller):
-        if 'type' not in vim_access: 
-            raise Exception("type not provided")
-
         resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=sdn_controller)
-        if not resp or '_id' not in resp:
+        #print 'RESP: {}'.format(resp)
+        if not resp or 'id' not in resp:
             raise ClientException('failed to create SDN controller: '.format(
                                   resp))
         else:
-            print resp['_id']
+            print resp['id']
+
+    def update(self, name, sdn_controller):
+        sdnc = self.get(name)
+        resp = self._http.patch_cmd(endpoint='{}/{}'.format(self._apiBase,sdnc['_id']),
+                                       postfields_dict=sdn_controller)
+        print 'RESP: {}'.format(resp)
+        if not resp or 'id' not in resp:
+            raise ClientException('failed to update SDN controller: '.format(
+                                  resp))
+        else:
+            print resp['id']
 
     def delete(self, name):
         sdn_controller = self.get(name)
@@ -65,6 +74,7 @@ class SdnController(object):
         if filter:
             filter_string = '?{}'.format(filter)
         resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
+        #print 'RESP: {}'.format(resp)
         if resp:
             return resp
         return list()