Procházet zdrojové kódy

Fix more test related issues with labels

Nuwan Goonasekera před 7 roky
rodič
revize
a969b22bd7

+ 2 - 2
cloudbridge/cloud/base/resources.py

@@ -78,8 +78,8 @@ class BaseCloudResource(CloudResource):
             log.debug("InvalidLabelException raised on %s", name)
             raise InvalidLabelException(
                 u"Invalid label: %s. Label must be at most 63 characters "
-                "long and consist of lowercase letters, numbers, "
-                "underscores, dashes or international characters" % name)
+                "long and consist of lowercase letters, numbers, or dashes. "
+                "The label must not start or end with a dash." % name)
 
     @staticmethod
     def _generate_name_from_label(label, default):

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

@@ -124,6 +124,7 @@ class LabeledCloudResource(CloudResource):
           numeric characters, and dashes.
         * Must begin with an alphanumeric character and end with one
           (i.e. cannot begin or end with a dash)
+        * Must be at least 3 characters in length.
 
         Some resources may not support labels, in which case, a
         NotImplementedError will be thrown.

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

@@ -92,7 +92,7 @@ class AWSMachineImage(BaseMachineImage):
     @label.setter
     # pylint:disable=arguments-differ
     def label(self, value):
-        self.assert_valid_resource_label(value)
+        self.assert_valid_resource_name(value)
         self._ec2_image.create_tags(Tags=[{'Key': 'Name', 'Value': value}])
 
     @property
@@ -310,7 +310,7 @@ class AWSInstance(BaseInstance):
 
     def create_image(self, label=None):
         self.assert_valid_resource_name(label)
-        name = self._generate_name_from_label(label)
+        name = self._generate_name_from_label(label, 'cb-img')
 
         image = AWSMachineImage(self._provider,
                                 self._ec2_instance.create_image(Name=name))
@@ -582,7 +582,7 @@ class AWSSnapshot(BaseSnapshot):
         self._snapshot.delete()
 
     def create_volume(self, placement, size=None, volume_type=None, iops=None):
-        label = "from_snap_{0}".format(self.label or self.id)
+        label = "from-snap-{0}".format(self.label or self.id)
         cb_vol = self._provider.storage.volumes.create(
             label=label,
             size=size,

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

@@ -137,7 +137,7 @@ class AWSVMFirewallService(BaseVMFirewallService):
                   "[label: %s id: %s description: %s]", label, network_id,
                   description)
         AWSVMFirewall.assert_valid_resource_name(label)
-        name = AWSVMFirewall._generate_name_from_label(label)
+        name = AWSVMFirewall._generate_name_from_label(label, 'cb-fw')
         obj = self.svc.create('create_security_group', GroupName=name,
                               Description=description, VpcId=network_id)
         obj.label = label

+ 6 - 4
cloudbridge/cloud/providers/azure/resources.py

@@ -997,7 +997,8 @@ class AzureFloatingIPContainer(BaseFloatingIPContainer):
             public_ip_parameters.update(tags={'Label': label})
 
         AzureFloatingIP.assert_valid_resource_name(label)
-        public_ip_name = AzureFloatingIP._generate_name_from_label(label)
+        public_ip_name = AzureFloatingIP._generate_name_from_label(
+            label, 'cb-fip')
 
         floating_ip = self._provider.azure_client.\
             create_floating_ip(public_ip_name, public_ip_parameters)
@@ -1416,7 +1417,7 @@ class AzureInstance(BaseInstance):
         """
         return self._vm.tags.get('Key_Pair')
 
-    def create_image(self, name, private_key_path=None):
+    def create_image(self, label=None, private_key_path=None):
         """
         Create a new image based on this instance. Documentation for create
         image available at https://docs.microsoft.com/en-us/azure/virtual-ma
@@ -1429,7 +1430,8 @@ class AzureInstance(BaseInstance):
         CloudBridge interface to pass the private key file path
         """
 
-        self.assert_valid_resource_name(name)
+        self.assert_valid_resource_name(label)
+        name = self._generate_name_from_label(label, 'cb-img')
 
         if not self._state == 'VM generalized':
             if not self._state == 'VM running':
@@ -1445,7 +1447,7 @@ class AzureInstance(BaseInstance):
             'source_virtual_machine': {
                 'id': self.resource_id
             },
-            'tags': {'Label': name}
+            'tags': {'Label': label}
         }
 
         image = self._provider.azure_client.create_image(name,

+ 2 - 2
cloudbridge/cloud/providers/openstack/resources.py

@@ -452,7 +452,7 @@ class OpenStackInstance(BaseInstance):
         """
         log.debug("Creating OpenStack Image with the label %s", label)
         self.assert_valid_resource_name(label)
-        name = self._generate_name_from_label(label)
+        name = self._generate_name_from_label(label, 'cb-img')
 
         image_id = self._os_instance.create_image(name)
         img = OpenStackMachineImage(
@@ -783,7 +783,7 @@ class OpenStackSnapshot(BaseSnapshot):
         """
         Create a new Volume from this Snapshot.
         """
-        vol_label = "from_snap_{0}".format(self.id or self.label)
+        vol_label = "from-snap-{0}".format(self.id or self.label)
         name = self._generate_name_from_label(vol_label)
         size = size if size else self._snapshot.size
         os_vol = self._provider.cinder.volumes.create(

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

@@ -442,7 +442,7 @@ class OpenStackSnapshotService(BaseSnapshotService):
         """
         log.debug("Creating a new snapshot of the %s volume.", label)
         OpenStackSnapshot.assert_valid_resource_name(label)
-        name = OpenStackSnapshot._generate_name_from_label(label)
+        name = OpenStackSnapshot._generate_name_from_label(label, 'cb-snap')
 
         volume_id = (volume.id if isinstance(volume, OpenStackVolume)
                      else volume)
@@ -815,7 +815,7 @@ class OpenStackNetworkService(BaseNetworkService):
         log.debug("Creating OpenStack Network with the params: "
                   "[label: %s Cinder Block: %s]", label, cidr_block)
         OpenStackNetwork.assert_valid_resource_name(label)
-        name = OpenStackNetwork._generate_name_from_label(label)
+        name = OpenStackNetwork._generate_name_from_label(label, 'cb-net')
         net_info = {'name': name}
         network = self.provider.neutron.create_network({'network': net_info})
         return OpenStackNetwork(self.provider, network.get('network'))

+ 1 - 1
test/helpers/standard_interface_tests.py

@@ -142,7 +142,7 @@ def check_obj_label(test, obj):
         test.assertIsInstance(obj, LabeledCloudResource)
         # setting letters, numbers and international characters should succeed
         # TODO: Unicode characters trip up Moto. Add following: \u0D85\u0200
-        VALID_LABEL = u"hello_world-123"
+        VALID_LABEL = u"hello-world-123"
         original_label = obj.label
         obj.label = VALID_LABEL
         # setting spaces should raise an exception

+ 1 - 1
test/test_compute_service.py

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

+ 1 - 1
test/test_security_service.py

@@ -99,7 +99,7 @@ class CloudSecurityServiceTestCase(ProviderTestBase):
 
     @helpers.skipIfNoService(['security.vm_firewalls'])
     def test_crud_vm_firewall_rules(self):
-        label = 'cb-crudfw_rules-{0}'.format(helpers.get_uuid())
+        label = 'cb-crudfw-rules-{0}'.format(helpers.get_uuid())
 
         # Declare these variables and late binding will allow
         # the cleanup method access to the most current values