X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fscripts%2Fosm.py;h=d1cd3499e9d3f0e41ef744ac4621ca38d236dfea;hb=78e9a1baa7cf3c6da5a1d8c84bb51efad5a09a62;hp=ba8ef5ad746d6568b43df4f278e5f1e3f4fdae98;hpb=be96096ebd71c8d36c8375387f8e671f12eedfb0;p=osm%2Fosmclient.git diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py index ba8ef5a..d1cd349 100755 --- a/osmclient/scripts/osm.py +++ b/osmclient/scripts/osm.py @@ -25,6 +25,7 @@ from prettytable import PrettyTable import yaml import json import time +import pycurl def check_client_version(obj, what, version='sol005'): ''' @@ -45,7 +46,7 @@ def check_client_version(obj, what, version='sol005'): @click.group() @click.option('--hostname', - default=None, + default="127.0.0.1", envvar='OSM_HOSTNAME', help='hostname of server. ' + 'Also can set OSM_HOSTNAME in environment') @@ -89,7 +90,7 @@ def cli(ctx, hostname, so_port, so_project, ro_hostname, ro_port, sol005): kwargs['ro_host']=ro_hostname if ro_port is not None: kwargs['ro_port']=ro_port - + ctx.obj = client.Client(host=hostname, sol005=sol005, **kwargs) @@ -99,10 +100,56 @@ def cli(ctx, hostname, so_port, so_project, ro_hostname, ro_port, sol005): @cli.command(name='ns-list') @click.option('--filter', default=None, - help='restricts the list to the NS instances matching the filter') + help='restricts the list to the NS instances matching the filter.') @click.pass_context def ns_list(ctx, filter): - '''list all NS instances''' + '''list all NS instances + + \b + Options: + --filter filterExpr Restricts the list to the NS instances matching the filter + + \b + filterExpr consists of one or more strings formatted according to "simpleFilterExpr", + concatenated using the "&" character: + + \b + filterExpr := ["&"]* + simpleFilterExpr := ["."]*["."]"="[","]* + op := "eq" | "neq" | "gt" | "lt" | "gte" | "lte" | "cont" | "ncont" + attrName := string + value := scalar value + + \b + where: + * zero or more occurrences + ? zero or one occurrence + [] grouping of expressions to be used with ? and * + "" quotation marks for marking string constants + <> name separator + + \b + "AttrName" is the name of one attribute in the data type that defines the representation + of the resource. The dot (".") character in "simpleFilterExpr" allows concatenation of + entries to filter by attributes deeper in the hierarchy of a structured document. + "Op" stands for the comparison operator. If the expression has concatenated + entries, it means that the operator "op" is applied to the attribute addressed by the last + entry included in the concatenation. All simple filter expressions are combined + by the "AND" logical operator. In a concatenation of entries in a , + the rightmost "attrName" entry in a "simpleFilterExpr" is called "leaf attribute". The + concatenation of all "attrName" entries except the leaf attribute is called the "attribute + prefix". If an attribute referenced in an expression is an array, an object that contains a + corresponding array shall be considered to match the expression if any of the elements in the + array matches all expressions that have the same attribute prefix. + + \b + Filter examples: + --filter admin-status=ENABLED + --filter nsd-ref= + --filter nsd.vendor= + --filter nsd.vendor=&nsd-ref= + --filter nsd.constituent-vnfd.vnfd-id-ref= + ''' if filter: check_client_version(ctx.obj, '--filter') resp = ctx.obj.ns.list(filter) @@ -218,13 +265,64 @@ 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.option('--filter', default=None, + help='restricts the list to the VNF instances matching the filter.') @click.pass_context -def vnf_list(ctx, ns): - ''' list all VNF instances''' +def vnf_list(ctx, ns, filter): + '''list all VNF instances + + \b + Options: + --ns TEXT NS instance id or name to restrict the VNF list + --filter filterExpr Restricts the list to the VNF instances matching the filter + + \b + filterExpr consists of one or more strings formatted according to "simpleFilterExpr", + concatenated using the "&" character: + + \b + filterExpr := ["&"]* + simpleFilterExpr := ["."]*["."]"="[","]* + op := "eq" | "neq" | "gt" | "lt" | "gte" | "lte" | "cont" | "ncont" + attrName := string + value := scalar value + + \b + where: + * zero or more occurrences + ? zero or one occurrence + [] grouping of expressions to be used with ? and * + "" quotation marks for marking string constants + <> name separator + + \b + "AttrName" is the name of one attribute in the data type that defines the representation + of the resource. The dot (".") character in "simpleFilterExpr" allows concatenation of + entries to filter by attributes deeper in the hierarchy of a structured document. + "Op" stands for the comparison operator. If the expression has concatenated + entries, it means that the operator "op" is applied to the attribute addressed by the last + entry included in the concatenation. All simple filter expressions are combined + by the "AND" logical operator. In a concatenation of entries in a , + the rightmost "attrName" entry in a "simpleFilterExpr" is called "leaf attribute". The + concatenation of all "attrName" entries except the leaf attribute is called the "attribute + prefix". If an attribute referenced in an expression is an array, an object that contains a + corresponding array shall be considered to match the expression if any of the elements in the + array matches all expressions that have the same attribute prefix. + + \b + Filter examples: + --filter vim-account-id= + --filter vnfd-ref= + --filter vdur.ip-address= + --filter vnfd-ref=,vdur.ip-address= + ''' try: - if ns: - check_client_version(ctx.obj, '--ns') - resp = ctx.obj.vnf.list(ns) + if ns or filter: + if ns: + check_client_version(ctx.obj, '--ns') + if filter: + check_client_version(ctx.obj, '--filter') + resp = ctx.obj.vnf.list(ns, filter) else: resp = ctx.obj.vnf.list() except ClientException as inst: @@ -607,11 +705,13 @@ def vnfd_create2(ctx, filename, overwrite): help='administration status') @click.option('--ssh_keys', default=None, - help='comma separated list of keys to inject to vnfs') + help='comma separated list of public key files to inject to vnfs') @click.option('--config', default=None, - help='ns specific yaml configuration:\nvnf: [member-vnf-index: TEXT, vim_account: TEXT]\n' - 'vld: [name: TEXT, vim-network-name: TEXT or DICT with vim_account, vim_net entries]') + help='ns specific yaml configuration') +@click.option('--config_file', + default=None, + help='ns specific yaml configuration file') @click.pass_context def ns_create(ctx, nsd_name, @@ -619,11 +719,16 @@ def ns_create(ctx, vim_account, admin_status, ssh_keys, - config): + config, + config_file): '''creates a new NS instance''' try: - # if config: - # check_client_version(ctx.obj, '--config', 'v1') + if config_file: + check_client_version(ctx.obj, '--config_file') + if config: + raise ClientException('"--config" option is incompatible with "--config_file" option') + with open(config_file, 'r') as cf: + config=cf.read() ctx.obj.ns.create( nsd_name, ns_name, @@ -807,7 +912,7 @@ def ns_delete(ctx, name, force): #################### # VIM operations #################### - + @cli.command(name='vim-create') @click.option('--name', prompt=True, @@ -1463,4 +1568,11 @@ def ns_action(ctx, if __name__ == '__main__': - cli() + try: + cli() + except pycurl.error as e: + print(e) + print('Maybe "--hostname" option or OSM_HOSTNAME' + + 'environment variable needs to be specified') + exit(1) +