X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fscripts%2Fosm.py;h=570ad8c9f9e5544a998422946792724a8fb7f9a6;hb=8e0f07980b9c4ed48e77ec9de22d766c0e186acb;hp=62802589ad0cebe126781274a9d1c58396bbe2ef;hpb=159adcfc093682a3b45934150f1f08c850cc7276;p=osm%2Fosmclient.git diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py index 6280258..570ad8c 100755 --- a/osmclient/scripts/osm.py +++ b/osmclient/scripts/osm.py @@ -687,9 +687,13 @@ def vnfd_update2(ctx, name, content): # DELETE operations #################### -def nsd_delete(ctx, name): +def nsd_delete(ctx, name, force): try: - ctx.obj.nsd.delete(name) + if not force: + ctx.obj.nsd.delete(name) + else: + check_client_version(ctx.obj, '--force') + ctx.obj.nsd.delete(name, force) except ClientException as inst: print(inst.message) exit(1) @@ -697,29 +701,35 @@ def nsd_delete(ctx, name): @cli.command(name='nsd-delete', short_help='deletes a NSD/NSpkg') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def nsd_delete1(ctx, name): +def nsd_delete1(ctx, name, force): '''deletes a NSD/NSpkg NAME: name or ID of the NSD/NSpkg to be deleted ''' - nsd_delete(ctx, name) + nsd_delete(ctx, name, force) @cli.command(name='nspkg-delete', short_help='deletes a NSD/NSpkg') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def nsd_delete2(ctx, name): +def nsd_delete2(ctx, name, force): '''deletes a NSD/NSpkg NAME: name or ID of the NSD/NSpkg to be deleted ''' - nsd_delete(ctx, name) + nsd_delete(ctx, name, force) -def vnfd_delete(ctx, name): +def vnfd_delete(ctx, name, force): try: - ctx.obj.vnfd.delete(name) + if not force: + ctx.obj.vnfd.delete(name) + else: + check_client_version(ctx.obj, '--force') + ctx.obj.vnfd.delete(name, force) except ClientException as inst: print(inst.message) exit(1) @@ -727,36 +737,43 @@ def vnfd_delete(ctx, name): @cli.command(name='vnfd-delete', short_help='deletes a VNFD/VNFpkg') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def vnfd_delete1(ctx, name): +def vnfd_delete1(ctx, name, force): '''deletes a VNFD/VNFpkg NAME: name or ID of the VNFD/VNFpkg to be deleted ''' - vnfd_delete(ctx, name) + vnfd_delete(ctx, name, force) @cli.command(name='vnfpkg-delete', short_help='deletes a VNFD/VNFpkg') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def vnfd_delete2(ctx, name): +def vnfd_delete2(ctx, name, force): '''deletes a VNFD/VNFpkg NAME: name or ID of the VNFD/VNFpkg to be deleted ''' - vnfd_delete(ctx, name) + vnfd_delete(ctx, name, force) @cli.command(name='ns-delete', short_help='deletes a NS instance') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def ns_delete(ctx, name): +def ns_delete(ctx, name, force): '''deletes a NS instance NAME: name or ID of the NS instance to be deleted ''' try: - ctx.obj.ns.delete(name) + if not force: + ctx.obj.ns.delete(name) + else: + check_client_version(ctx.obj, '--force') + ctx.obj.ns.delete(name, force) except ClientException as inst: print(inst.message) exit(1) @@ -865,14 +882,19 @@ def vim_update(ctx, @cli.command(name='vim-delete') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def vim_delete(ctx, name): +def vim_delete(ctx, name, force): '''deletes a VIM account NAME: name or ID of the VIM account to be deleted ''' try: - ctx.obj.vim.delete(name) + if not force: + ctx.obj.vim.delete(name) + else: + check_client_version(ctx.obj, '--force') + ctx.obj.vim.delete(name, force) except ClientException as inst: print(inst.message) exit(1) @@ -1047,15 +1069,16 @@ def sdnc_update(ctx, @cli.command(name='sdnc-delete') @click.argument('name') +@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions') @click.pass_context -def sdnc_delete(ctx, name): +def sdnc_delete(ctx, name, force): '''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) + ctx.obj.sdnc.delete(name, force) except ClientException as inst: print(inst.message) exit(1) @@ -1102,6 +1125,110 @@ def sdnc_show(ctx, name): print(table) +#################### +# Fault Management operations +#################### + +@cli.command(name='ns-alarm-create') +@click.argument('name') +@click.option('--ns', prompt=True, help='NS instance id or name') +@click.option('--vnf', prompt=True, + help='VNF name (VNF member index as declared in the NSD)') +@click.option('--vdu', prompt=True, + help='VDU name (VDU name as declared in the VNFD)') +@click.option('--metric', prompt=True, + help='Name of the metric (e.g. cpu_utilization)') +@click.option('--severity', default='WARNING', + help='severity of the alarm (WARNING, MINOR, MAJOR, CRITICAL, INDETERMINATE)') +@click.option('--threshold_value', prompt=True, + help='threshold value that, when crossed, an alarm is triggered') +@click.option('--threshold_operator', prompt=True, + help='threshold operator describing the comparison (GE, LE, GT, LT, EQ)') +@click.option('--statistic', default='AVERAGE', + help='statistic (AVERAGE, MINIMUM, MAXIMUM, COUNT, SUM)') +@click.pass_context +def ns_alarm_create(ctx, name, ns, vnf, vdu, metric, severity, + threshold_value, threshold_operator, statistic): + '''creates a new alarm for a NS instance''' + ns_instance = ctx.obj.ns.get(ns) + alarm = {} + alarm['alarm_name'] = name + alarm['ns_id'] = ns_instance['_id'] + alarm['correlation_id'] = ns_instance['_id'] + alarm['vnf_member_index'] = vnf + alarm['vdu_name'] = vdu + alarm['metric_name'] = metric + alarm['severity'] = severity + alarm['threshold_value'] = int(threshold_value) + alarm['operation'] = threshold_operator + alarm['statistic'] = statistic + try: + check_client_version(ctx.obj, ctx.command.name) + ctx.obj.ns.create_alarm(alarm) + except ClientException as inst: + print(inst.message) + exit(1) + + +#@cli.command(name='ns-alarm-delete') +#@click.argument('name') +#@click.pass_context +#def ns_alarm_delete(ctx, name): +# '''deletes an alarm +# +# NAME: name of the alarm to be deleted +# ''' +# try: +# check_client_version(ctx.obj, ctx.command.name) +# ctx.obj.ns.delete_alarm(name) +# except ClientException as inst: +# print(inst.message) +# exit(1) + + +#################### +# Performance Management operations +#################### + +@cli.command(name='ns-metric-export') +@click.option('--ns', prompt=True, help='NS instance id or name') +@click.option('--vnf', prompt=True, + help='VNF name (VNF member index as declared in the NSD)') +@click.option('--vdu', prompt=True, + help='VDU name (VDU name as declared in the VNFD)') +@click.option('--metric', prompt=True, + help='name of the metric (e.g. cpu_utilization)') +#@click.option('--period', default='1w', +# help='metric collection period (e.g. 20s, 30m, 2h, 3d, 1w)') +@click.option('--interval', help='periodic interval (seconds) to export metrics continuously') +@click.pass_context +def ns_metric_export(ctx, ns, vnf, vdu, metric, interval): + '''exports a metric to the internal OSM bus, which can be read by other apps + ''' + ns_instance = ctx.obj.ns.get(ns) + metric_data = {} + metric_data['ns_id'] = ns_instance['_id'] + metric_data['correlation_id'] = ns_instance['_id'] + metric_data['vnf_member_index'] = vnf + metric_data['vdu_name'] = vdu + metric_data['metric_name'] = metric + metric_data['collection_unit'] = 'WEEK' + metric_data['collection_period'] = 1 + try: + check_client_version(ctx.obj, ctx.command.name) + if not interval: + print '{}'.format(ctx.obj.ns.export_metric(metric_data)) + else: + i = 1 + while True: + print '{} {}'.format(ctx.obj.ns.export_metric(metric_data),i) + time.sleep(int(interval)) + i+=1 + except ClientException as inst: + print(inst.message) + exit(1) + + #################### # Other operations ####################