Improved help message for nfpkg-create, nspkg-create and their aliases
[osm/osmclient.git] / osmclient / scripts / osm.py
index 6161e43..c5e8212 100755 (executable)
@@ -228,6 +228,8 @@ def ns_list(ctx, filter, long):
     def summarize_deployment_status(status_dict):
         #Nets
         summary = ""
+        if not status_dict:
+            return summary
         n_nets = 0
         status_nets = {}
         net_list = status_dict.get('nets',[])
@@ -278,6 +280,9 @@ def ns_list(ctx, filter, long):
         return summary
         
     def summarize_config_status(ee_list):
+        summary = ""
+        if not ee_list:
+            return summary
         n_ee = 0
         status_ee = {}
         for ee in ee_list:
@@ -290,7 +295,6 @@ def ns_list(ctx, filter, long):
                 status_ee[ee['elementType']][ee['status']] += 1
             else:
                 status_ee[ee['elementType']][ee['status']] = 1
-        summary = ""
         for elementType in ["KDU", "VDU", "PDU", "VNF", "NS"]:
             if elementType in status_ee:
                 message = ""
@@ -302,6 +306,7 @@ def ns_list(ctx, filter, long):
                 summary += "{}: {}".format(elementType, message)
         summary += "TOTAL Exec. Env.: {}".format(n_ee)
         return summary
+
     logger.debug("")
     if filter:
         check_client_version(ctx.obj, '--filter')
@@ -334,13 +339,14 @@ def ns_list(ctx, filter, long):
         fullclassname = ctx.obj.__module__ + "." + ctx.obj.__class__.__name__
         if fullclassname == 'osmclient.sol005.client.Client':
             nsr = ns
+            logger.debug('NS info: {}'.format(nsr))
             nsr_name = nsr['name']
             nsr_id = nsr['_id']
             date = datetime.fromtimestamp(nsr['create-time']).strftime("%Y-%m-%dT%H:%M:%S")
-            ns_state = nsr['nsState']
+            ns_state = nsr.get('nsState', nsr['_admin']['nsState'])
             if long:
-                deployment_status = summarize_deployment_status(nsr['deploymentStatus'])
-                config_status = summarize_config_status(nsr['configurationStatus'])
+                deployment_status = summarize_deployment_status(nsr.get('deploymentStatus'))
+                config_status = summarize_config_status(nsr.get('configurationStatus'))
                 project_id = nsr.get('_admin').get('projects_read')[0]
                 project_name = '-'
                 for p in project_list:
@@ -357,9 +363,12 @@ def ns_list(ctx, filter, long):
                         break
                 #vim = '{} ({})'.format(vim_name, vim_id)
                 vim = vim_name
-            current_operation = "{} ({})".format(nsr['currentOperation'],nsr['currentOperationID'])
+            if 'currentOperation' in nsr:
+                current_operation = "{} ({})".format(nsr['currentOperation'],nsr['currentOperationID'])
+            else:
+                current_operation = "{} ({})".format(nsr['_admin'].get('current-operation','-'), nsr['_admin']['nslcmop'])
             error_details = "N/A"
-            if ns_state == "BROKEN" or ns_state == "DEGRADED" or nsr['errorDescription']:
+            if ns_state == "BROKEN" or ns_state == "DEGRADED" or nsr.get('errorDescription'):
                 error_details = "{}\nDetail: {}".format(nsr['errorDescription'], nsr['errorDetail'])
         else:
             nsopdata = ctx.obj.ns.get_opdata(ns['id'])
@@ -1419,9 +1428,12 @@ def nsd_create(ctx, filename, overwrite, skip_charm_build):
               help='The charm will not be compiled, it is assumed to already exist')
 @click.pass_context
 def nsd_create1(ctx, filename, overwrite, skip_charm_build):
-    """creates a new NSD/NSpkg
+    """onboards a new NSpkg (alias of nspkg-create) (TO BE DEPRECATED)
 
-    FILENAME: NSD yaml file or NSpkg tar.gz file
+    \b
+    FILENAME: NF Package tar.gz file, NF Descriptor YAML file or NF Package folder
+              If FILENAME is a file (NF Package tar.gz or NF Descriptor YAML), it is onboarded.
+              If FILENAME is an NF Package folder, it is built and then onboarded.
     """
     logger.debug("")
     nsd_create(ctx, filename, overwrite=overwrite, skip_charm_build=skip_charm_build)
@@ -1438,9 +1450,12 @@ def nsd_create1(ctx, filename, overwrite, skip_charm_build):
               help='The charm will not be compiled, it is assumed to already exist')
 @click.pass_context
 def nsd_create2(ctx, filename, overwrite, skip_charm_build):
-    """creates a new NSD/NSpkg
+    """onboards a new NSpkg
 
-    FILENAME: NSD folder, NSD yaml file or NSpkg tar.gz file
+    \b
+    FILENAME: NF Package tar.gz file, NF Descriptor YAML file or NF Package folder
+              If FILENAME is a file (NF Package tar.gz or NF Descriptor YAML), it is onboarded.
+              If FILENAME is an NF Package folder, it is built and then onboarded.
     """
     logger.debug("")
     nsd_create(ctx, filename, overwrite=overwrite, skip_charm_build=skip_charm_build)
@@ -1475,9 +1490,12 @@ def vnfd_create(ctx, filename, overwrite, skip_charm_build, override_epa, overri
               help='overrides all VDU interfaces to PARAVIRT')
 @click.pass_context
 def vnfd_create1(ctx, filename, overwrite, skip_charm_build, override_epa, override_nonepa, override_paravirt):
-    """creates a new VNFD/VNFpkg
+    """onboards a new NFpkg (alias of nfpkg-create) (TO BE DEPRECATED)
 
-    FILENAME: VNFD yaml file or VNFpkg tar.gz file
+    \b
+    FILENAME: NF Package tar.gz file, NF Descriptor YAML file or NF Package folder
+              If FILENAME is a file (NF Package tar.gz or NF Descriptor YAML), it is onboarded.
+              If FILENAME is an NF Package folder, it is built and then onboarded.
     """
     logger.debug("")
     vnfd_create(ctx, filename, overwrite=overwrite, skip_charm_build=skip_charm_build,
@@ -1501,9 +1519,12 @@ def vnfd_create1(ctx, filename, overwrite, skip_charm_build, override_epa, overr
               help='overrides all VDU interfaces to PARAVIRT')
 @click.pass_context
 def vnfd_create2(ctx, filename, overwrite, skip_charm_build, override_epa, override_nonepa, override_paravirt):
-    """creates a new VNFD/VNFpkg
+    """onboards a new NFpkg (alias of nfpkg-create)
 
-    FILENAME: NF Package Folder, NF Descriptor yaml file or NFpkg tar.gz file
+    \b
+    FILENAME: NF Package tar.gz file, NF Descriptor YAML file or NF Package folder
+              If FILENAME is a file (NF Package tar.gz or NF Descriptor YAML), it is onboarded.
+              If FILENAME is an NF Package folder, it is built and then onboarded.
     """
     logger.debug("")
     vnfd_create(ctx, filename, overwrite=overwrite, skip_charm_build=skip_charm_build,
@@ -1527,9 +1548,12 @@ def vnfd_create2(ctx, filename, overwrite, skip_charm_build, override_epa, overr
               help='overrides all VDU interfaces to PARAVIRT')
 @click.pass_context
 def nfpkg_create(ctx, filename, overwrite, skip_charm_build, override_epa, override_nonepa, override_paravirt):
-    """creates a new NFpkg
+    """onboards a new NFpkg (alias of nfpkg-create)
 
-    FILENAME: NF Package Folder, NF Descriptor yaml file or NFpkg tar.gz filems to build
+    \b
+    FILENAME: NF Package tar.gz file, NF Descriptor YAML file or NF Package folder
+              If FILENAME is a file (NF Package tar.gz or NF Descriptor YAML), it is onboarded.
+              If FILENAME is an NF Package folder, it is built and then onboarded.
     """
     logger.debug("")
     vnfd_create(ctx, filename, overwrite=overwrite, skip_charm_build=skip_charm_build,
@@ -2297,7 +2321,7 @@ def vim_list(ctx, filter, long):
 #    else:
 #        resp = ctx.obj.vim.list(ro_update)
     if long:
-        table = PrettyTable(['vim name', 'uuid', 'operational state', 'error details'])
+        table = PrettyTable(['vim name', 'uuid', 'project', 'operational state', 'error details'])
     else:
         table = PrettyTable(['vim name', 'uuid'])
     for vim in resp:
@@ -2310,7 +2334,18 @@ def vim_list(ctx, filter, long):
             error_details = 'N/A'
             if vim_state == 'ERROR':
                 error_details = vim_details['_admin'].get('detailed-status', 'Not found')
-            table.add_row([vim['name'], vim['uuid'], vim_state, wrap_text(text=error_details, width=80)])
+            project_list = ctx.obj.project.list()
+            vim_project_list = vim_details.get('_admin').get('projects_read')
+            project_id = 'None'
+            project_name = 'None'
+            if vim_project_list:
+                project_id = vim_project_list[0]
+                for p in project_list:
+                    if p['_id'] == project_id:
+                        project_name = p['name']
+                        break
+            table.add_row([vim['name'], vim['uuid'], '{} ({})'.format(project_name, project_id),
+                          vim_state, wrap_text(text=error_details, width=80)])
         else:
             table.add_row([vim['name'], vim['uuid']])
     table.align = 'l'