1 # Copyright 2017 Sandvine
5 # Licensed under the Apache License, Version 2.0 (the "License"); you may
6 # not use this file except in compliance with the License. You may obtain
7 # a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 # License for the specific language governing permissions and limitations
21 from osmclient
.client
import client
22 from osmclient
.common
.exceptions
import ClientException
23 from prettytable
import PrettyTable
29 @click.option('--hostname',
31 envvar
='OSM_HOSTNAME',
32 help='hostname of server. ' +
33 'Also can set OSM_HOSTNAME in environment')
34 @click.option('--so-port',
37 help='hostname of server. ' +
38 'Also can set OSM_SO_PORT in environment')
39 @click.option('--so-project',
41 envvar
='OSM_SO_PROJECT',
42 help='Project Name in SO. ' +
43 'Also can set OSM_SO_PROJECT in environment')
44 @click.option('--ro-hostname',
46 envvar
='OSM_RO_HOSTNAME',
47 help='hostname of RO server. ' +
48 'Also can set OSM_RO_HOSTNAME in environment')
49 @click.option('--ro-port',
52 help='hostname of RO server. ' +
53 'Also can set OSM_RO_PORT in environment')
55 def cli(ctx
, hostname
, so_port
, so_project
, ro_hostname
, ro_port
):
58 "either hostname option or OSM_HOSTNAME " +
59 "environment variable needs to be specified")
61 ctx
.obj
= client
.Client(
64 so_project
=so_project
,
69 @cli.command(name
='ns-list')
72 resp
= ctx
.obj
.ns
.list()
79 nsopdata
= ctx
.obj
.ns
.get_opdata(ns
['id'])
80 nsr
= nsopdata
['nsr:nsr']
83 nsr
['ns-instance-config-ref'],
84 nsr
['operational-status'],
85 nsr
['config-status']])
90 @cli.command(name
='nsd-list')
93 resp
= ctx
.obj
.nsd
.list()
94 table
= PrettyTable(['nsd name', 'id'])
96 table
.add_row([ns
['name'], ns
['id']])
101 @cli.command(name
='vnfd-list')
104 resp
= ctx
.obj
.vnfd
.list()
105 table
= PrettyTable(['vnfd name', 'id'])
107 table
.add_row([vnfd
['name'], vnfd
['id']])
112 @cli.command(name
='vnf-list')
115 resp
= ctx
.obj
.vnf
.list()
119 'operational status',
122 if 'mgmt-interface' not in vnfr
:
123 vnfr
['mgmt-interface'] = {}
124 vnfr
['mgmt-interface']['ip-address'] = None
128 vnfr
['operational-status'],
129 vnfr
['config-status']])
134 @cli.command(name
='vnf-show')
135 @click.argument('vnf_name')
136 @click.option('--filter', default
=None)
138 def vnf_show(ctx
, vnf_name
, filter):
140 resp
= ctx
.obj
.vnf
.get(vnf_name
)
141 except ClientException
as inst
:
145 table
= PrettyTable(['field', 'value'])
146 for k
, v
in resp
.items():
147 if filter is None or filter in k
:
148 table
.add_row([k
, json
.dumps(v
, indent
=2)])
153 @cli.command(name
='vnf-monitoring-show')
154 @click.argument('vnf_name')
156 def vnf_monitoring_show(ctx
, vnf_name
):
158 resp
= ctx
.obj
.vnf
.get_monitoring(vnf_name
)
159 except ClientException
as inst
:
163 table
= PrettyTable(['vnf name', 'monitoring name', 'value', 'units'])
169 monitor
['value-integer'],
175 @cli.command(name
='ns-monitoring-show')
176 @click.argument('ns_name')
178 def ns_monitoring_show(ctx
, ns_name
):
180 resp
= ctx
.obj
.ns
.get_monitoring(ns_name
)
181 except ClientException
as inst
:
185 table
= PrettyTable(['vnf name', 'monitoring name', 'value', 'units'])
186 for key
, val
in resp
.items():
191 monitor
['value-integer'],
197 @cli.command(name
='ns-create')
198 @click.option('--ns_name',
200 @click.option('--nsd_name',
202 @click.option('--vim_account',
204 @click.option('--admin_status',
206 help='administration status')
207 @click.option('--ssh_keys',
209 help='comma separated list of keys to inject to vnfs')
210 @click.option('--vim_network_prefix',
212 help='vim network name prefix')
225 vim_network_prefix
=vim_network_prefix
,
228 except ClientException
as inst
:
233 @cli.command(name
='ns-delete')
234 @click.argument('ns_name')
236 def ns_delete(ctx
, ns_name
):
238 ctx
.obj
.ns
.delete(ns_name
)
239 except ClientException
as inst
:
244 @cli.command(name
='upload-package')
245 @click.argument('filename')
247 def upload_package(ctx
, filename
):
249 ctx
.obj
.package
.upload(filename
)
250 ctx
.obj
.package
.wait_for_upload(filename
)
251 except ClientException
as inst
:
256 @cli.command(name
='ns-show')
257 @click.argument('ns_name')
258 @click.option('--filter', default
=None)
260 def ns_show(ctx
, ns_name
, filter):
262 ns
= ctx
.obj
.ns
.get(ns_name
)
263 except ClientException
as inst
:
267 table
= PrettyTable(['field', 'value'])
269 for k
, v
in ns
.items():
270 if filter is None or filter in k
:
271 table
.add_row([k
, json
.dumps(v
, indent
=2)])
273 nsopdata
= ctx
.obj
.ns
.get_opdata(ns
['id'])
274 nsr_optdata
= nsopdata
['nsr:nsr']
275 for k
, v
in nsr_optdata
.items():
276 if filter is None or filter in k
:
277 table
.add_row([k
, json
.dumps(v
, indent
=2)])
282 @cli.command(name
='ns-scaling-show')
283 @click.argument('ns_name')
285 def show_ns_scaling(ctx
, ns_name
):
286 resp
= ctx
.obj
.ns
.list()
291 'operational status',
296 if ns_name
== ns
['name']:
297 nsopdata
= ctx
.obj
.ns
.get_opdata(ns
['id'])
298 scaling_records
= nsopdata
['nsr:nsr']['scaling-group-record']
299 for record
in scaling_records
:
300 if 'instance' in record
:
301 instances
= record
['instance']
302 for inst
in instances
:
304 [record
['scaling-group-name-ref'],
307 time
.strftime('%Y-%m-%d %H:%M:%S',
309 inst
['create-time'])),
315 @cli.command(name
='ns-scale')
316 @click.argument('ns_name')
317 @click.option('--ns_scale_group', prompt
=True)
318 @click.option('--index', prompt
=True)
320 def ns_scale(ctx
, ns_name
, ns_scale_group
, index
):
321 ctx
.obj
.ns
.scale(ns_name
, ns_scale_group
, index
)
324 @cli.command(name
='nsd-delete')
325 @click.argument('nsd_name')
327 def nsd_delete(ctx
, nsd_name
):
329 ctx
.obj
.nsd
.delete(nsd_name
)
330 except ClientException
as inst
:
335 @cli.command(name
='vnfd-delete')
336 @click.argument('vnfd_name')
338 def vnfd_delete(ctx
, vnfd_name
):
340 ctx
.obj
.vnfd
.delete(vnfd_name
)
341 except ClientException
as inst
:
346 @cli.command(name
='config-agent-list')
348 def config_agent_list(ctx
):
349 table
= PrettyTable(['name', 'account-type', 'details'])
350 for account
in ctx
.obj
.vca
.list():
353 account
['account-type'],
359 @cli.command(name
='config-agent-delete')
360 @click.argument('name')
362 def config_agent_delete(ctx
, name
):
364 ctx
.obj
.vca
.delete(name
)
365 except ClientException
as inst
:
370 @cli.command(name
='config-agent-add')
371 @click.option('--name',
373 @click.option('--account_type',
375 @click.option('--server',
377 @click.option('--user',
379 @click.option('--secret',
382 confirmation_prompt
=True)
384 def config_agent_add(ctx
, name
, account_type
, server
, user
, secret
):
386 ctx
.obj
.vca
.create(name
, account_type
, server
, user
, secret
)
387 except ClientException
as inst
:
392 @cli.command(name
='vim-create')
393 @click.option('--name',
395 help='Name to create datacenter')
396 @click.option('--user',
399 @click.option('--password',
402 confirmation_prompt
=True,
404 @click.option('--auth_url',
406 help='VIM connector url')
407 @click.option('--tenant',
410 @click.option('--config',
412 help='VIM specific config parameters')
413 @click.option('--account_type',
416 @click.option('--description',
417 default
='no description')
429 vim
['vim-username'] = user
430 vim
['vim-password'] = password
431 vim
['vim-url'] = auth_url
432 vim
['vim-tenant-name'] = tenant
433 vim
['config'] = config
434 vim
['vim-type'] = account_type
435 vim
['description'] = description
437 ctx
.obj
.vim
.create(name
, vim
)
438 except ClientException
as inst
:
443 @cli.command(name
='vim-delete')
444 @click.argument('name')
446 def vim_delete(ctx
, name
):
448 ctx
.obj
.vim
.delete(name
)
449 except ClientException
as inst
:
454 @cli.command(name
='vim-list')
455 @click.option('--ro_update/--no_ro_update',
457 help='update list from RO')
459 def vim_list(ctx
, ro_update
):
460 resp
= ctx
.obj
.vim
.list(ro_update
)
461 table
= PrettyTable(['vim name', 'uuid'])
463 table
.add_row([vim
['name'], vim
['uuid']])
468 @cli.command(name
='vim-show')
469 @click.argument('name')
471 def vim_show(ctx
, name
):
473 resp
= ctx
.obj
.vim
.get(name
)
474 except ClientException
as inst
:
478 table
= PrettyTable(['key', 'attribute'])
479 for k
, v
in resp
.items():
480 table
.add_row([k
, json
.dumps(v
, indent
=2)])
485 @cli.command(name
='ro-dump')
488 resp
= ctx
.obj
.vim
.get_resource_orchestrator()
489 table
= PrettyTable(['key', 'attribute'])
490 for k
, v
in resp
.items():
491 table
.add_row([k
, json
.dumps(v
, indent
=2)])
496 @cli.command(name
='vcs-list')
499 resp
= ctx
.obj
.utils
.get_vcs_info()
500 table
= PrettyTable(['component name', 'state'])
501 for component
in resp
:
502 table
.add_row([component
['component_name'], component
['state']])
507 if __name__
== '__main__':