Added method to return OpenStackVmInstance from Heat.
[snaps.git] / snaps / openstack / create_network.py
index 4f27eec..166a682 100644 (file)
@@ -53,8 +53,8 @@ class OpenStackNetwork:
         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:
@@ -71,8 +71,8 @@ class OpenStackNetwork:
 
         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(
@@ -149,6 +149,8 @@ class NetworkSettings:
         :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:
         """
@@ -175,6 +177,7 @@ class NetworkSettings:
 
         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')
@@ -190,7 +193,6 @@ class NetworkSettings:
 
         if not self.name or len(self.name) < 1:
             raise NetworkSettingsError('Name required for networks')
-            raise NetworkSettingsError('Name required for networks')
 
     def get_project_id(self, os_creds):
         """
@@ -203,8 +205,8 @@ class NetworkSettings:
         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
 
@@ -231,7 +233,7 @@ class NetworkSettings:
         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 NetworkSettingsError(
                     'Could not find project ID for project named - ' +
@@ -240,6 +242,8 @@ class NetworkSettings:
             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}
@@ -345,12 +349,13 @@ class SubnetSettings:
             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 SubnetSettingsError(
                     'Could not find project ID for project named - ' +
@@ -389,10 +394,10 @@ class PortSettings:
 
     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.
@@ -448,10 +453,9 @@ class PortSettings:
         self.device_owner = kwargs.get('device_owner')
         self.device_id = kwargs.get('device_id')
 
-        if not self.name or not self.network_name:
+        if not self.network_name:
             raise PortSettingsError(
-                'The attributes neutron, name, and network_name are required '
-                'for PortSettings')
+                'The attribute network_name is required')
 
     def __set_fixed_ips(self, neutron):
         """
@@ -463,10 +467,9 @@ class PortSettings:
             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.id})
                 else:
@@ -492,14 +495,14 @@ class PortSettings:
         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 PortSettingsError(
                 'Cannot locate network with name - ' + self.network_name)
@@ -512,7 +515,7 @@ class PortSettings:
             out['name'] = self.name
         if self.project_name:
             if project_id:
-                out['project_id'] = project_id
+                out['tenant_id'] = project_id
             else:
                 raise PortSettingsError(
                     'Could not find project ID for project named - ' +