Looks like all "user-data" in AWS is just a "string" at the end of the day.

So there is no way for Ansible to parse that string and pull out values,
without a third-party module such as
https://github.com/jpmens/ansible-ec2-userdata say ?

Ben


On 15 March 2014 01:39, Michael DeHaan <[email protected]> wrote:

> In your Debug output it looks like it came out that way because that was
> what got stored there.
>
>
>
>
> On Thu, Mar 13, 2014 at 10:27 PM, Ben Turner <[email protected]> wrote:
>
>> I tried out some more debug statements; the .json suffix doesn't appear
>> to be present ?
>>
>> The user-data "json" appears to be coming back as a string...
>>
>> TASK: [common | debug var=user_data]
>> ******************************************
>> ok: [ec2-54-253-114-32.ap-southeast-2.compute.amazonaws.com] => {
>>     "item": "",
>>     "user_data": {
>>         "accept_ranges": "bytes",
>>         "changed": false,
>>         "connection": "close",
>>         "content": "{\"hostname\":\"qa\"}",
>>         "content_length": "17",
>>         "content_location": "http://169.254.169.254/latest/user-data";,
>>         "content_type": "application/octet-stream",
>>         "date": "Fri, 14 Mar 2014 02:26:12 GMT",
>>         "etag": "\"1016948274\"",
>>         "invocation": {
>>             "module_args": 
>> "url=http://169.254.169.254/latest/user-datareturn_content=yes";,
>>             "module_name": "uri"
>>         },
>>         "item": "",
>>         "last_modified": "Thu, 13 Mar 2014 22:02:44 GMT",
>>         "redirected": false,
>>         "server": "EC2ws",
>>         "status": 200
>>     }
>> }
>>
>> TASK: [common | debug var=user_data.json]
>> *************************************
>> ok: [ec2-54-253-114-32.ap-southeast-2.compute.amazonaws.com] => {
>>     "item": "",
>>     "user_data.json": "{{ user_data.json }}"
>> }
>>
>> TASK: [common | debug var=user_data.content.json]
>> *****************************
>> ok: [ec2-54-253-114-32.ap-southeast-2.compute.amazonaws.com] => {
>>     "item": "",
>>     "user_data.content.json": "{{ user_data.content.json }}"
>> }
>>
>>
>>
>>  On 14 March 2014 12:15, Romeo Theriault <[email protected]>wrote:
>>
>>>  Hi Ben, If you want to access the JSON data it's available in the json
>>> subkey. So instead of:
>>>
>>> {{ user_data.content.hostname }}
>>>
>>> I believe it would be
>>>
>>> {{ user_data.json.hostname }}
>>>
>>> or something similar.
>>>
>>> Take a look at the {{ user_data.json }} or {{ user_data }} output with
>>> the debug module to get a better idea.
>>>
>>> Hope that helps,
>>> Romeo
>>>
>>> On Thu, Mar 13, 2014 at 2:35 PM, Ben Turner <[email protected]>
>>> wrote:
>>> > I've been trying to use the user-data provided by EC2 servers to
>>> determine a
>>> > servers hostname.
>>> >
>>> > So currently new server come up with a hostname of
>>> "ec2-123-234-345-456" or
>>> > similar, and I'd like in my ansible script to rename that server to
>>> > something like "demonstration".
>>> >
>>> > To do this, I've gone into my EC2 console, and added the following as
>>> > user-data to my server:
>>> >
>>> >     {"hostname": "demonstration"}
>>> >
>>> > Then, in my ansible playbook, I've tried the following:
>>> >
>>> >     - name: Load user data
>>> >       uri: url=http://169.254.169.254/latest/user-datareturn_content=yes
>>> >       register: user_data
>>> >
>>> >     - debug: var=user_data.content
>>> >
>>> >     - name: Set hostname from user data
>>> >       command: hostname {{user_data.content.hostname}}
>>> >       when: user_data is defined
>>> >
>>> > This produces the output (using the -v flag):
>>> >
>>> >     PLAY [ec2]
>>> > ********************************************************************
>>> >
>>> >     GATHERING FACTS
>>> > ***************************************************************
>>> >     ok: [ec2-54-253-114-###.ap-southeast-2.compute.amazonaws.com]
>>> >
>>> >     TASK: [common | Load user data]
>>> > ***********************************************
>>> >     ok: [ec2-54-253-114-###.ap-southeast-2.compute.amazonaws.com] =>
>>> > {"accept_ranges": "bytes", "changed": false, "connection": "close",
>>> > "content": "{\"hostname\":\"demonstration\"}", "content_length": "28",
>>> > "content_location": "http://169.254.169.254/latest/user-data";,
>>> > "content_type": "application/octet-stream", "date": "Fri, 14 Mar 2014
>>> > 00:30:30 GMT", "etag": "\"1016948274\"", "item": "", "last_modified":
>>> "Thu,
>>> > 13 Mar 2014 22:02:44 GMT", "redirected": false, "server": "EC2ws",
>>> "status":
>>> > 200}
>>> >
>>> >     TASK: [common | debug var=user_data.content]
>>> > **********************************
>>> >     ok: [ec2-54-253-114-###.ap-southeast-2.compute.amazonaws.com] => {
>>> >         "item": "",
>>> >         "user_data.content": {
>>> >             "hostname": "demonstration"
>>> >         }
>>> >     }
>>> >
>>> >     TASK: [common | Set hostname from user data]
>>> > **********************************
>>> >     fatal: [ec2-54-253-114-###.ap-southeast-2.compute.amazonaws.com]
>>> => One
>>> > or more undefined variables: 'unicode object' has no attribute
>>> 'hostname'
>>> >
>>> > So, whilst it seems that debugging user_data returns a JSON-like return
>>> > strucutre, and drilling down to user_data.content also returns a
>>> JSON-like
>>> > return structure, the actual JSON content returned by the uri task is
>>> unable
>>> > to be parsed using the Jinja2 dot notation, and instead appears to be
>>> an
>>> > impenetrable object, at least as far as I can determine.
>>> >
>>> > Is there a way of extracting this URI return content using core ansible
>>> > modules such that I can use it's JSON payload as ansible variables ?
>>> >
>>> > Regards,
>>> > Ben
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> Groups
>>> > "Ansible Project" group.
>>> > To unsubscribe from this group and stop receiving emails from it, send
>>> an
>>> > email to [email protected].
>>> > To post to this group, send email to [email protected].
>>> > To view this discussion on the web visit
>>> >
>>> https://groups.google.com/d/msgid/ansible-project/978e1838-7964-4130-827f-2f82c0daa4f8%40googlegroups.com
>>> .
>>> > For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>>
>>> --
>>> Romeo
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "Ansible Project" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/ansible-project/FWSJulCzsQ8/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>>
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/CACUx58M%3D361LMPj4DFDjTrZQ0nNT57c32zLfKBm4HNupuxVtvQ%40mail.gmail.com
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/CAGxBzUE-B76djVXnVZrxJcE%3DXoT54zkPTiqC9fbFZnVpcUU3ig%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAGxBzUE-B76djVXnVZrxJcE%3DXoT54zkPTiqC9fbFZnVpcUU3ig%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ansible-project/FWSJulCzsQ8/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAEVJ8QMV-vmK04X5wpfkm2YWg%2BveHsSjAvZda4MvZzvgCLqRcw%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAEVJ8QMV-vmK04X5wpfkm2YWg%2BveHsSjAvZda4MvZzvgCLqRcw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAGxBzUGZvyNkjYTnpa5E16o90To9BqUUtX-pO9EcbHwmy0L3QQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to