+def _get_items(item, item_name_id=None, datacenter=None, tenant=None):
+ URLrequest = "http://%s:%s/openmano" %(mano_host, mano_port)
+ if tenant:
+ URLrequest += "/" + tenant
+ if datacenter:
+ URLrequest += "/vim/" + datacenter
+ if item:
+ URLrequest += "/" + item +"s"
+ if item_name_id:
+ URLrequest += "/" + item_name_id
+ mano_response = requests.get(URLrequest)
+ logger.debug("openmano response: %s", mano_response.text )
+
+ return mano_response
+
+
+def vim_net_sdn_attach(args):
+ #Verify the network exists in the vim
+ tenant = _get_tenant()
+ datacenter = _get_datacenter(args.datacenter, tenant)
+ result = _get_items('network', item_name_id=args.vim_net, datacenter=datacenter, tenant=tenant)
+ content = yaml.load(result.content)
+ if 'networks' in content:
+ raise OpenmanoCLIError('More than one network in the vim named ' + args.vim_net + '. Use uuid instead')
+ if 'error' in content:
+ raise OpenmanoCLIError(yaml.safe_dump(content))
+ network_uuid = content['network']['id']
+
+ #Make call to attach the dataplane port to the SND network associated to the vim network
+ headers_req = {'content-type': 'application/yaml'}
+ payload_req = {'port': args.port}
+ if args.vlan:
+ payload_req['vlan'] = int(args.vlan)
+ if args.mac:
+ payload_req['mac'] = args.mac
+
+ URLrequest = "http://%s:%s/openmano/%s/vim/%s/network/%s/attach" % (mano_host, mano_port, tenant, datacenter, network_uuid)
+ logger.debug("openmano request: %s", payload_req)
+ mano_response = requests.post(URLrequest, headers=headers_req, data=json.dumps(payload_req))
+ logger.debug("openmano response: %s", mano_response.text)
+ result = _print_verbose(mano_response, args.verbose)
+ return result
+
+
+def vim_net_sdn_detach(args):
+ if not args.all and not args.id:
+ print "--all or --id must be used"
+ return 1
+
+ # Verify the network exists in the vim
+ tenant = _get_tenant()
+ datacenter = _get_datacenter(args.datacenter, tenant)
+ result = _get_items('network', item_name_id=args.vim_net, datacenter=datacenter, tenant=tenant)
+ content = yaml.load(result.content)
+ if 'networks' in content:
+ raise OpenmanoCLIError('More than one network in the vim named ' + args.vim_net + '. Use uuid instead')
+ if 'error' in content:
+ raise OpenmanoCLIError(yaml.safe_dump(content))
+ network_uuid = content['network']['id']
+
+ if not args.force:
+ r = raw_input("Confirm action' (y/N)? ")
+ if len(r) == 0 or r[0].lower() != "y":
+ return 0
+
+ if args.id:
+ URLrequest = "http://%s:%s/openmano/%s/vim/%s/network/%s/detach/%s" % (
+ mano_host, mano_port, tenant, datacenter, network_uuid, args.id)
+ else:
+ URLrequest = "http://%s:%s/openmano/%s/vim/%s/network/%s/detach" % (
+ mano_host, mano_port, tenant, datacenter, network_uuid)
+ mano_response = requests.delete(URLrequest)
+ logger.debug("openmano response: %s", mano_response.text)
+ result = _print_verbose(mano_response, args.verbose)
+ return result
+
+