From 66525a88db155d029e62841ec2170b276995e8cc Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Mon, 23 Jul 2007 19:02:17 +0000 Subject: [PATCH] - always query 'slice_ids_whitelist' so we can make sure only valid nodes are returned. remove this field later if user hasnt specified it. - fix nodes iterator bug. --- PLC/Methods/GetNodes.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/PLC/Methods/GetNodes.py b/PLC/Methods/GetNodes.py index 38dc8f01..e442a952 100644 --- a/PLC/Methods/GetNodes.py +++ b/PLC/Methods/GetNodes.py @@ -31,7 +31,15 @@ class GetNodes(Method): def call(self, auth, node_filter = None, return_fields = None): - # Get node information + + # Must query at least slice_ids_whitelist + if return_fields is not None: + added_fields = set(['slice_ids_whitelist']).difference(return_fields) + return_fields += added_fields + else: + added_fields =[] + + # Get node information nodes = Nodes(self.api, node_filter, return_fields) # Remove admin only fields @@ -40,15 +48,21 @@ class GetNodes(Method): slice_ids = set() if self.caller: slice_ids.update(self.caller['slice_ids']) - for node in nodes: - # if node has whitelist, make sure the user has a slice on the whitelist + # if node has whitelist, make sure the user has a slice on the whitelist + for node in nodes[:]: if 'slice_ids_whitelist' in node and \ node['slice_ids_whitelist'] and \ not slice_ids.intersection(node['slice_ids_whitelist']): nodes.remove(node) - continue - for field in ['boot_nonce', 'key', 'session', 'root_person_ids']: + for node in nodes: + for field in ['boot_nonce', 'key', 'session', 'root_person_ids']: if field in node: del node[field] + + # remove added fields if not specified + if added_fields: + for node in nodes: + for field in added_fields: + del node[field] return nodes -- 2.47.0