Explorar o código

Added labeling support for azure subnets

Nuwan Goonasekera %!s(int64=7) %!d(string=hai) anos
pai
achega
73670cacd7

+ 13 - 1
cloudbridge/cloud/providers/azure/resources.py

@@ -1161,7 +1161,19 @@ class AzureSubnet(BaseSubnet):
 
     @property
     def label(self):
-        raise NotImplementedError("Azure Subnets do not support labels")
+        # Although Subnet doesn't support labels, we use the parent Network's
+        # tags to track the subnet's labels
+        az_network = self._network._network
+        return az_network.tags.get('SubnetLabel_' + self.name, None)
+
+    @label.setter
+    # pylint:disable=arguments-differ
+    def label(self, value):
+        self.assert_valid_resource_name(value)
+        az_network = self._network._network
+        kwargs = {'SubnetLabel_' + self.name: value}
+        az_network.tags.update(**kwargs)
+        self._provider.azure_client.update_network_tags(self.id, az_network)
 
     @property
     def resource_id(self):

+ 7 - 5
cloudbridge/cloud/providers/azure/services.py

@@ -1012,16 +1012,16 @@ class AzureSubnetService(BaseSubnetService):
         return ClientPagedResultList(self.provider,
                                      matches if matches else [])
 
-    def create(self, network, cidr_block, name=None, **kwargs):
+    def create(self, network, cidr_block, label=None, **kwargs):
         """
         Create subnet
         """
         network_id = network.id \
             if isinstance(network, Network) else network
 
-        # Although Subnet doesn't support labels, use the same logic
-        # to append a uuid to the name.
-        subnet_name = AzureSubnet._generate_name_from_label(name, "cb-sn")
+        # Although Subnet doesn't support labels, we use the parent Network's
+        # tags to track the subnet's labels
+        subnet_name = AzureSubnet._generate_name_from_label(label, "cb-sn")
 
         subnet_info = self.provider.azure_client\
             .create_subnet(
@@ -1032,7 +1032,9 @@ class AzureSubnetService(BaseSubnetService):
                 }
             )
 
-        return AzureSubnet(self.provider, subnet_info)
+        subnet = AzureSubnet(self.provider, subnet_info)
+        subnet.label = label
+        return subnet
 
     def get_or_create_default(self, zone):
         default_cidr = '10.0.1.0/24'