diff options
author | Scott Moser <smoser@ubuntu.com> | 2014-08-22 11:40:25 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2014-08-22 11:40:25 -0400 |
commit | d723c17b7abe5263d879d748dade763034cce476 (patch) | |
tree | 82a1c08cd27af2df550ff4760095f766ba4b9db6 /cloudinit | |
parent | bbe4b997819f43089aea12141ea393c1a46fe84d (diff) | |
download | vyos-cloud-init-d723c17b7abe5263d879d748dade763034cce476.tar.gz vyos-cloud-init-d723c17b7abe5263d879d748dade763034cce476.zip |
ec2_utils.py: get_instance_metadata explicitly add trailing /
This change works around a bug in CloudStack's EC2 api implementation.
That is filed upstream at [1].
The fix is safe for openstack and EC2 use cases as well.
EC2 and OpenStacks' EC2 metadata service both return a list with
access to either of:
<url_base>/latest/meta-data
<url_base>/latest/meta-data/
Additionally, the responses explicitly contain a trailing '/' for
items that have a child. The ec2_utils code then just re-uses the trailng
/ there. Thus, only the top level request for 'meta-data/' needs
the explicit fix.
This also changes test cases. Those test cases failed without fixing
them. If ever this regressed, those would fail again.
--
[1] https://issues.apache.org/jira/browse/CLOUDSTACK-7405
LP: #1356855
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/ec2_utils.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/cloudinit/ec2_utils.py b/cloudinit/ec2_utils.py index a7c9c9ab..0c751140 100644 --- a/cloudinit/ec2_utils.py +++ b/cloudinit/ec2_utils.py @@ -166,7 +166,9 @@ def get_instance_metadata(api_version='latest', metadata_address='http://169.254.169.254', ssl_details=None, timeout=5, retries=5): md_url = url_helper.combine_url(metadata_address, api_version) - md_url = url_helper.combine_url(md_url, 'meta-data') + # Note, 'meta-data' explicitly has trailing /. + # this is required for CloudStack (LP: #1356855) + md_url = url_helper.combine_url(md_url, 'meta-data/') caller = functools.partial(util.read_file_or_url, ssl_details=ssl_details, timeout=timeout, retries=retries) |