Browse Source

Add name validations to create methods

Ehsan Chiniforooshan 8 years ago
parent
commit
8c5c539fd7

+ 2 - 1
cloudbridge/cloud/providers/gce/provider.py

@@ -175,7 +175,8 @@ class GCECloudProvider(BaseCloudProvider):
 
 
         # Initialize cloud connection fields
         # Initialize cloud connection fields
         self.credentials_file = self._get_config_value(
         self.credentials_file = self._get_config_value(
-                'gce_service_creds_file', os.environ.get('GCE_SERVICE_CREDS_FILE'))
+                'gce_service_creds_file',
+                os.environ.get('GCE_SERVICE_CREDS_FILE'))
         self.credentials_dict = self._get_config_value(
         self.credentials_dict = self._get_config_value(
                 'gce_service_creds_dict',
                 'gce_service_creds_dict',
                 json.loads(os.getenv('GCE_SERVICE_CREDS_DICT', '{}')))
                 json.loads(os.getenv('GCE_SERVICE_CREDS_DICT', '{}')))

+ 2 - 0
cloudbridge/cloud/providers/gce/resources.py

@@ -955,6 +955,7 @@ class GCEInstance(BaseInstance):
         """
         """
         Create a new image based on this instance.
         Create a new image based on this instance.
         """
         """
+        self.assert_valid_resource_name(name)
         if 'disks' not in self._gce_instance:
         if 'disks' not in self._gce_instance:
             cb.log.error('Failed to create image: no disks found.')
             cb.log.error('Failed to create image: no disks found.')
             return
             return
@@ -1940,6 +1941,7 @@ class GCSBucket(BaseBucket):
         return GCSObject(self._provider, self, response) if response else None
         return GCSObject(self._provider, self, response) if response else None
 
 
     def create_object_with_media_body(self, name, media_body):
     def create_object_with_media_body(self, name, media_body):
+        self.assert_valid_resource_name(name)
         try:
         try:
             response = (self._provider
             response = (self._provider
                             .gcp_storage
                             .gcp_storage

+ 12 - 1
cloudbridge/cloud/providers/gce/services.py

@@ -201,6 +201,7 @@ class GCEKeyPairService(BaseKeyPairService):
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
     def create(self, name):
     def create(self, name):
+        GCEKeyPair.assert_valid_resource_name(name)
         kp = self.find(name=name)
         kp = self.find(name=name)
         if kp:
         if kp:
             return kp
             return kp
@@ -246,6 +247,7 @@ class GCEVMFirewallService(BaseVMFirewallService):
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
     def create(self, name, description, network_id=None):
     def create(self, name, description, network_id=None):
+        GCEVMFirewall.assert_valid_resource_name(name)
         network = self.provider.networking.networks.get(network_id)
         network = self.provider.networking.networks.get(network_id)
         return GCEVMFirewall(self._delegate, name, network, description)
         return GCEVMFirewall(self._delegate, name, network, description)
 
 
@@ -464,6 +466,7 @@ class GCEInstanceService(BaseInstanceService):
         """
         """
         Creates a new virtual machine instance.
         Creates a new virtual machine instance.
         """
         """
+        GCEInstance.assert_valid_resource_name(name)
         if not zone:
         if not zone:
             zone = self.provider.default_zone
             zone = self.provider.default_zone
         if not launch_config:
         if not launch_config:
@@ -720,6 +723,7 @@ class GCENetworkService(BaseNetworkService):
         Creates an auto mode VPC network with default subnets. It is possible
         Creates an auto mode VPC network with default subnets. It is possible
         to add additional subnets later.
         to add additional subnets later.
         """
         """
+        GCENetwork.assert_valid_resource_name(name)
         return self._create(name, cidr_block, True)
         return self._create(name, cidr_block, True)
 
 
     def get_or_create_default(self):
     def get_or_create_default(self):
@@ -824,10 +828,12 @@ class GCERouterService(BaseRouterService):
                                      False, data=routers)
                                      False, data=routers)
 
 
     def create(self, network, name=None):
     def create(self, network, name=None):
+        name = name if name else 'router-{0}'.format(uuid.uuid4())
+        GCERouter.assert_valid_resource_name(name)
+
         if not isinstance(network, GCENetwork):
         if not isinstance(network, GCENetwork):
             network = self.provider.networking.networks.get(network)
             network = self.provider.networking.networks.get(network)
         network_url = network.resource_url
         network_url = network.resource_url
-        name = name if name else 'router-{0}'.format(uuid.uuid4())
         region = self.provider.region_name
         region = self.provider.region_name
         try:
         try:
             response = (self.provider
             response = (self.provider
@@ -887,6 +893,7 @@ class GCEGatewayService(BaseGatewayService):
              'name': GCEGatewayService._DEFAULT_GATEWAY_NAME})
              'name': GCEGatewayService._DEFAULT_GATEWAY_NAME})
 
 
     def get_or_create_inet_gateway(self, name):
     def get_or_create_inet_gateway(self, name):
+        GCEInternetGateway.assert_valid_resource_name(name)
         return self._default_internet_gateway
         return self._default_internet_gateway
 
 
     def delete(self, gateway):
     def delete(self, gateway):
@@ -939,6 +946,7 @@ class GCESubnetService(BaseSubnetService):
         instead of creating a new subnet. In this case, other parameters, i.e.
         instead of creating a new subnet. In this case, other parameters, i.e.
         the name and the zone, are ignored.
         the name and the zone, are ignored.
         """
         """
+        GCESubnet.assert_valid_resource_name(name)
         subnets = self.list(network)
         subnets = self.list(network)
         for subnet in subnets:
         for subnet in subnets:
             if BaseNetwork.cidr_blocks_overlap(subnet.cidr_block, cidr_block):
             if BaseNetwork.cidr_blocks_overlap(subnet.cidr_block, cidr_block):
@@ -1121,6 +1129,7 @@ class GCEVolumeService(BaseVolumeService):
         be a dash, lowercase letter, or digit, except the last character, which
         be a dash, lowercase letter, or digit, except the last character, which
         cannot be a dash.
         cannot be a dash.
         """
         """
+        GCEVolume.assert_valid_resource_name(name)
         zone_name = zone.name if isinstance(zone, PlacementZone) else zone
         zone_name = zone.name if isinstance(zone, PlacementZone) else zone
         snapshot_id = snapshot.id if isinstance(
         snapshot_id = snapshot.id if isinstance(
             snapshot, GCESnapshot) and snapshot else snapshot
             snapshot, GCESnapshot) and snapshot else snapshot
@@ -1210,6 +1219,7 @@ class GCESnapshotService(BaseSnapshotService):
         """
         """
         Creates a new snapshot of a given volume.
         Creates a new snapshot of a given volume.
         """
         """
+        GCESnapshot.assert_valid_resource_name(name)
         volume_name = volume.name if isinstance(volume, GCEVolume) else volume
         volume_name = volume.name if isinstance(volume, GCEVolume) else volume
         snapshot_body = {
         snapshot_body = {
             "name": name,
             "name": name,
@@ -1305,6 +1315,7 @@ class GCSBucketService(BaseBucketService):
         """
         """
         Create a new bucket and returns it. Returns None if creation fails.
         Create a new bucket and returns it. Returns None if creation fails.
         """
         """
+        GCSBucket.assert_valid_resource_name(name)
         body = {'name': name}
         body = {'name': name}
         if location:
         if location:
             body['location'] = location
             body['location'] = location

+ 1 - 1
test/helpers/standard_interface_tests.py

@@ -92,7 +92,7 @@ def check_get(test, service, obj):
 
 
 def check_get_non_existent(test, service):
 def check_get_non_existent(test, service):
     # check get
     # check get
-    get_objs = service.get(str(uuid.uuid4()))
+    get_objs = service.get('tmp-' + str(uuid.uuid4()))
     test.assertIsNone(
     test.assertIsNone(
         get_objs,
         get_objs,
         "Get non-existent object for %s returned unexpected objects: %s"
         "Get non-existent object for %s returned unexpected objects: %s"

+ 1 - 1
test/test_compute_service.py

@@ -63,7 +63,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                               'security.vm_firewalls',
                               'security.vm_firewalls',
                               'security.key_pairs'])
                               'security.key_pairs'])
     def test_instance_properties(self):
     def test_instance_properties(self):
-        name = "cb-inst_props-{0}".format(helpers.get_uuid())
+        name = "cb-inst-props-{0}".format(helpers.get_uuid())
 
 
         # Declare these variables and late binding will allow
         # Declare these variables and late binding will allow
         # the cleanup method access to the most current values
         # the cleanup method access to the most current values