Selaa lähdekoodia

Merge in some fixes missed during rebase

Nuwan Goonasekera 8 vuotta sitten
vanhempi
sitoutus
3e8ce8aab2

+ 1 - 1
cloudbridge/cloud/base/provider.py

@@ -100,7 +100,7 @@ class BaseCloudProvider(CloudProvider):
         """
         """
         log.debug("Checking if cloud credential works...")
         log.debug("Checking if cloud credential works...")
         try:
         try:
-            self.security.security_groups.list()
+            self.security.key_pairs.list()
             return True
             return True
         except Exception as e:
         except Exception as e:
             log.exception("ProviderConnectionException occurred")
             log.exception("ProviderConnectionException occurred")

+ 1 - 1
cloudbridge/cloud/interfaces/resources.py

@@ -569,7 +569,7 @@ class Instance(ObjectLifeCycleMixin, CloudResource):
         pass
         pass
 
 
     @abstractmethod
     @abstractmethod
-    def create_image(self, name, private_key_path=None):
+    def create_image(self, name):
         """
         """
         Create a new image based on this instance.
         Create a new image based on this instance.
 
 

+ 3 - 0
cloudbridge/cloud/providers/aws/resources.py

@@ -942,6 +942,7 @@ class AWSNetwork(BaseNetwork):
 
 
 
 
 class AWSSubnet(BaseSubnet):
 class AWSSubnet(BaseSubnet):
+
     # http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html
     # http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html
     _SUBNET_STATE_MAP = {
     _SUBNET_STATE_MAP = {
         'pending': SubnetState.PENDING,
         'pending': SubnetState.PENDING,
@@ -1028,6 +1029,7 @@ class AWSFloatingIP(BaseFloatingIP):
 
 
 
 
 class AWSRouter(BaseRouter):
 class AWSRouter(BaseRouter):
+
     def __init__(self, provider, route_table):
     def __init__(self, provider, route_table):
         super(AWSRouter, self).__init__(provider)
         super(AWSRouter, self).__init__(provider)
         self._route_table = route_table
         self._route_table = route_table
@@ -1094,6 +1096,7 @@ class AWSRouter(BaseRouter):
 
 
 
 
 class AWSInternetGateway(BaseInternetGateway):
 class AWSInternetGateway(BaseInternetGateway):
+
     def __init__(self, provider, gateway):
     def __init__(self, provider, gateway):
         super(AWSInternetGateway, self).__init__(provider)
         super(AWSInternetGateway, self).__init__(provider)
         self._gateway = gateway
         self._gateway = gateway

+ 13 - 14
cloudbridge/cloud/providers/azure/azure_client.py

@@ -19,7 +19,6 @@ class AzureClient(object):
     """
     """
     Azure client is the wrapper on top of azure python sdk
     Azure client is the wrapper on top of azure python sdk
     """
     """
-
     def __init__(self, config):
     def __init__(self, config):
         self._config = config
         self._config = config
         self.subscription_id = config.get('azure_subscription_id')
         self.subscription_id = config.get('azure_subscription_id')
@@ -365,11 +364,11 @@ class AzureClient(object):
                       subnet_name, params):
                       subnet_name, params):
         result_create = self.network_management_client \
         result_create = self.network_management_client \
             .subnets.create_or_update(
             .subnets.create_or_update(
-            self.resource_group,
-            network_name,
-            subnet_name,
-            params
-        )
+                self.resource_group,
+                network_name,
+                subnet_name,
+                params
+            )
         subnet_info = result_create.result()
         subnet_info = result_create.result()
 
 
         return subnet_info
         return subnet_info
@@ -377,10 +376,10 @@ class AzureClient(object):
     def delete_subnet(self, network_name, subnet_name):
     def delete_subnet(self, network_name, subnet_name):
         result_delete = self.network_management_client \
         result_delete = self.network_management_client \
             .subnets.delete(
             .subnets.delete(
-            self.resource_group,
-            network_name,
-            subnet_name
-        )
+                self.resource_group,
+                network_name,
+                subnet_name
+            )
         result_delete.wait()
         result_delete.wait()
 
 
     def list_vm(self):
     def list_vm(self):
@@ -443,10 +442,10 @@ class AzureClient(object):
     def create_nic(self, nic_name, params):
     def create_nic(self, nic_name, params):
         async_nic_creation = self.network_management_client. \
         async_nic_creation = self.network_management_client. \
             network_interfaces.create_or_update(
             network_interfaces.create_or_update(
-            self.resource_group,
-            nic_name,
-            params
-        )
+                self.resource_group,
+                nic_name,
+                params
+            )
         nic_info = async_nic_creation.result()
         nic_info = async_nic_creation.result()
 
 
         return nic_info
         return nic_info

+ 0 - 1
docs/topics/overview.rst

@@ -14,4 +14,3 @@ Introductions to all the key parts of CloudBridge you'll need to know:
     Using block storage <block_storage.rst>
     Using block storage <block_storage.rst>
     Using object storage <object_storage.rst>
     Using object storage <object_storage.rst>
     Troubleshooting <troubleshooting.rst>
     Troubleshooting <troubleshooting.rst>
-

+ 11 - 9
test/helpers/__init__.py

@@ -94,8 +94,8 @@ TEST_DATA_CONFIG = {
             os.environ.get('CB_PLACEMENT_AZURE', 'eastus'),
             os.environ.get('CB_PLACEMENT_AZURE', 'eastus'),
         "image":
         "image":
             os.environ.get('CB_IMAGE_AZURE', 'CbTest-Img'),
             os.environ.get('CB_IMAGE_AZURE', 'CbTest-Img'),
-        "instance_type":
-            os.environ.get('CB_INSTANCE_TYPE_AZURE', 'Standard_DS1_v2'),
+        "vm_type":
+            os.environ.get('CB_VM_TYPE_AZURE', 'Standard_DS1_v2'),
     }
     }
 }
 }
 
 
@@ -105,6 +105,8 @@ def get_provider_test_data(provider, key):
         return TEST_DATA_CONFIG.get("AWSCloudProvider").get(key)
         return TEST_DATA_CONFIG.get("AWSCloudProvider").get(key)
     elif "OpenStackCloudProvider" in provider.name:
     elif "OpenStackCloudProvider" in provider.name:
         return TEST_DATA_CONFIG.get("OpenStackCloudProvider").get(key)
         return TEST_DATA_CONFIG.get("OpenStackCloudProvider").get(key)
+    elif "AzureCloudProvider" in provider.name:
+        return TEST_DATA_CONFIG.get("AzureCloudProvider").get(key)
     return None
     return None
 
 
 
 
@@ -126,7 +128,8 @@ def delete_test_network(network):
     """
     """
     with cleanup_action(lambda: network.delete()):
     with cleanup_action(lambda: network.delete()):
         for sn in network.subnets:
         for sn in network.subnets:
-            sn.delete()
+            with cleanup_action(lambda: sn.delete()):
+                pass
 
 
 
 
 def create_test_instance(
 def create_test_instance(
@@ -196,6 +199,7 @@ def get_uuid():
 
 
 
 
 class ProviderTestBase(unittest.TestCase):
 class ProviderTestBase(unittest.TestCase):
+
     _provider = None
     _provider = None
 
 
     def setUp(self):
     def setUp(self):
@@ -214,17 +218,15 @@ class ProviderTestBase(unittest.TestCase):
             return 1
             return 1
 
 
     def create_provider_instance(self):
     def create_provider_instance(self):
-        provider_name = os.environ.get("CB_TEST_PROVIDER", "azure")
+        provider_name = os.environ.get("CB_TEST_PROVIDER", "aws")
         use_mock_drivers = parse_bool(
         use_mock_drivers = parse_bool(
             os.environ.get("CB_USE_MOCK_PROVIDERS", "True"))
             os.environ.get("CB_USE_MOCK_PROVIDERS", "True"))
         factory = CloudProviderFactory()
         factory = CloudProviderFactory()
         provider_class = factory.get_provider_class(provider_name,
         provider_class = factory.get_provider_class(provider_name,
                                                     get_mock=use_mock_drivers)
                                                     get_mock=use_mock_drivers)
-        config = {
-            'default_wait_interval':
-                self.get_provider_wait_interval(provider_class),
-            'default_result_limit': 1}
-
+        config = {'default_wait_interval':
+                  self.get_provider_wait_interval(provider_class),
+                  'default_result_limit': 1}
         return provider_class(config)
         return provider_class(config)
 
 
     @property
     @property

+ 4 - 6
test/helpers/standard_interface_tests.py

@@ -5,10 +5,12 @@ This includes:
    2. Checking for object equality and repr
    2. Checking for object equality and repr
    3. Checking standard behaviour for list, iter, find, get, delete
    3. Checking standard behaviour for list, iter, find, get, delete
 """
 """
+import test.helpers as helpers
 import uuid
 import uuid
 
 
 from cloudbridge.cloud.interfaces.exceptions \
 from cloudbridge.cloud.interfaces.exceptions \
     import InvalidNameException
     import InvalidNameException
+from cloudbridge.cloud.interfaces.resources import ObjectLifeCycleMixin
 from cloudbridge.cloud.interfaces.resources import ResultList
 from cloudbridge.cloud.interfaces.resources import ResultList
 
 
 
 
@@ -68,6 +70,7 @@ def check_find(test, service, obj):
         len(find_objs) == 1,
         len(find_objs) == 1,
         "Find objects for %s does not return the expected object: %s. Got %s"
         "Find objects for %s does not return the expected object: %s. Got %s"
         % (type(obj).__name__, obj.name, find_objs))
         % (type(obj).__name__, obj.name, find_objs))
+    test.assertEqual(find_objs[0], obj)
     return find_objs
     return find_objs
 
 
 
 
@@ -129,7 +132,7 @@ def check_obj_name(test, obj):
             obj.name = "hello world"
             obj.name = "hello world"
         # setting upper case characters should raise an exception
         # setting upper case characters should raise an exception
         with test.assertRaises(InvalidNameException):
         with test.assertRaises(InvalidNameException):
-            obj.name = "hello World"
+            obj.name = "helloWorld"
         # setting special characters should raise an exception
         # setting special characters should raise an exception
         with test.assertRaises(InvalidNameException):
         with test.assertRaises(InvalidNameException):
             obj.name = "hello.world:how_goes_it"
             obj.name = "hello.world:how_goes_it"
@@ -158,11 +161,6 @@ def check_standard_behaviour(test, service, obj):
     obj_get = check_get(test, service, obj)
     obj_get = check_get(test, service, obj)
     check_get_non_existent(test, service)
     check_get_non_existent(test, service)
 
 
-    print("Out List - " + objs_list[0].state)
-    print("Out Iter - " + objs_iter[0].state)
-    print("Out Get - " + obj_get.state)
-    print("Out Find - " + objs_find[0].state)
-
     test.assertTrue(
     test.assertTrue(
         obj == objs_list[0] == objs_iter[0] == objs_find[0] == obj_get,
         obj == objs_list[0] == objs_iter[0] == objs_find[0] == obj_get,
         "Objects returned by list: {0}, iter: {1}, find: {2} and get: {3} "
         "Objects returned by list: {0}, iter: {1}, find: {2} and get: {3} "

+ 3 - 3
test/test_compute_service.py

@@ -45,7 +45,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                 name)
                 name)
 
 
         with helpers.cleanup_action(lambda: helpers.cleanup_test_resources(
         with helpers.cleanup_action(lambda: helpers.cleanup_test_resources(
-                network=net)):
+                                               network=net)):
             net, subnet = helpers.create_test_network(self.provider, name)
             net, subnet = helpers.create_test_network(self.provider, name)
 
 
             sit.check_crud(self, self.provider.compute.instances, Instance,
             sit.check_crud(self, self.provider.compute.instances, Instance,
@@ -181,7 +181,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
         lc.add_volume_device(
         lc.add_volume_device(
             is_root=True,
             is_root=True,
             source=img,
             source=img,
-            size=img.min_disk if img and img.min_disk else 50,
+            size=img.min_disk if img and img.min_disk else 30,
             delete_on_terminate=True)
             delete_on_terminate=True)
 
 
         # Attempting to add more than one root volume should raise an
         # Attempting to add more than one root volume should raise an
@@ -261,7 +261,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                 lc.add_volume_device(
                 lc.add_volume_device(
                     is_root=True,
                     is_root=True,
                     source=img,
                     source=img,
-                    size=img.min_disk if img and img.min_disk else 50,
+                    size=img.min_disk if img and img.min_disk else 30,
                     delete_on_terminate=True)
                     delete_on_terminate=True)
 
 
                 # Add all available ephemeral devices
                 # Add all available ephemeral devices

+ 7 - 11
test/test_network_service.py

@@ -13,7 +13,6 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
 
 
     @helpers.skipIfNoService(['networking.networks'])
     @helpers.skipIfNoService(['networking.networks'])
     def test_crud_network(self):
     def test_crud_network(self):
-
         def create_net(name):
         def create_net(name):
             return self.provider.networking.networks.create(
             return self.provider.networking.networks.create(
                 name=name, cidr_block='10.0.0.0/16')
                 name=name, cidr_block='10.0.0.0/16')
@@ -31,7 +30,7 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         net = self.provider.networking.networks.create(
         net = self.provider.networking.networks.create(
             name=name, cidr_block='10.0.0.0/16')
             name=name, cidr_block='10.0.0.0/16')
         with helpers.cleanup_action(
         with helpers.cleanup_action(
-            lambda: net.delete()
+                lambda: net.delete()
         ):
         ):
             net.wait_till_ready()
             net.wait_till_ready()
             self.assertEqual(
             self.assertEqual(
@@ -85,7 +84,7 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         net = self.provider.networking.networks.create(
         net = self.provider.networking.networks.create(
             name=net_name, cidr_block='10.0.0.0/16')
             name=net_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)
         ):
         ):
             sit.check_crud(self, self.provider.networking.subnets, Subnet,
             sit.check_crud(self, self.provider.networking.subnets, Subnet,
@@ -126,7 +125,6 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
 
 
     @helpers.skipIfNoService(['networking.routers'])
     @helpers.skipIfNoService(['networking.routers'])
     def test_crud_router(self):
     def test_crud_router(self):
-
         def _cleanup(net, subnet, router, gateway):
         def _cleanup(net, subnet, router, gateway):
             with helpers.cleanup_action(lambda: net.delete()):
             with helpers.cleanup_action(lambda: net.delete()):
                 with helpers.cleanup_action(lambda: subnet.delete()):
                 with helpers.cleanup_action(lambda: subnet.delete()):
@@ -152,9 +150,6 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                                    zone=helpers.get_provider_test_data(
                                    zone=helpers.get_provider_test_data(
                                        self.provider, 'placement'))
                                        self.provider, 'placement'))
 
 
-            # Comment out routers assertion because Azure has dummy
-            # implementation for routers
-            # and not returns the expected router from the routers method
             # Check basic router properties
             # Check basic router properties
             sit.check_standard_behaviour(
             sit.check_standard_behaviour(
                 self, self.provider.networking.routers, router)
                 self, self.provider.networking.routers, router)
@@ -163,10 +158,11 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                 "Router {0} state {1} should be {2}.".format(
                 "Router {0} state {1} should be {2}.".format(
                     router.id, router.state, RouterState.DETACHED))
                     router.id, router.state, RouterState.DETACHED))
 
 
-#             self.assertFalse(
-#                 router.network_id,
-#                 "Router {0} should not be assoc. with a network {1}".format(
-#                     router.id, router.network_id))
+            #             self.assertFalse(
+            #                 router.network_id,
+            #                 "Router {0} should not be assoc.
+            # with a network {1}".format(
+            #                     router.id, router.network_id))
 
 
             router.attach_subnet(sn)
             router.attach_subnet(sn)
             gteway = (self.provider.networking.gateways
             gteway = (self.provider.networking.gateways