Переглянути джерело

Added keypair server paging and fixed up to_json

Nuwan Goonasekera 8 роки тому
батько
коміт
fa379a2593

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

@@ -477,19 +477,12 @@ class AzureClient(object):
         self.table_service.delete_entity(self.public_key_storage_table_name,
                                          entity.PartitionKey, entity.RowKey)
 
-    def list_public_keys(self, partition_key):
-        items = []
-        next_marker = None
-        while True:
-            entities = self.table_service. \
-                query_entities(self.public_key_storage_table_name,
-                               "PartitionKey eq '{0}'".format(partition_key),
-                               marker=next_marker, num_results=1)
-            items.extend(entities.items)
-            next_marker = entities.next_marker
-            if not next_marker:
-                break
-        return items
+    def list_public_keys(self, partition_key, limit=None, marker=None):
+        entities = self.table_service. \
+            query_entities(self.public_key_storage_table_name,
+                           "PartitionKey eq '{0}'".format(partition_key),
+                           marker=marker, num_results=limit)
+        return (entities.items, entities.next_marker)
 
     def delete_route_table(self, route_table_name):
         self.network_management_client. \

+ 2 - 5
cloudbridge/cloud/providers/azure/resources.py

@@ -2,8 +2,6 @@
 DataTypes used by this provider
 """
 import collections
-import inspect
-import json
 import logging
 import time
 
@@ -138,10 +136,9 @@ class AzureVMFirewall(BaseVMFirewall):
             # The security group no longer exists and cannot be refreshed.
 
     def to_json(self):
-        attr = inspect.getmembers(self, lambda a: not (inspect.isroutine(a)))
-        js = {k: v for (k, v) in attr if not k.startswith('_')}
+        js = super(AzureVMFirewall, self).to_json()
         json_rules = [r.to_json() for r in self.rules]
-        js['rules'] = [json.loads(r) for r in json_rules]
+        js['rules'] = json_rules
         if js.get('network_id'):
             js.pop('network_id')  # Omit for consistency across cloud providers
         return js

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

@@ -4,7 +4,8 @@ import uuid
 
 from azure.common import AzureException
 
-from cloudbridge.cloud.base.resources import ClientPagedResultList
+from cloudbridge.cloud.base.resources import ClientPagedResultList, \
+    ServerPagedResultList
 from cloudbridge.cloud.base.services import BaseBucketService, \
     BaseComputeService, BaseFloatingIPService, BaseGatewayService, \
     BaseImageService, BaseInstanceService, BaseKeyPairService, \
@@ -118,10 +119,15 @@ class AzureKeyPairService(BaseKeyPairService):
             return None
 
     def list(self, limit=None, marker=None):
-        key_pairs = [AzureKeyPair(self.provider, key_pair) for key_pair in
-                     self.provider.azure_client.
-                     list_public_keys(AzureKeyPairService.PARTITION_KEY)]
-        return ClientPagedResultList(self.provider, key_pairs, limit, marker)
+        key_pairs, resume_marker = self.provider.azure_client.list_public_keys(
+            AzureKeyPairService.PARTITION_KEY,  marker=marker,
+            limit=limit or self.provider.config.default_result_limit)
+        results = [AzureKeyPair(self.provider, key_pair)
+                   for key_pair in key_pairs]
+        return ServerPagedResultList(is_truncated=resume_marker,
+                                     marker=resume_marker,
+                                     supports_total=False,
+                                     data=results)
 
     def find(self, name, limit=None, marker=None):
         key_pair = self.get(name)