from openmano_schemas import id_schema, name_schema, nameshort_schema, description_schema, \
vlan1000_schema, integer0_schema
from jsonschema import validate as js_v, exceptions as js_e
+from urllib import quote
'''contain the openvim virtual machine status to openmano status'''
vmStatus2manoFormat={'ACTIVE':'ACTIVE',
vimconn.vimconnector.__init__(self, uuid, name, tenant_id, tenant_name, url, url_admin, user, passwd, log_level, config)
self.tenant = None
self.headers_req = {'content-type': 'application/json'}
- self.logger = logging.getLogger('mano.vim.openvim')
+ self.logger = logging.getLogger('openmano.vim.openvim')
if tenant_id:
self.tenant = tenant_id
if self.tenant:
return self.tenant
- url = self.url+'/tenants?name='+ self.tenant_name
+ url = self.url+'/tenants?name='+ quote(self.tenant_name)
self.logger.info("Getting VIM tenant_id GET %s", url)
vim_response = requests.get(url, headers = self.headers_req)
self._check_http_request_response(vim_response)
except requests.exceptions.RequestException as e:
self._format_request_exception(e)
- def new_network(self,net_name,net_type, shared=False, **vim_specific):
+ def new_network(self,net_name, net_type, ip_profile=None, shared=False, **vim_specific):
'''Adds a tenant network to VIM'''
'''Returns the network identifier'''
try:
def get_image_id_from_path(self, path):
- '''Get the image id from image path in the VIM database'''
+ '''Get the image id from image path in the VIM database. Returns the image_id'''
try:
self._get_my_tenant()
- url=self.url + '/' + self.tenant + '/images?path='+path
+ url=self.url + '/' + self.tenant + '/images?path='+quote(path)
self.logger.info("Getting images GET %s", url)
vim_response = requests.get(url)
self._check_http_request_response(vim_response)
except (requests.exceptions.RequestException, js_e.ValidationError) as e:
self._format_request_exception(e)
+ def get_image_list(self, filter_dict={}):
+ '''Obtain tenant images from VIM
+ Filter_dict can be:
+ name: image name
+ id: image uuid
+ checksum: image checksum
+ location: image path
+ Returns the image list of dictionaries:
+ [{<the fields at Filter_dict plus some VIM specific>}, ...]
+ List can be empty
+ '''
+ try:
+ self._get_my_tenant()
+ filterquery=[]
+ filterquery_text=''
+ for k,v in filter_dict.iteritems():
+ filterquery.append(str(k)+'='+str(v))
+ if len(filterquery)>0:
+ filterquery_text='?'+ '&'.join(filterquery)
+ url = self.url+'/'+self.tenant+'/images'+filterquery_text
+ self.logger.info("Getting image list GET %s", url)
+ vim_response = requests.get(url, headers = self.headers_req)
+ self._check_http_request_response(vim_response)
+ self.logger.debug(vim_response.text)
+ #print json.dumps(vim_response.json(), indent=4)
+ response = vim_response.json()
+ return response['images']
+ except (requests.exceptions.RequestException, js_e.ValidationError) as e:
+ self._format_request_exception(e)
+
def new_vminstancefromJSON(self, vm_data):
'''Adds a VM instance to VIM'''
'''Returns the instance identifier'''
#print text
return -vim_response.status_code,text
- def new_vminstance(self,name,description,start,image_id,flavor_id,net_list):
+ def new_vminstance(self,name,description,start,image_id,flavor_id,net_list, cloud_config=None):
'''Adds a VM instance to VIM
Params:
start: indicates if VM must start or boot in pause mode. Ignored
#get interfaces info
try:
management_ip = False
- url2 = self.url+'/ports?device_id='+ vm_id
+ url2 = self.url+'/ports?device_id='+ quote(vm_id)
self.logger.info("Getting PORTS GET %s", url2)
vim_response2 = requests.get(url2, headers = self.headers_req)
self._check_http_request_response(vim_response2)
interface={}
interface['vim_info'] = yaml.safe_dump(port)
interface["mac_address"] = port.get("mac_address")
- interface["vim_net_id"] = port["network_id"]
+ interface["vim_net_id"] = port.get("network_id")
interface["vim_interface_id"] = port["id"]
interface["ip_address"] = port.get("ip_address")
if interface["ip_address"]: