The easiest way to check the response code of a module is

- debug: var=registered_variable_name

Start there.

The fact that you're getting back unicode shouldn't be a problem.

Possible point of confusion -- What you print from "debug: var" is actually
a Python datastructure, not JSON per se.   The 'json' structure you get
back is the datastructure itself that came from the JSON.

i.e.    registered_variable_name.json.some_value_from_your_web_service
should be directly accessible as a variable.





On Tue, Dec 17, 2013 at 10:25 PM, Roman Revyakin
<[email protected]>wrote:

> Just one more thing that I forgot to mention: I am able to use the JSON
> response as it is in subsequent requests using a bash script which is
> currently in place until this issue with the Ansible playbook is fixed:
>
> # Getting the user credentials in JSON format
> user_info="$(curl -f -v -XPOST $account.$target_domain/auth/user -d
> "$user_login" -H "$content_type_header" | awk '$1=$1' RS= OFS=" " )"
> # Using them in the header for subsequent requests
> curl -i -H "$user_header" -XPUT
> $config_manager.$target_domain/archive/settings -H "$content_type_header"
> ...
>
>
> On Wednesday, December 18, 2013 2:20:22 PM UTC+11, Roman Revyakin wrote:
>>
>> Hi guys,
>>
>> I am facing the problem of not being able to use the JSON part of the
>> HTTP response in my subsequent tasks in an Ansible playbook. Here are the
>> relevant tasks from the playbook:
>>
>>   - name: Login to account as the specified user and obtain its id
>>     local_action: >
>>       uri url='http://{{ account_app }}.{{ target_domain}}/auth/user'
>>       body='{ "email": "{{ userId }}", "password": "{{ sa_password }}" }'
>>       method=POST
>>       return_content=yes status_code=200
>>       HEADER_Content-Type="application/json"
>>     register: usp_user
>>     tags:
>>       - config-manager
>>       - bootstrap
>>       - api
>>
>>   - name: Archive previous top-level settings config
>>     local_action: >
>>        command
>>        curl -i -f -H "content-type: application/json"
>>         -H "{{ lookup('template', './user_header.json.j2') }}"
>>         -XPUT http://{{ config_manager }}.{{ target_domain
>> }}/archive/settings
>> #      uri url='http://{{ config_manager }}.{{ target_domain
>> }}/archive/settings'
>> #      method=PUT
>> #      return_content=yes status_code=200
>> #      HEADER_Content-Type="application/json"
>> #      HEADER_user="{{ usp_user.json }}"
>>     tags:
>>       - config-manager
>>       - bootstrap
>>       - api
>>
>>   - name: Create new top-level settings config
>>     local_action: >
>>        command
>>        curl -i -f -H "content-type: application/json"
>>         -H "{{ lookup('template', './user_header.json.j2') }}"
>>         -XPOST http://{{ config_manager }}.{{ target_domain
>> }}/config/settings
>>         -d '{{ lookup('template', './stages_request.json.j2') }}'
>> #      uri url='http://{{ config_manager }}.{{ target_domain
>> }}/config/settings'
>> #      body='{{ lookup('template', './stages_request.json.j2') }}'
>> #      method=POST
>> #      return_content=yes status_code=200
>> #      HEADER_Content-Type="application/json"
>> #      HEADER_user="{{ usp_user.json }}"
>>     tags:
>>       - config-manager
>>       - bootstrap
>>       - api
>>
>> The `user_header.json.j2` is a simple header template to overcome a YAML
>> parsing problem of having a ':' followed by the curly braces
>>
>> user: {{ usp_user.json }}
>>
>> Basically what I am trying to do it to log in as a particular user to an
>> account-managing app, and then use the JSON part of the response that
>> contains required credentials (like the user id and the token) to do some
>> requests to another app. It seems to work if I form the JSON header
>> manually using the individual values from the JSON response, but not when I
>> try to use the JSON as it is by referring to `variable.json`.
>> In the commented out code I tried to use the `uri` module which I've
>> become a fan of lately and used `curl` command to test whether the problem
>> is in the way `uri` supplies header in the request. Both `curl` and `uri`
>> versions fail with the 400 on the "Archive previous top-level settings
>> config" task (where no body is used in the request) and in the verbose
>> output I see that the `usp_user.json` has 'u' prefixes before any of the
>> key/value pairs, like follows:
>>
>> "user: {u'customer': u'52afd279fa33dd1f00000004',...
>>
>> I suspect this is at least part of the problem if not the problem on
>> itself - please correct me if I am wrong and this is just the weird
>> formatting that is only visible in the verbose output. I tried inserting
>> the task `debug var=usp_user.json` and it seems to output well-formatted
>> JSON though, without any of the 'u' attached.
>>
>> I would appreciate a guidance on how to use the json part of the response
>> in forming headers for succeeding requests.
>>
>> With kind regards,
>> Roman
>>
>  --
> 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].
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
Michael DeHaan <[email protected]>
CTO, AnsibleWorks, Inc.
http://www.ansibleworks.com/

-- 
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].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to