import yaml
import json
import time
+import pycurl
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')
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)
@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>["&"<simpleFilterExpr>]*
+ simpleFilterExpr := <attrName>["."<attrName>]*["."<op>]"="<value>[","<value>]*
+ 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
+ <attrName> entries to filter by attributes deeper in the hierarchy of a structured document.
+ "Op" stands for the comparison operator. If the expression has concatenated <attrName>
+ entries, it means that the operator "op" is applied to the attribute addressed by the last
+ <attrName> entry included in the concatenation. All simple filter expressions are combined
+ by the "AND" logical operator. In a concatenation of <attrName> entries in a <simpleFilterExpr>,
+ 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=<NSD_NAME>
+ --filter nsd.vendor=<VENDOR>
+ --filter nsd.vendor=<VENDOR>&nsd-ref=<NSD_NAME>
+ --filter nsd.constituent-vnfd.vnfd-id-ref=<VNFD_NAME>
+ '''
if filter:
check_client_version(ctx.obj, '--filter')
resp = ctx.obj.ns.list(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>["&"<simpleFilterExpr>]*
+ simpleFilterExpr := <attrName>["."<attrName>]*["."<op>]"="<value>[","<value>]*
+ 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
+ <attrName> entries to filter by attributes deeper in the hierarchy of a structured document.
+ "Op" stands for the comparison operator. If the expression has concatenated <attrName>
+ entries, it means that the operator "op" is applied to the attribute addressed by the last
+ <attrName> entry included in the concatenation. All simple filter expressions are combined
+ by the "AND" logical operator. In a concatenation of <attrName> entries in a <simpleFilterExpr>,
+ 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=<VIM_ACCOUNT_ID>
+ --filter vnfd-ref=<VNFD_NAME>
+ --filter vdur.ip-address=<IP_ADDRESS>
+ --filter vnfd-ref=<VNFD_NAME>,vdur.ip-address=<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:
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,
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,
####################
# VIM operations
####################
-
+
@cli.command(name='vim-create')
@click.option('--name',
prompt=True,
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)
+