# -*- coding: utf-8 -*-
##
-# 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.
#
self._format_request_exception(e)
def new_network(self,net_name, net_type, ip_profile=None, shared=False, vlan=None): #, **vim_specific):
- '''Adds a tenant network to VIM'''
- '''Returns the network identifier'''
+ """Adds a tenant network to VIM
+ Params:
+ 'net_name': name of the network
+ 'net_type': one of:
+ 'bridge': overlay isolated network
+ 'data': underlay E-LAN network for Passthrough and SRIOV interfaces
+ 'ptp': underlay E-LINE network for Passthrough and SRIOV interfaces.
+ 'ip_profile': is a dict containing the IP parameters of the network
+ 'ip_version': can be "IPv4" or "IPv6" (Currently only IPv4 is implemented)
+ 'subnet_address': ip_prefix_schema, that is X.X.X.X/Y
+ 'gateway_address': (Optional) ip_schema, that is X.X.X.X
+ 'dns_address': (Optional) comma separated list of ip_schema, e.g. X.X.X.X[,X,X,X,X]
+ 'dhcp_enabled': True or False
+ 'dhcp_start_address': ip_schema, first IP to grant
+ 'dhcp_count': number of IPs to grant.
+ 'shared': if this network can be seen/use by other tenants/organization
+ 'vlan': in case of a data or ptp net_type, the intended vlan tag to be used for the network
+ Returns a tuple with the network identifier and created_items, or raises an exception on error
+ created_items can be None or a dictionary where this method can include key-values that will be passed to
+ the method delete_network. Can be used to store created segments, created l2gw connections, etc.
+ Format is vimconnector dependent, but do not use nested dictionaries and a value of None should be the same
+ as not present.
+ """
try:
+ created_items = {}
self._get_my_tenant()
if net_type=="bridge":
net_type="bridge_data"
#if r is not None:
# self.logger.warn("Warning: remove extra items %s", str(r))
network_id = response['network']['id']
- return network_id
+ return network_id, created_items
except (requests.exceptions.RequestException, js_e.ValidationError) as e:
self._format_request_exception(e)
except (requests.exceptions.RequestException, js_e.ValidationError) as e:
self._format_request_exception(e)
- def delete_network(self, net_id):
- '''Deletes a tenant network from VIM'''
- '''Returns the network identifier'''
+ def delete_network(self, net_id, created_items=None):
+ """
+ Removes a tenant network from VIM and its associated elements
+ :param net_id: VIM identifier of the network, provided by method new_network
+ :param created_items: dictionary with extra items to be deleted. provided by method new_network
+ Returns the network identifier or raises an exception upon error or when network is not found
+ """
try:
self._get_my_tenant()
url = self.url+'/networks/'+net_id
for device in new_flavor_dict.get('extended', {}).get('devices', ()):
if 'image name' in device:
del device['image name']
+ if 'name' in device:
+ del device['name']
numas = new_flavor_dict.get('extended', {}).get('numas')
if numas:
numa = numas[0]
name:
net_id: network uuid to connect
vpci: virtual vcpi to assign
- model: interface model, virtio, e2000, ...
+ model: interface model, virtio, e1000, ...
mac_address:
use: 'data', 'bridge', 'mgmt'
type: 'virtual', 'PCI-PASSTHROUGH'('PF'), 'SR-IOV'('VF'), 'VFnotShared'
if net.get("vpci"):
net_dict["vpci"] = net["vpci"]
if net.get("model"):
- if net["model"] == "VIRTIO":
+ if net["model"] == "VIRTIO" or net["model"] == "paravirt":
net_dict["model"] = "virtio"
else:
net_dict["model"] = net["model"]
if net.get("mac_address"):
net_dict["mac_address"] = net["mac_address"]
+ if net.get("ip_address"):
+ net_dict["ip_address"] = net["ip_address"]
virtio_net_list.append(net_dict)
payload_dict={ "name": name[:64],
"description": description,
vm={}
#print "VIMConnector refresh_tenant_vms and nets: Getting tenant VM instance information from VIM"
try:
- url = self.url+'/'+self.tenant+'/servers/'+ vm_id
+ url = self.url + '/' + self.tenant + '/servers/' + vm_id
self.logger.info("Getting vm GET %s", url)
vim_response = requests.get(url, headers = self.headers_req)
self._check_http_request_response(vim_response)
#get interfaces info
try:
management_ip = False
- url2 = self.url+'/ports?device_id='+ quote(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)
vm["interfaces"]=[]
for port in client_data.get("ports"):
interface={}
- interface['vim_info'] = yaml.safe_dump(port)
+ interface['vim_info'] = yaml.safe_dump(port)
interface["mac_address"] = port.get("mac_address")
interface["vim_net_id"] = port.get("network_id")
interface["vim_interface_id"] = port["id"]