vnf-list: printing vim account id
[osm/osmclient.git] / osmclient / scripts / osm.py
index 2e65121..9e2304b 100755 (executable)
@@ -217,29 +217,54 @@ def vnfd_list2(ctx, filter):
 
 
 @cli.command(name='vnf-list')
+@click.option('--ns', default=None, help='NS instance id or name to restrict the VNF list')
 @click.pass_context
-def vnf_list(ctx):
+def vnf_list(ctx, ns):
     ''' list all VNF instances'''
     try:
-        check_client_version(ctx.obj, ctx.command.name, 'v1')
-        resp = ctx.obj.vnf.list()
+        if ns:
+            check_client_version(ctx.obj, '--ns')
+            resp = ctx.obj.vnf.list(ns)
+        else:
+            resp = ctx.obj.vnf.list()
     except ClientException as inst:
         print(inst.message)
         exit(1)
-    table = PrettyTable(
-        ['vnf name',
-         'id',
-         'operational status',
-         'config status'])
-    for vnfr in resp:
-        if 'mgmt-interface' not in vnfr:
-            vnfr['mgmt-interface'] = {}
-            vnfr['mgmt-interface']['ip-address'] = None
-        table.add_row(
-            [vnfr['name'],
-             vnfr['id'],
-             vnfr['operational-status'],
-             vnfr['config-status']])
+    fullclassname = ctx.obj.__module__ + "." + ctx.obj.__class__.__name__
+    if fullclassname == 'osmclient.sol005.client.Client':
+        table = PrettyTable(
+            ['vnf id',
+             'name',
+             'ns id',
+             'vnf member index',
+             'vnfd name',
+             'vim account id',
+             'ip address'])
+        for vnfr in resp:
+            name = vnfr['name'] if 'name' in vnfr else '-'
+            table.add_row(
+                [vnfr['_id'],
+                 name,
+                 vnfr['nsr-id-ref'],
+                 vnfr['member-vnf-index-ref'],
+                 vnfr['vnfd-ref'],
+                 vnfr['vim-account-id'],
+                 vnfr['ip-address']])
+    else:
+        table = PrettyTable(
+            ['vnf name',
+             'id',
+             'operational status',
+             'config status'])
+        for vnfr in resp:
+            if 'mgmt-interface' not in vnfr:
+                vnfr['mgmt-interface'] = {}
+                vnfr['mgmt-interface']['ip-address'] = None
+            table.add_row(
+                [vnfr['name'],
+                 vnfr['id'],
+                 vnfr['operational-status'],
+                 vnfr['config-status']])
     table.align = 'l'
     print(table)
 
@@ -409,7 +434,7 @@ def vnf_show(ctx, name, literal, filter):
     NAME: name or ID of the VNF instance
     '''
     try:
-        check_client_version(ctx.obj, ctx.command.name, 'v1')
+        check_client_version(ctx.obj, ctx.command.name)
         resp = ctx.obj.vnf.get(name)
     except ClientException as inst:
         print(inst.message)
@@ -810,6 +835,8 @@ def ns_delete(ctx, name, force):
 @click.option('--description',
               default='no description',
               help='human readable description')
+@click.option('--sdn_controller', default=None, help='Name or id of the SDN controller associated to this VIM account')
+@click.option('--sdn_port_mapping', default=None, help="File describing the port mapping between compute nodes' ports and switch ports")
 @click.pass_context
 def vim_create(ctx,
                name,
@@ -819,19 +846,28 @@ def vim_create(ctx,
                tenant,
                config,
                account_type,
-               description):
+               description,
+               sdn_controller,
+               sdn_port_mapping):
     '''creates a new VIM account
     '''
-    vim = {}
-    vim['vim-username'] = user
-    vim['vim-password'] = password
-    vim['vim-url'] = auth_url
-    vim['vim-tenant-name'] = tenant
-    vim['config'] = config
-    vim['vim-type'] = account_type
-    vim['description'] = description
     try:
-        ctx.obj.vim.create(name, vim)
+        if sdn_controller:
+            check_client_version(ctx.obj, '--sdn_controller')
+        if sdn_port_mapping:
+            check_client_version(ctx.obj, '--sdn_port_mapping')
+        vim = {}
+        vim['vim-username'] = user
+        vim['vim-password'] = password
+        vim['vim-url'] = auth_url
+        vim['vim-tenant-name'] = tenant
+        vim['vim-type'] = account_type
+        vim['description'] = description
+        vim['config'] = config
+        if sdn_controller or sdn_port_mapping:
+            ctx.obj.vim.create(name, vim, sdn_controller, sdn_port_mapping)
+        else:
+            ctx.obj.vim.create(name, vim)
     except ClientException as inst:
         print(inst.message)
         exit(1)
@@ -846,9 +882,9 @@ def vim_create(ctx,
 @click.option('--tenant', help='VIM tenant name')
 @click.option('--config', help='VIM specific config parameters')
 @click.option('--account_type', help='VIM type')
-@click.option('--sdn_controller', help='Name or id of the SDN controller associated to this VIM account')
-@click.option('--sdn_port_mapping', default=None, help="File describing the port mapping between compute nodes' ports and switch ports")
 @click.option('--description', help='human readable description')
+@click.option('--sdn_controller', default=None, help='Name or id of the SDN controller associated to this VIM account')
+@click.option('--sdn_port_mapping', default=None, help="File describing the port mapping between compute nodes' ports and switch ports")
 @click.pass_context
 def vim_update(ctx,
                name,
@@ -859,36 +895,25 @@ def vim_update(ctx,
                tenant,
                config,
                account_type,
-               description):
+               description,
+               sdn_controller,
+               sdn_port_mapping):
     '''updates a VIM account
 
     NAME: name or ID of the VIM account
     '''
-    vim = {}
-    if newname: vim['name'] = newname
-    if user: vim['vim_user'] = user
-    if password: vim['vim_password'] = password
-    if auth_url: vim['vim_url'] = auth_url
-    if tenant: vim['vim-tenant-name'] = tenant
-    if account_type: vim['vim_type'] = account_type
-    if description: vim['description'] = description
-    config_dict = {}
-    if config is not None:
-        if config=="" and (sdncontroller or sdn_port_mapping):
-            raise ClientException("clearing config is incompatible with updating SDN info")
-        if config=="":
-            vim['config'] = None
-        else:
-            config_dict = yaml.safe_load(config)
-    if sdn_controller: config_dict['sdn_controller'] = sdn_controller
-    if sdn_port_mapping:
-        with open(sdn_port_mapping, 'r') as f:
-            config_dict['sdn_port_mapping'] = yaml.safe_load(f.read())
-    if 'config' not in vim and config_dict:
-        vim['config'] = yaml.safe_dump(config_dict)
     try:
         check_client_version(ctx.obj, ctx.command.name)
-        ctx.obj.vim.update(name, vim)
+        vim = {}
+        if newname: vim['name'] = newname
+        if user: vim['vim_user'] = user
+        if password: vim['vim_password'] = password
+        if auth_url: vim['vim_url'] = auth_url
+        if tenant: vim['vim-tenant-name'] = tenant
+        if account_type: vim['vim_type'] = account_type
+        if description: vim['description'] = description
+        if config: vim['config'] = config
+        ctx.obj.vim.update(name, vim, sdn_controller, sdn_port_mapping)
     except ClientException as inst:
         print(inst.message)
         exit(1)