This is an automated email from the ASF dual-hosted git repository. tomaz pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/libcloud.git
commit 6e79f9a3a5edf12e9c345c94cd641fbc4fb8776c Author: Dimitris Galanis <[email protected]> AuthorDate: Thu Mar 10 12:40:32 2022 +0200 Retrieve regions & zones lazily, closes #1661 --- libcloud/compute/drivers/gce.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/libcloud/compute/drivers/gce.py b/libcloud/compute/drivers/gce.py index f084eee..f1b203f 100644 --- a/libcloud/compute/drivers/gce.py +++ b/libcloud/compute/drivers/gce.py @@ -2108,19 +2108,17 @@ class GCENodeDriver(NodeDriver): # Cache Zone and Region information to reduce API calls and # increase speed self.base_path = "/compute/%s/projects/%s" % (API_VERSION, self.project) - self.zone_list = self.ex_list_zones() - self.zone_dict = {} - for zone in self.zone_list: - self.zone_dict[zone.name] = zone + + self._zone_dict = None + self._zone_list = None + if datacenter: self.zone = self.ex_get_zone(datacenter) else: self.zone = None - self.region_list = self.ex_list_regions() - self.region_dict = {} - for region in self.region_list: - self.region_dict[region.name] = region + self._region_dict = None + self._region_list = None if self.zone: self.region = self._get_region_from_zone(self.zone) @@ -2131,6 +2129,32 @@ class GCENodeDriver(NodeDriver): # It is populated if the volume name is not found or the dict is empty. self._ex_volume_dict = {} + @property + def zone_dict(self): + if self._zone_dict is None: + zones = self.ex_list_zones() + self._zone_dict = {zone.name: zone for zone in zones} + return self._zone_dict + + @property + def zone_list(self): + if self._zone_list is None: + self._zone_list = list(self.zone_dict.values()) + return self._zone_list + + @property + def region_dict(self): + if self._region_dict is None: + regions = self.ex_list_regions() + self._region_dict = {region.name: region for region in regions} + return self._region_dict + + @property + def region_list(self): + if self._region_list is None: + self._region_list = list(self.region_dict.values()) + return self._region_list + def ex_add_access_config(self, node, name, nic, nat_ip=None, config_type=None): """ Add a network interface access configuration to a node.
