Jelajahi Sumber

Use Standard SKU for Azure public IPs

Basic-SKU public IPs are being retired in Azure (September 2025); most
subscriptions now have a quota of 0 for Basic SKU, causing
floating-IP integration tests to fail with:
  (IPv4BasicSkuPublicIpCountLimitReached) Cannot create more than 0
  IPv4 Basic SKU public IP addresses for this subscription...

PublicIPAddress.create() now explicitly requests Standard SKU.
Static allocation (already used) remains valid - and is required for
Standard SKU.
Nuwan Goonasekera 1 hari lalu
induk
melakukan
555d0814ca
1 mengubah file dengan 6 tambahan dan 2 penghapusan
  1. 6 2
      cloudbridge/providers/azure/services.py

+ 6 - 2
cloudbridge/providers/azure/services.py

@@ -37,7 +37,8 @@ from azure.mgmt.compute.models import (CreationData, DataDisk,
                                        StorageProfile)
 from azure.mgmt.network.models import (AddressSpace,
                                        NetworkInterfaceIPConfiguration,
-                                       SubResource)
+                                       PublicIPAddressSku,
+                                       PublicIPAddressSkuName, SubResource)
 
 from .resources import (AzureBucket, AzureBucketObject, AzureFloatingIP,
                         AzureInstance, AzureInternetGateway, AzureKeyPair,
@@ -1355,9 +1356,12 @@ class AzureFloatingIPService(BaseFloatingIPService):
     @dispatch(event="provider.networking.floating_ips.create",
               priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def create(self, gateway):
+        # Basic-SKU public IPs are retired in most Azure subscriptions
+        # (quota=0). Standard SKU requires Static allocation.
         public_ip_parameters = {
             'location': self.provider.azure_client.region_name,
-            'public_ip_allocation_method': 'Static'
+            'public_ip_allocation_method': 'Static',
+            'sku': PublicIPAddressSku(name=PublicIPAddressSkuName.STANDARD),
         }
 
         public_ip_name = AzureFloatingIP._generate_name_from_label(