Parcourir la source

Make CIDR block part of network constructor for more portable code

Nuwan Goonasekera il y a 8 ans
Parent
commit
103862de20

+ 2 - 1
cloudbridge/cloud/interfaces/provider.py

@@ -146,7 +146,8 @@ class CloudProvider(object):
         .. code-block:: python
         .. code-block:: python
 
 
             networks = provider.networking.networks.list()
             networks = provider.networking.networks.list()
-            network = provider.networking.networks.create(name="DevNet")
+            network = provider.networking.networks.create(
+                           name="DevNet", cidr_block='10.0.0.0/16')
 
 
         :rtype: :class:`.NetworkingService`
         :rtype: :class:`.NetworkingService`
         :return:  a NetworkingService object
         :return:  a NetworkingService object

+ 11 - 1
cloudbridge/cloud/interfaces/services.py

@@ -593,7 +593,7 @@ class NetworkService(PageableObjectMixin, CloudService):
         pass
         pass
 
 
     @abstractmethod
     @abstractmethod
-    def create(self, name):
+    def create(self, name, cidr_block):
         """
         """
         Create a new network.
         Create a new network.
 
 
@@ -601,6 +601,16 @@ class NetworkService(PageableObjectMixin, CloudService):
         :param name: A network name. The name will be set if the
         :param name: A network name. The name will be set if the
                      provider supports it.
                      provider supports it.
 
 
+        :type cidr_block: ``str``
+        :param cidr_block: The cidr block for this network. Some providers
+                           will respect this at the network level, while others
+                           will only respect it at subnet level. However, to
+                           write portable code, you should make sure that any
+                           subnets you create fall within this initially
+                           specified range. Note that the block size should be
+                           between a /16 netmask (65,536 IP addresses) and /28
+                           netmask (16 IP addresses). e.g. 10.0.0.0/16
+
         :rtype: ``object`` of :class:`.Network`
         :rtype: ``object`` of :class:`.Network`
         :return:  A Network object
         :return:  A Network object
         """
         """

+ 2 - 5
cloudbridge/cloud/providers/aws/services.py

@@ -796,11 +796,8 @@ class AWSNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider, networks,
         return ClientPagedResultList(self.provider, networks,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
-    def create(self, name):
-        # AWS requires CIDR block to be specified when creating a network
-        # so set a default one and use the largest allowed netmask.
-        default_cidr = '10.0.0.0/16'
-        network = self.provider.vpc_conn.create_vpc(cidr_block=default_cidr)
+    def create(self, name, cidr_block):
+        network = self.provider.vpc_conn.create_vpc(cidr_block=cidr_block)
         cb_network = AWSNetwork(self.provider, network)
         cb_network = AWSNetwork(self.provider, network)
         if name:
         if name:
             cb_network.wait_for(
             cb_network.wait_for(

+ 1 - 1
cloudbridge/cloud/providers/openstack/services.py

@@ -757,7 +757,7 @@ class OpenStackNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider, networks,
         return ClientPagedResultList(self.provider, networks,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
-    def create(self, name):
+    def create(self, name, cidr_block):
         net_info = {'name': name}
         net_info = {'name': name}
         network = self.provider.neutron.create_network({'network': net_info})
         network = self.provider.neutron.create_network({'network': net_info})
         return OpenStackNetwork(self.provider, network.get('network'))
         return OpenStackNetwork(self.provider, network.get('network'))

+ 2 - 1
test/helpers/__init__.py

@@ -102,7 +102,8 @@ def create_test_network(provider, name):
     """
     """
     Create a network with one subnet, returning the network and subnet objects.
     Create a network with one subnet, returning the network and subnet objects.
     """
     """
-    net = provider.networking.networks.create(name=name)
+    net = provider.networking.networks.create(name=name,
+                                              cidr_block='10.0.0.0/16')
     cidr_block = (net.cidr_block).split('/')[0] or '10.0.0.1'
     cidr_block = (net.cidr_block).split('/')[0] or '10.0.0.1'
     sn = net.create_subnet(cidr_block='{0}/28'.format(cidr_block), name=name,
     sn = net.create_subnet(cidr_block='{0}/28'.format(cidr_block), name=name,
                            zone=get_provider_test_data(provider, 'placement'))
                            zone=get_provider_test_data(provider, 'placement'))

+ 6 - 3
test/test_network_service.py

@@ -12,7 +12,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
     def test_crud_network_service(self):
     def test_crud_network_service(self):
         name = 'cb_crudnetwork-{0}'.format(helpers.get_uuid())
         name = 'cb_crudnetwork-{0}'.format(helpers.get_uuid())
         subnet_name = 'cb_crudsubnet-{0}'.format(helpers.get_uuid())
         subnet_name = 'cb_crudsubnet-{0}'.format(helpers.get_uuid())
-        net = self.provider.networking.networks.create(name=name)
+        net = self.provider.networking.networks.create(
+            name=name, cidr_block='10.0.0.0/16')
         with helpers.cleanup_action(
         with helpers.cleanup_action(
             lambda:
             lambda:
                 self.provider.networking.networks.delete(network_id=net.id)
                 self.provider.networking.networks.delete(network_id=net.id)
@@ -70,7 +71,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
     def test_network_properties(self):
     def test_network_properties(self):
         name = 'cb_propnetwork-{0}'.format(helpers.get_uuid())
         name = 'cb_propnetwork-{0}'.format(helpers.get_uuid())
         subnet_name = 'cb_propsubnet-{0}'.format(helpers.get_uuid())
         subnet_name = 'cb_propsubnet-{0}'.format(helpers.get_uuid())
-        net = self.provider.networking.networks.create(name=name)
+        net = self.provider.networking.networks.create(
+            name=name, cidr_block='10.0.0.0/16')
         with helpers.cleanup_action(
         with helpers.cleanup_action(
             lambda: net.delete()
             lambda: net.delete()
         ):
         ):
@@ -125,7 +127,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         router = None
         router = None
         gteway = None
         gteway = None
         with helpers.cleanup_action(lambda: _cleanup(net, sn, router, gteway)):
         with helpers.cleanup_action(lambda: _cleanup(net, sn, router, gteway)):
-            net = self.provider.networking.networks.create(name=name)
+            net = self.provider.networking.networks.create(
+                name=name, cidr_block='10.0.0.0/16')
             router = self.provider.networking.routers.create(network=net,
             router = self.provider.networking.routers.create(network=net,
                                                              name=name)
                                                              name=name)
             cidr = '10.0.1.0/24'
             cidr = '10.0.1.0/24'