logger.info(
'Creating neutron network %s...' % self.network_settings.name)
net_inst = neutron_utils.get_network(
- self.__neutron, self.network_settings.name,
- self.network_settings.get_project_id(self.__os_creds))
+ self.__neutron, network_settings=self.network_settings,
+ project_id=self.network_settings.get_project_id(self.__os_creds))
if net_inst:
self.__network = net_inst
else:
' mode')
return
logger.debug(
- "Network '%s' created successfully" % self.__network['network'][
- 'id'])
+ "Network '%s' created successfully" % self.__network.id)
logger.debug('Creating Subnets....')
for subnet_setting in self.network_settings.subnet_settings:
- sub_inst = neutron_utils.get_subnet_by_name(self.__neutron,
- subnet_setting.name)
+ sub_inst = neutron_utils.get_subnet(
+ self.__neutron, subnet_settings=subnet_setting)
if sub_inst:
self.__subnets.append(sub_inst)
logger.debug(
- "Subnet '%s' created successfully" % sub_inst['subnet'][
- 'id'])
+ "Subnet '%s' created successfully" % sub_inst.id)
else:
if not cleanup:
self.__subnets.append(
- neutron_utils.create_subnet(self.__neutron,
- subnet_setting,
- self.__os_creds,
- self.__network))
+ neutron_utils.create_subnet(
+ self.__neutron, subnet_setting, self.__os_creds,
+ self.__network))
return self.__network
for subnet in self.__subnets:
try:
logger.info(
- 'Deleting subnet with name ' + subnet['subnet']['name'])
+ 'Deleting subnet with name ' + subnet.name)
neutron_utils.delete_subnet(self.__neutron, subnet)
except NotFound as e:
logger.warning(
:param network_type: the type of network (i.e. vlan|flat).
:param physical_network: the name of the physical network
(this is required when network_type is 'flat')
+ :param segmentation_id: the id of the segmentation
+ (this is required when network_type is 'vlan')
:param subnets or subnet_settings: List of SubnetSettings objects.
:return:
"""
self.network_type = kwargs.get('network_type')
self.physical_network = kwargs.get('physical_network')
+ self.segmentation_id = kwargs.get('segmentation_id')
self.subnet_settings = list()
subnet_settings = kwargs.get('subnets')
SubnetSettings(**subnet_config['subnet']))
if not self.name or len(self.name) < 1:
- raise Exception('Name required for networks')
+ raise NetworkSettingsError('Name required for networks')
def get_project_id(self, os_creds):
"""
else:
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone,
- self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
if project:
return project.id
if self.project_name:
project_id = self.get_project_id(os_creds)
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
- raise Exception(
+ raise NetworkSettingsError(
'Could not find project ID for project named - ' +
self.project_name)
if self.network_type:
out['provider:network_type'] = self.network_type
if self.physical_network:
out['provider:physical_network'] = self.physical_network
+ if self.segmentation_id:
+ out['provider:segmentation_id'] = self.segmentation_id
if self.external:
out['router:external'] = self.external
return {'network': out}
+class NetworkSettingsError(Exception):
+ """
+ Exception to be thrown when networks settings attributes are incorrect
+ """
+
+
class SubnetSettings:
"""
Class representing a subnet configuration
dhcpv6-stateless, or slaac.
:param ipv6_address_mode: A valid value is dhcpv6-stateful,
dhcpv6-stateless, or slaac.
- :raise: Exception when config does not have or cidr values are None
+ :raise: SubnetSettingsError when config does not have or cidr values
+ are None
"""
- self.cidr = kwargs['cidr']
+ self.cidr = kwargs.get('cidr')
if kwargs.get('ip_version'):
self.ip_version = kwargs['ip_version']
else:
self.ipv6_address_mode = kwargs.get('ipv6_address_mode')
if not self.name or not self.cidr:
- raise Exception('Name and cidr required for subnets')
+ raise SubnetSettingsError('Name and cidr required for subnets')
def dict_for_neutron(self, os_creds, network=None):
"""
}
if network:
- out['network_id'] = network['network']['id']
+ out['network_id'] = network.id
if self.name:
out['name'] = self.name
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
project_id = None
if project:
project_id = project.id
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
- raise Exception(
+ raise SubnetSettingsError(
'Could not find project ID for project named - ' +
self.project_name)
if self.start and self.end:
return out
+class SubnetSettingsError(Exception):
+ """
+ Exception to be thrown when subnet settings attributes are incorrect
+ """
+
+
class PortSettings:
"""
Class representing a port configuration
def __init__(self, **kwargs):
"""
- Constructor - all parameters are optional
- :param name: A symbolic name for the port.
+ Constructor
+ :param name: A symbolic name for the port (optional).
:param network_name: The name of the network on which to create the
- port.
+ port (required).
:param admin_state_up: A boolean value denoting the administrative
status of the port. True = up / False = down
:param project_name: The name of the project who owns the network.
For example, a virtual server.
:return:
"""
+ if 'port' in kwargs:
+ kwargs = kwargs['port']
+
self.network = None
self.name = kwargs.get('name')
self.device_owner = kwargs.get('device_owner')
self.device_id = kwargs.get('device_id')
- if not self.name or not self.network_name:
- raise Exception(
- 'The attributes neutron, name, and network_name are required '
- 'for PortSettings')
+ if not self.network_name:
+ raise PortSettingsError(
+ 'The attribute network_name is required')
def __set_fixed_ips(self, neutron):
"""
self.fixed_ips = list()
for ip_addr_dict in self.ip_addrs:
- subnet = neutron_utils.get_subnet_by_name(neutron,
- ip_addr_dict[
- 'subnet_name'])
- if subnet:
+ subnet = neutron_utils.get_subnet(
+ neutron, subnet_name=ip_addr_dict['subnet_name'])
+ if subnet and 'ip' in ip_addr_dict:
self.fixed_ips.append({'ip_address': ip_addr_dict['ip'],
- 'subnet_id': subnet['subnet'][
- 'id']})
+ 'subnet_id': subnet.id})
else:
- raise Exception(
+ raise PortSettingsError(
'Invalid port configuration, subnet does not exist '
'with name - ' + ip_addr_dict['subnet_name'])
project_id = None
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
if project:
project_id = project.id
if not self.network:
- self.network = neutron_utils.get_network(neutron,
- self.network_name,
- project_id)
+ self.network = neutron_utils.get_network(
+ neutron, network_name=self.network_name, project_id=project_id)
if not self.network:
- raise Exception(
+ raise PortSettingsError(
'Cannot locate network with name - ' + self.network_name)
- out['network_id'] = self.network['network']['id']
+ out['network_id'] = self.network.id
if self.admin_state_up is not None:
out['admin_state_up'] = self.admin_state_up
out['name'] = self.name
if self.project_name:
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
- raise Exception(
+ raise PortSettingsError(
'Could not find project ID for project named - ' +
self.project_name)
if self.mac_address:
if self.device_id:
out['device_id'] = self.device_id
return {'port': out}
+
+ def __eq__(self, other):
+ return (self.name == other.name and
+ self.network_name == other.network_name and
+ self.admin_state_up == other.admin_state_up and
+ self.project_name == other.project_name and
+ self.mac_address == other.mac_address and
+ self.ip_addrs == other.ip_addrs and
+ self.fixed_ips == other.fixed_ips and
+ self.security_groups == other.security_groups and
+ self.allowed_address_pairs == other.allowed_address_pairs and
+ self.opt_value == other.opt_value and
+ self.opt_name == other.opt_name and
+ self.device_owner == other.device_owner and
+ self.device_id == other.device_id)
+
+
+class PortSettingsError(Exception):
+ """
+ Exception to be thrown when port settings attributes are incorrect
+ """