From 170b8fd5bdd218a5d9fe6709bd3e9b90a48447c4 Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Thu, 10 May 2018 14:34:13 +0200 Subject: [PATCH] sdncontroller mgmt using sol005 api Change-Id: I642035fa261e6bf41aa361b7db611dc9f0808631 Signed-off-by: garciadeblas --- osmclient/scripts/osm.py | 176 ++++++++++++++++++++++++++++++ osmclient/sol005/client.py | 4 +- osmclient/sol005/sdncontroller.py | 22 +++- 3 files changed, 194 insertions(+), 8 deletions(-) diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py index 15b38e4..09f61c0 100755 --- a/osmclient/scripts/osm.py +++ b/osmclient/scripts/osm.py @@ -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 #################### diff --git a/osmclient/sol005/client.py b/osmclient/sol005/client.py index ac35d2f..d1c90aa 100644 --- a/osmclient/sol005/client.py +++ b/osmclient/sol005/client.py @@ -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) diff --git a/osmclient/sol005/sdncontroller.py b/osmclient/sol005/sdncontroller.py index a7b9a47..36605eb 100644 --- a/osmclient/sol005/sdncontroller.py +++ b/osmclient/sol005/sdncontroller.py @@ -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() -- 2.17.1