From 10147364638595d6c1a7077cc47c205413ef13a6 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Tue, 13 Nov 2012 11:02:03 -0800 Subject: Even when using boto < 2.6 force the unlazying to occur It seems like its possible that boto 2.5.2 and below have the lazy loading metadata dictionary so as a precaution we will always take the hit of unlazying the metadata dictionary by traversing it which in the non-lazy dictionary case has no effect (its marginal). This also removes the need to check the boto version and the dependency on setup tools just for this case. --- cloudinit/ec2_utils.py | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'cloudinit') diff --git a/cloudinit/ec2_utils.py b/cloudinit/ec2_utils.py index 32bf3968..46b93f39 100644 --- a/cloudinit/ec2_utils.py +++ b/cloudinit/ec2_utils.py @@ -16,34 +16,26 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import pkg_resources -from pkg_resources import parse_version as pver - import boto.utils as boto_utils -# Versions of boto >= 2.6.0 try to lazily load -# the metadata backing, which doesn't work so well -# in cloud-init especially since the metadata is -# serialized and actions are performed where the -# metadata server may be blocked (thus the datasource -# will start failing) resulting in url exceptions -# when fields that do exist (or would have existed) -# do not exist due to the blocking that occurred. - -BOTO_LAZY = False -try: - _boto_lib = pkg_resources.get_distribution('boto') - if _boto_lib.parsed_version > pver("2.5.2"): # pylint: disable=E1103 - BOTO_LAZY = True -except pkg_resources.DistributionNotFound: - pass +# Versions of boto >= 2.6.0 (and possibly 2.5.2) +# try to lazily load the metadata backing, which +# doesn't work so well in cloud-init especially +# since the metadata is serialized and actions are +# performed where the metadata server may be blocked +# (thus the datasource will start failing) resulting +# in url exceptions when fields that do exist (or +# would have existed) do not exist due to the blocking +# that occurred. def _unlazy_dict(mp): if not isinstance(mp, (dict)): return mp - if not BOTO_LAZY: - return mp + # Walk over the keys/values which + # forces boto to unlazy itself and + # has no effect on dictionaries that + # already have there items. for (_k, v) in mp.items(): _unlazy_dict(v) return mp -- cgit v1.2.3