diff options
author | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-11-13 11:02:03 -0800 |
---|---|---|
committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-11-13 11:02:03 -0800 |
commit | 10147364638595d6c1a7077cc47c205413ef13a6 (patch) | |
tree | 38e1b69a08209e20d39735657048bba1e30ed2d7 | |
parent | 8d5e1e108b0cdd3af872383da7654bec91355b5f (diff) | |
download | vyos-cloud-init-10147364638595d6c1a7077cc47c205413ef13a6.tar.gz vyos-cloud-init-10147364638595d6c1a7077cc47c205413ef13a6.zip |
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.
-rw-r--r-- | cloudinit/ec2_utils.py | 34 |
1 files changed, 13 insertions, 21 deletions
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 <http://www.gnu.org/licenses/>. -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 |