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.
