X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=openmano;h=d3b4feb6a0503984e9d93eaa9e85c65a5ee44f96;hb=ab24d8b8fee8efe8ed5e2d57ba5f132cc58f2120;hp=26ef9b9317d2c214ad718e5f819f9d23e6bae3ce;hpb=44e24da51d3a1c371cb2bb7c06beec4ba47c949e;p=osm%2FRO.git diff --git a/openmano b/openmano index 26ef9b93..d3b4feb6 100755 --- a/openmano +++ b/openmano @@ -3,7 +3,7 @@ # PYTHON_ARGCOMPLETE_OK ## -# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U. +# Copyright 2015 Telefonica Investigacion y Desarrollo, S.A.U. # This file is part of openmano # All Rights Reserved. # @@ -28,8 +28,8 @@ openmano client used to interact with openmano-server (openmanod) """ __author__ = "Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ = "$09-oct-2014 09:09:48$" -__version__ = "0.4.20-r530" -version_date = "Sep 2017" +__version__ = "0.4.23-r533" +version_date = "May 2018" from argcomplete.completers import FilesCompleter import os @@ -133,24 +133,24 @@ def _print_verbose(mano_response, verbose_level=0): uuid = "" if not name: name = "" - myoutput = "%s %s" %(uuid.ljust(38),name.ljust(20)) + myoutput = "{:38} {:20}".format(uuid, name) if content.get("status"): - myoutput += " " + content['status'].ljust(20) + myoutput += " {:20}".format(content['status']) elif "enabled" in content and not content["enabled"]: myoutput += " enabled=False".ljust(20) if verbose_level >=1: if content.get('created_at'): - myoutput += " " + content['created_at'].ljust(20) + myoutput += " {:20}".format(content['created_at']) if content.get('sdn_attached_ports'): #myoutput += " " + str(content['sdn_attached_ports']).ljust(20) myoutput += "\nsdn_attached_ports:\n" + yaml.safe_dump(content['sdn_attached_ports'], indent=4, default_flow_style=False) if verbose_level >=2: new_line='\n' if content.get('type'): - myoutput += new_line + " Type: " + content['type'].ljust(29) + myoutput += new_line + " Type: {:29}".format(content['type']) new_line='' if content.get('description'): - myoutput += new_line + " Description: " + content['description'].ljust(20) + myoutput += new_line + " Description: {:20}".format(content['description']) print myoutput else: print content['error']['description'] @@ -317,6 +317,11 @@ def vnf_create(args): vdu_list[index]['image'] = image_name_ if "image-checksum" in vdu_list[index]: del vdu_list[index]["image-checksum"] + if vdu_list[index].get("alternative-images"): + for a_image in vdu_list[index]["alternative-images"]: + a_image['image'] = image_name_ + if "image-checksum" in a_image: + del a_image["image-checksum"] else: # image name in volumes vdu_list[index]["volumes"][0]["image"] = image_name_ if "image-checksum" in vdu_list[index]["volumes"][0]: @@ -332,6 +337,9 @@ def vnf_create(args): if api_version == "/v3": if vdu_list[index].get("image"): vdu_list[index]['image-checksum'] = image_checksum_ + if vdu_list[index].get("alternative-images"): + for a_image in vdu_list[index]["alternative-images"]: + a_image['image-checksum'] = image_checksum_ else: # image name in volumes vdu_list[index]["volumes"][0]["image-checksum"] = image_checksum_ else: @@ -783,11 +791,11 @@ def instance_create(args): return result if mano_response.status_code == 200: - myoutput = "%s %s" %(content['uuid'].ljust(38),content['name'].ljust(20)) + myoutput = "{:38} {:20}".format(content['uuid'], content['name']) if args.verbose >=1: - myoutput = "%s %s" %(myoutput, content['created_at'].ljust(20)) + myoutput = "{} {:20}".format(myoutput, content['created_at']) if args.verbose >=2: - myoutput = "%s %s %s" %(myoutput, content['description'].ljust(30)) + myoutput = "{} {:30}".format(myoutput, content['description']) print myoutput else: print content['error']['description'] @@ -821,9 +829,9 @@ def instance_scenario_list(args): print "No scenario instances were found." return result for instance in content['instances']: - myoutput = "%s %s" %(instance['uuid'].ljust(38),instance['name'].ljust(20)) + myoutput = "{:38} {:20}".format(instance['uuid'], instance['name']) if args.verbose >=1: - myoutput = "%s %s" %(myoutput, instance['created_at'].ljust(20)) + myoutput = "{} {:20}".format(myoutput, instance['created_at']) print myoutput if args.verbose >=2: print "Description: %s" %instance['description'] @@ -832,31 +840,32 @@ def instance_scenario_list(args): print yaml.safe_dump(content, indent=4, default_flow_style=False) return result instance = content - print "%s %s %s" %(instance['uuid'].ljust(38),instance['name'].ljust(20),instance['created_at'].ljust(20)) - print "Description: %s" %instance['description'] - print "Template scenario id: %s" %instance['scenario_id'] - print "Template scenario name: %s" %instance['scenario_name'] - print "---------------------------------------" - print "VNF instances: %d" %len(instance['vnfs']) + print ("{:38} {:20} {:20}".format(instance['uuid'],instance['name'],instance['created_at'])) + print ("Description: %s" %instance['description']) + print ("Template scenario id: {}".format(instance['scenario_id'])) + print ("Template scenario name: {}".format(instance['scenario_name'])) + print ("---------------------------------------") + print ("VNF instances: {}".format(len(instance['vnfs']))) for vnf in instance['vnfs']: #print " %s %s Template vnf name: %s Template vnf id: %s" %(vnf['uuid'].ljust(38), vnf['name'].ljust(20), vnf['vnf_name'].ljust(20), vnf['vnf_id'].ljust(38)) - print " %s %s Template vnf id: %s" %(vnf['uuid'].ljust(38), vnf['vnf_name'].ljust(20), vnf['vnf_id'].ljust(38)) + print (" {:38} {:20} Template vnf id: {:38}".format(vnf['uuid'], vnf['vnf_name'], vnf['vnf_id'])) if len(instance['nets'])>0: print "---------------------------------------" print "Internal nets:" for net in instance['nets']: if net['created']: - print " %s %s VIM ID: %s" %(net['uuid'].ljust(38), net['status'].ljust(12), net['vim_net_id']) + print (" {:38} {:12} VIM ID: {}".format(net['uuid'], net['status'], net['vim_net_id'])) print "---------------------------------------" print "External nets:" for net in instance['nets']: if not net['created']: - print " %s %s VIM ID: %s" %(net['uuid'].ljust(38), net['status'].ljust(12), net['vim_net_id']) - print "---------------------------------------" - print "VM instances:" + print (" {:38} {:12} VIM ID: {}".format(net['uuid'], net['status'], net['vim_net_id'])) + print ("---------------------------------------") + print ("VM instances:") for vnf in instance['vnfs']: for vm in vnf['vms']: - print " %s %s %s %s VIM ID: %s" %(vm['uuid'].ljust(38), vnf['vnf_name'].ljust(20), vm['name'].ljust(20), vm['status'].ljust(12), vm['vim_vm_id']) + print (" {:38} {:20} {:20} {:12} VIM ID: {}".format(vm['uuid'], vnf['vnf_name'], vm['name'], + vm['status'], vm['vim_vm_id'])) else: print content['error']['description'] if args.verbose: @@ -890,12 +899,34 @@ def instance_scenario_delete(args): print content['error']['description'] return result +def get_action(args): + if not args.all: + tenant = _get_tenant() + else: + tenant = "any" + if not args.instance: + instance_id = "any" + else: + instance_id =args.instance + action_id = "" + if args.id: + action_id = "/" + args.id + URLrequest = "http://{}:{}/openmano/{}/instances/{}/action{}".format(mano_host, mano_port, tenant, instance_id, + action_id) + mano_response = requests.get(URLrequest) + logger.debug("openmano response: %s", mano_response.text ) + if args.verbose == None: + args.verbose = 0 + if args.id != None: + args.verbose += 1 + return _print_verbose(mano_response, args.verbose) + def instance_scenario_action(args): #print "instance-scenario-action", args tenant = _get_tenant() toact = _get_item_uuid("instances", args.name, tenant=tenant) action={} - action[ args.action ] = args.param + action[ args.action ] = yaml.safe_load(args.param) if args.vnf: action["vnfs"] = args.vnf if args.vm: @@ -909,13 +940,16 @@ def instance_scenario_action(args): logger.debug("openmano response: %s", mano_response.text ) result = 0 if mano_response.status_code==200 else mano_response.status_code content = mano_response.json() - #print json.dumps(content, indent=4) + # print json.dumps(content, indent=4) if mano_response.status_code == 200: if args.verbose: print yaml.safe_dump(content, indent=4, default_flow_style=False) return result - for uuid,c in content.iteritems(): - print "%s %s %s" %(uuid.ljust(38), c['name'].ljust(20),c['description'].ljust(20)) + if "instance_action_id" in content: + print("instance_action_id={}".format(content["instance_action_id"])) + else: + for uuid,c in content.iteritems(): + print ("{:38} {:20} {:20}".format(uuid, c.get('name'), c.get('description'))) else: print content['error']['description'] return result @@ -994,8 +1028,9 @@ def datacenter_attach(args): datacenter_dict['vim_password'] = args.password if args.config!=None: datacenter_dict["config"] = _load_file_or_yaml(args.config) + payload_req = json.dumps( {"datacenter": datacenter_dict }) - + #print payload_req URLrequest = "http://%s:%s/openmano/%s/datacenters/%s" %(mano_host, mano_port, tenant, datacenter) @@ -1745,13 +1780,19 @@ if __name__=="__main__": instance_scenario_action_parser = subparsers.add_parser('instance-scenario-action', parents=[parent_parser], help="invoke an action over part or the whole scenario instance") instance_scenario_action_parser.add_argument("name", action="store", help="name or uuid of the scenario instance") instance_scenario_action_parser.add_argument("action", action="store", type=str, \ - choices=["start","pause","resume","shutoff","shutdown","forceOff","rebuild","reboot", "console"],\ + choices=["start","pause","resume","shutoff","shutdown","forceOff","rebuild","reboot", "console", "add_public_key","vdu-scaling"],\ help="action to send") - instance_scenario_action_parser.add_argument("param", nargs='?', help="addional param of the action. e.g. console type (novnc, ...), reboot type (TODO)") + instance_scenario_action_parser.add_argument("param", nargs='?', help="addional param of the action. e.g. console: novnc; reboot: type; vdu-scaling: '[{vdu-id: xxx, type: create|delete, count: 1}]'") instance_scenario_action_parser.add_argument("--vnf", action="append", help="VNF to act on (can use several entries)") instance_scenario_action_parser.add_argument("--vm", action="append", help="VM to act on (can use several entries)") instance_scenario_action_parser.set_defaults(func=instance_scenario_action) + action_parser = subparsers.add_parser('action-list', parents=[parent_parser], help="get action over an instance status") + action_parser.add_argument("id", nargs='?', action="store", help="action id") + action_parser.add_argument("--instance", action="store", help="fitler by this instance_id") + action_parser.add_argument("--all", action="store", help="Not filter by tenant") + action_parser.set_defaults(func=get_action) + #instance_scenario_status_parser = subparsers.add_parser('instance-scenario-status', help="show the status of a scenario instance") #instance_scenario_status_parser.add_argument("name", action="store", help="name or uuid of the scenario instance") #instance_scenario_status_parser.set_defaults(func=instance_scenario_status)