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
28 @click.option('--hostname',default
=None,envvar
='OSM_HOSTNAME',help='hostname of server. Also can set OSM_HOSTNAME in environment')
30 def cli(ctx
,hostname
):
32 print("either hostname option or OSM_HOSTNAME environment variable needs to be specified")
34 ctx
.obj
=client
.Client(host
=hostname
)
36 @cli.command(name
='ns-list')
39 resp
=ctx
.obj
.ns
.list()
40 table
=PrettyTable(['ns instance name','id','operational status','config status'])
42 nsopdata
=ctx
.obj
.ns
.get_opdata(ns
['id'])
43 nsr
=nsopdata
['nsr:nsr']
44 table
.add_row([nsr
['name-ref'],nsr
['ns-instance-config-ref'],nsr
['operational-status'],nsr
['config-status']])
48 @cli.command(name
='nsd-list')
51 resp
=ctx
.obj
.nsd
.list()
52 table
=PrettyTable(['nsd name','id'])
54 table
.add_row([ns
['name'],ns
['id']])
58 @cli.command(name
='vnfd-list')
61 resp
= ctx
.obj
.vnfd
.list()
62 table
=PrettyTable(['vnfd name','id'])
64 table
.add_row([vnfd
['name'],vnfd
['id']])
68 @cli.command(name
='vnf-list')
71 resp
=ctx
.obj
.vnf
.list()
72 table
=PrettyTable(['vnf name','id','operational status','config status'])
74 if not 'mgmt-interface' in vnfr
:
75 vnfr
['mgmt-interface'] = {}
76 vnfr
['mgmt-interface']['ip-address'] = None
77 table
.add_row([vnfr
['name'],vnfr
['id'],vnfr
['operational-status'],vnfr
['config-status']])
81 @cli.command(name
='vnf-show')
82 @click.argument('vnf_name')
83 @click.option('--filter',default
=None)
85 def vnf_show(ctx
,vnf_name
,filter):
87 resp
=ctx
.obj
.vnf
.get(vnf_name
)
88 except ClientException
as inst
:
92 table
=PrettyTable(['field','value'])
93 for k
,v
in resp
.items():
94 if filter is None or filter in k
:
95 table
.add_row([k
,json
.dumps(v
,indent
=2)])
99 @cli.command(name
='vnf-monitoring-show')
100 @click.argument('vnf_name')
102 def vnf_monitoring_show(ctx
,vnf_name
):
104 resp
=ctx
.obj
.vnf
.get_monitoring(vnf_name
)
105 except ClientException
as inst
:
109 table
=PrettyTable(['vnf name','monitoring name','value','units'])
112 table
.add_row([vnf_name
,monitor
['name'],monitor
['value-integer'],monitor
['units']])
116 @cli.command(name
='ns-monitoring-show')
117 @click.argument('ns_name')
119 def ns_monitoring_show(ctx
,ns_name
):
121 resp
=ctx
.obj
.ns
.get_monitoring(ns_name
)
122 except ClientException
as inst
:
126 table
=PrettyTable(['vnf name','monitoring name','value','units'])
127 for key
,val
in resp
.items():
129 table
.add_row([key
,monitor
['name'],monitor
['value-integer'],monitor
['units']])
133 @cli.command(name
='ns-create')
134 @click.option('--ns_name',prompt
=True)
135 @click.option('--nsd_name',prompt
=True)
136 @click.option('--vim_account',prompt
=True)
137 @click.option('--admin_status',default
='ENABLED',help='administration status')
138 @click.option('--ssh_keys',default
=None,help='comma separated list of keys to inject to vnfs')
139 @click.option('--vim_network_prefix',default
=None,help='vim network name prefix')
141 def ns_create(ctx
,nsd_name
,ns_name
,vim_account
,admin_status
,ssh_keys
,vim_network_prefix
):
143 ctx
.obj
.ns
.create(nsd_name
,ns_name
,vim_network_prefix
=vim_network_prefix
,ssh_keys
=ssh_keys
,account
=vim_account
)
144 except ClientException
as inst
:
148 @cli.command(name
='ns-delete')
149 @click.argument('ns_name')
151 def ns_delete(ctx
,ns_name
):
153 ctx
.obj
.ns
.delete(ns_name
)
154 except ClientException
as inst
:
158 @cli.command(name
='upload-package')
159 @click.argument('filename')
161 def upload_package(ctx
,filename
):
163 ctx
.obj
.package
.upload(filename
)
164 ctx
.obj
.package
.wait_for_upload(filename
)
165 except ClientException
as inst
:
169 @cli.command(name
='ns-show')
170 @click.argument('ns_name')
171 @click.option('--filter',default
=None)
173 def ns_show(ctx
,ns_name
,filter):
175 ns
= ctx
.obj
.ns
.get(ns_name
)
176 except ClientException
as inst
:
180 table
=PrettyTable(['field','value'])
182 for k
,v
in ns
.items():
183 if filter is None or filter in k
:
184 table
.add_row([k
,json
.dumps(v
,indent
=2)])
186 nsopdata
=ctx
.obj
.ns
.get_opdata(ns
['id'])
187 nsr_optdata
=nsopdata
['nsr:nsr']
188 for k
,v
in nsr_optdata
.items():
189 if filter is None or filter in k
:
190 table
.add_row([k
,json
.dumps(v
,indent
=2)])
194 @cli.command(name
='ns-scaling-show')
195 @click.argument('ns_name')
197 def show_ns_scaling(ctx
,ns_name
):
198 resp
= ctx
.obj
.ns
.list()
200 table
=PrettyTable(['instance-id','operational status','create-time','vnfr ids'])
203 for ns
in resp
['nsr']:
204 if ns_name
== ns
['name']:
205 nsopdata
=ctx
.obj
.ns
.get_opdata(ns
['id'])
206 scaling_records
=nsopdata
['nsr:nsr']['scaling-group-record']
207 for record
in scaling_records
:
208 if 'instance' in record
:
209 instances
=record
['instance']
210 for inst
in instances
:
211 table
.add_row([inst
['instance-id'],inst
['op-status'],time
.strftime('%Y-%m-%d %H:%M:%S',time
.localtime(inst
['create-time'])),inst
['vnfrs']])
215 @cli.command(name
='nsd-delete')
216 @click.argument('nsd_name')
218 def nsd_delete(ctx
,nsd_name
):
220 ctx
.obj
.nsd
.delete(nsd_name
)
221 except ClientException
as inst
:
225 @cli.command(name
='vnfd-delete')
226 @click.argument('vnfd_name')
228 def vnfd_delete(ctx
,vnfd_name
):
230 ctx
.obj
.vnfd
.delete(vnfd_name
)
231 except ClientException
as inst
:
235 @cli.command(name
='config-agent-list')
237 def config_agent_list(ctx
):
238 table
=PrettyTable(['name','account-type','details'])
239 for account
in ctx
.obj
.vca
.list():
240 table
.add_row([account
['name'],account
['account-type'],account
['juju']])
244 @cli.command(name
='config-agent-delete')
245 @click.argument('name')
247 def config_agent_delete(ctx
,name
):
249 ctx
.obj
.vca
.delete(name
)
250 except ClientException
as inst
:
254 @cli.command(name
='config-agent-add')
255 @click.option('--name',prompt
=True)
256 @click.option('--account_type',prompt
=True)
257 @click.option('--server',prompt
=True)
258 @click.option('--user',prompt
=True)
259 @click.option('--secret',prompt
=True,hide_input
=True,confirmation_prompt
=True)
261 def config_agent_add(ctx
,name
,account_type
,server
,user
,secret
):
263 ctx
.obj
.vca
.create(name
,account_type
,server
,user
,secret
)
264 except ClientException
as inst
:
268 @cli.command(name
='vim-create')
269 @click.option('--name',prompt
=True)
270 @click.option('--user',prompt
=True)
271 @click.option('--password',prompt
=True,hide_input
=True,confirmation_prompt
=True)
272 @click.option('--auth_url',prompt
=True)
273 @click.option('--tenant',prompt
=True)
274 @click.option('--floating_ip_pool',default
=None)
275 @click.option('--keypair',default
=None)
276 @click.option('--account_type',default
='openstack')
277 @click.option('--description',default
='no description')
279 def vim_create(ctx
,name
,user
,password
,auth_url
,tenant
,floating_ip_pool
,keypair
,account_type
,description
):
281 vim
['os-username']=user
282 vim
['os-password']=password
283 vim
['os-url']=auth_url
284 vim
['os-project-name']=tenant
285 vim
['floating_ip_pool']=floating_ip_pool
286 vim
['keypair']=keypair
287 vim
['vim-type']='openstack'
288 vim
['description']=description
290 ctx
.obj
.vim
.create(name
,vim
)
291 except ClientException
as inst
:
295 @cli.command(name
='vim-delete')
296 @click.argument('name')
298 def vim_delete(ctx
,name
):
300 ctx
.obj
.vim
.delete(name
)
301 except ClientException
as inst
:
305 @cli.command(name
='vim-list')
308 resp
=ctx
.obj
.vim
.list()
309 table
=PrettyTable(['vim name','uuid'])
311 table
.add_row([vim
['name'],vim
['uuid']])
315 @cli.command(name
='vim-show')
316 @click.argument('name')
318 def vim_show(ctx
,name
):
320 resp
=ctx
.obj
.vim
.get(name
)
321 except ClientException
as inst
:
325 table
=PrettyTable(['key','attribute'])
326 for k
,v
in resp
.items():
327 table
.add_row([k
,json
.dumps(v
,indent
=2)])
331 @cli.command(name
='ro-dump')
334 resp
=ctx
.obj
.vim
.get_resource_orchestrator()
335 table
=PrettyTable(['key','attribute'])
336 for k
,v
in resp
.items():
337 table
.add_row([k
,json
.dumps(v
,indent
=2)])
341 @cli.command(name
='vcs-list')
344 resp
=ctx
.obj
.utils
.get_vcs_info()
345 table
=PrettyTable(['component name','state'])
346 for component
in resp
:
347 table
.add_row([component
['component_name'],component
['state']])
351 if __name__
== '__main__':