Not sure about this ‘fix’.  If the goal is to match AWS here is the way it 
works compared to 4.3.

1) /latest/user-data

On AWS one can query /latest/user-data with or without the trailing slash and 
BOTH return the user-data

On ACS 4.3 /latest/user-data works but with trailing / returns a 404.

2) /latest/meta-data

On AWS /latest/meta-data returns a 301 pointing to trailing / version.  With a 
trailing slash it return the meta-data objects available.

On ACS 4.3 /latest/meta-data returns 404. With a trailing slash it returns the 
meta-data objects available.

3) /latest/meta-data/<object>

On AWS with and without / returns the object value(s)

On ACS 4.3 without a / it returns the value.  With the / it returns a 404.

——

Here are examples of the above (I am also including the headers and in the case 
of user-data only the headers):

ACS 4.3

$ curl -I http://172.30.45.101/latest/user-data/
HTTP/1.1 404 Not Found
Date: Mon, 25 Aug 2014 15:53:18 GMT
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1

$ curl -I http://172.30.45.101/latest/user-data
HTTP/1.1 200 OK
Date: Mon, 25 Aug 2014 15:53:23 GMT
Server: Apache
Last-Modified: Mon, 11 Aug 2014 22:34:05 GMT
ETag: "10240-0-5006227053140;500622334a140”
Accept-Ranges: bytes

$ curl -i http://172.30.45.101/latest/meta-data
HTTP/1.1 404 Not Found
Date: Mon, 25 Aug 2014 15:54:25 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 214
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /latest/meta-data was not found on this server.</p>
</body></html>

$ curl -i http://172.30.45.101/latest/meta-data/
HTTP/1.1 200 OK
Date: Mon, 25 Aug 2014 15:54:32 GMT
Server: Apache
Last-Modified: Mon, 11 Aug 2014 22:34:05 GMT
ETag: "1024a-88-5006227053140;500622334a140"
Accept-Ranges: bytes
Content-Length: 136

service-offering
availability-zone
local-ipv4
local-hostname
public-ipv4
public-hostname
instance-id
vm-id
public-keys
cloud-identifier

$ curl -i http://172.30.45.101/latest/meta-data/local-ipv4; echo
HTTP/1.1 200 OK
Date: Mon, 25 Aug 2014 15:55:39 GMT
Server: Apache
Last-Modified: Mon, 11 Aug 2014 22:34:05 GMT
ETag: "10250-d-5006227053140;500622334a140"
Accept-Ranges: bytes
Content-Length: 13

172.30.45.123

$ curl -i http://172.30.45.101/latest/meta-data/local-ipv4/; echo
HTTP/1.1 404 Not Found
Date: Mon, 25 Aug 2014 15:55:45 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 232
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /metadata/172.30.45.123/local-ipv4/ was not found on this 
server.</p>
</body></html>


On AWS EC2

$ curl -I  http://169.254.169.254/latest/user-data
HTTP/1.0 200 OK
Content-Type: application/octet-stream
Accept-Ranges: bytes
ETag: "590463714"
Last-Modified: Thu, 03 Apr 2014 23:10:13 GMT
Content-Length: 4790
Connection: close
Date: Mon, 25 Aug 2014 15:57:15 GMT
Server: EC2ws

$ curl -I  http://169.254.169.254/latest/user-data/
HTTP/1.0 200 OK
Content-Type: application/octet-stream
Accept-Ranges: bytes
ETag: "590463714"
Last-Modified: Thu, 03 Apr 2014 23:10:13 GMT
Content-Length: 4790
Connection: close
Date: Mon, 25 Aug 2014 15:57:20 GMT
Server: EC2ws

$ curl -i http://169.254.169.254/latest/meta-data
HTTP/1.0 301 Moved Permanently
Location: http://169.254.169.254/latest/meta-data/
Content-Length: 0
Connection: close
Date: Mon, 25 Aug 2014 15:58:00 GMT
Server: EC2ws

$ curl -i http://169.254.169.254/latest/meta-data/; echo
HTTP/1.0 200 OK
Content-Type: text/plain
Accept-Ranges: bytes
ETag: "1606042795"
Last-Modified: Thu, 03 Apr 2014 23:10:13 GMT
Content-Length: 268
Connection: close
Date: Mon, 25 Aug 2014 15:58:50 GMT
Server: EC2ws

ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups

$ curl -i http://169.254.169.254/latest/meta-data/local-ipv4; echo
HTTP/1.0 200 OK
Content-Type: text/plain
Accept-Ranges: bytes
ETag: "916027669"
Last-Modified: Thu, 03 Apr 2014 23:10:13 GMT
Content-Length: 12
Connection: close
Date: Mon, 25 Aug 2014 16:00:32 GMT
Server: EC2ws

10.250.5.124
$ curl -i http://169.254.169.254/latest/meta-data/local-ipv4/; echo
HTTP/1.0 200 OK
Content-Type: text/plain
Accept-Ranges: bytes
ETag: "916027669"
Last-Modified: Thu, 03 Apr 2014 23:10:13 GMT
Content-Length: 12
Connection: close
Date: Mon, 25 Aug 2014 16:00:36 GMT
Server: EC2ws

10.250.5.124




On Aug 25, 2014, at 5:32 AM, Sebastien Goasguen <run...@gmail.com> wrote:

> 
> On Aug 25, 2014, at 8:28 AM, Sebastien Goasguen <run...@gmail.com> wrote:
> 
>> 
>> On Aug 25, 2014, at 8:26 AM, Wido den Hollander <w...@widodh.nl> wrote:
>> 
>>> On 08/25/2014 02:25 PM, Sebastien Goasguen wrote:
>>>> 
>>>> On Aug 25, 2014, at 8:16 AM, Wido den Hollander <w...@widodh.nl> wrote:
>>>> 
>>>>> On 08/25/2014 01:33 PM, Nux! wrote:
>>>>>> Thanks Erik!
>>>>>> 
>>>>> 
>>>>> Indeed!
>>>>> 
>>>>>> Hopefully this change will be incorporated soon so we don't need to 
>>>>>> patch cloud-init.
>>>>>> 
>>>>> 
>>>>> I came up with a very small patch: 
>>>>> https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=commitdiff;h=1499972804b6de4fade5c84436e29f9904165e18
>>>>> 
>>>>> Tested it on my local env and worked fine. Both the old and new URL work 
>>>>> with the same output.
>>>>> 
>>>> 
>>>> thanks folks, I will pull that in 4.3
>>>> 
>>> 
>>> Hmm. I didn't make a separate branch as a hotfix for 4.4, so how do we get 
>>> this in 4.4.1 as well?
>>> 
>>> We shouldn't cherry-pick anymore, right?
>> 
>> Ideally no, if you make a hotfix/4.4-7405 branch for it you can ask Daan to 
>> merge it in 4.4 branch
>> 
>> I will also merge it in 4.3
>> 
>> 
> 
> Erick, submit the same patch to review board, so I took it from there and 
> patch 4.3 branch.
> 
> Only 4.4 is missing...
> 
>> 
>>> 
>>> Wido
>>> 
>>>> 
>>>> 
>>>>> Wido
>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Sent from the Delta quadrant using Borg technology!
>>>>>> 
>>>>>> Nux!
>>>>>> www.nux.ro
>>>>>> 
>>>>>> 
>>>>>> ----- Original Message -----
>>>>>>> From: "Erik Weber" <terbol...@gmail.com>
>>>>>>> To: "dev" <dev@cloudstack.apache.org>
>>>>>>> Sent: Monday, 25 August, 2014 12:34:10 PM
>>>>>>> Subject: Re: cloud-init issue
>>>>>>> 
>>>>>>> On Mon, Aug 25, 2014 at 1:27 PM, Erik Weber <terbol...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> On Mon, Aug 25, 2014 at 1:16 PM, Wido den Hollander <w...@widodh.nl>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> On 08/25/2014 12:12 PM, Sebastien Goasguen wrote:
>>>>>>>>> 
>>>>>>>>>> Folks,
>>>>>>>>>> 
>>>>>>>>>> There is an outstanding issue with cloud-init compatibility.
>>>>>>>>>> The VR serves the instance metadata through a web server but there 
>>>>>>>>>> is a
>>>>>>>>>> trailing slash issue:
>>>>>>>>>> 
>>>>>>>>>> https://issues.apache.org/jira/browse/CLOUDSTACK-7405
>>>>>>>>>> 
>>>>>>>>>> Does anyone know where the settings for this web server are located 
>>>>>>>>>> in
>>>>>>>>>> the cloudstack code ?
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> So I think that is done in systemvm/patches/debian/
>>>>>>>>> config/opt/cloud/bin/vmdata.py
>>>>>>>>> 
>>>>>>>>> It adds a RewriteRule to the .htaccess like:
>>>>>>>>> 
>>>>>>>>> entry = "RewriteRule ^meta-data/(.+)$  ../" + folder +
>>>>>>>>> "/%{REMOTE_ADDR}/$1 [L,NC,QSA]"
>>>>>>>>> 
>>>>>>>>> I'm not a big mod_rewrite guru however.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> Adding a line with "RewriteRule ^meta-data$ ../" + folder
>>>>>>>> +"/%{REMOTE_ADDR}/$1 [L,NC,QSA]"
>>>>>>>> should suffice.
>>>>>>>> 
>>>>>>>> small typo there...
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>> Tested on a VR with this config:
>>>>>>>> 
>>>>>>>> RewriteRule ^meta-data/(.+)$  ../metadata/%{REMOTE_ADDR}/$1 [L,NC,QSA]
>>>>>>>> 
>>>>>>>> RewriteRule ^meta-data/$  ../metadata/%{REMOTE_ADDR}/meta-data 
>>>>>>>> [L,NC,QSA]
>>>>>>>> 
>>>>>>>> RewriteRule ^meta-data$  ../metadata/%{REMOTE_ADDR}/meta-data 
>>>>>>>> [L,NC,QSA]
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> A better solution is probably to make the last slash conditional, like 
>>>>>>> this:
>>>>>>> RewriteRule ^meta-data/?$  ../metadata/%{REMOTE_ADDR}/meta-data 
>>>>>>> [L,NC,QSA]
>>>>>>> 
>>>>>>> tested:
>>>>>>> [root@jenkins ~]# curl -I -s 10.30.81.1/latest/meta-data/ | grep HTTP
>>>>>>> 
>>>>>>> HTTP/1.1 200 OK
>>>>>>> 
>>>>>>> [root@jenkins ~]# curl -I -s 10.30.81.1/latest/meta-data | grep HTTP
>>>>>>> 
>>>>>>> HTTP/1.1 200 OK
>>>>>>> 
>>>>>>> Erik

Reply via email to