---
- hosts: localhost
tasks:
- set_fact:
my_data: "{{ lookup('file', 'data.json') | from_json }}"
- debug:
msg: "{{ my_data.products | json_query(query) }}"
vars:
query: "[?(@.chartName == 'workload-manager')]"
On Wed, Sep 9, 2020 at 1:40 PM Stefan Hornburg (Racke) <[email protected]>
wrote:
> On 9/9/20 9:45 AM, [email protected] wrote:
> > Abhijeet,
> >
> > thanks for that, it looks interesting, but I would like to try to see if
> there is a solution with as minimal extra
> > libraries needed. Trying to keep it within the Ansible sphere & use
> Ansible/Jinja2 filters or regex as much as possible.
> > It may not be possible, I don't know, but the end customer wants to keep
> the coding within Ansible as much as possible &
> > not be reliant on addition packages. Not an easy task but I do need to
> find out.
> >
>
> You can use the json_query filter, which uses the jmespath query language.
>
> I'm sure you can find examples with the search engine of your choice.
>
> Regards
> Racke
>
> >
> >
> > On Wednesday, 9 September 2020 at 08:38:59 UTC+1 Abhijeet Kasurde wrote:
> >
> > You can read about
> >
> > * jmespath - https://jmespath.org/
> > * Use jsonpath - https://jsonpath.com, you may end up something
> like this
> >
> > $.products[?(@.chartName == 'workload-manager')]
> >
> > You can take this free course -
> https://kodekloud.com/courses/enrolled/635226 to know more about JSON
> Path.
> >
> >
> > On Wed, Sep 9, 2020 at 12:55 PM [email protected] <
> [email protected]> wrote:
> >
> > Tom,
> >
> > thanks for that reply, but it is way beyond my current
> experience.
> >
> > but looking at your reply & what i am looking for it doesn't
> seem to match.
> >
> > Under 'products' you can see there are several "groups" using
> the same keys but potentially different values,
> > with nothing unique that i can use to show the difference
> between them, other the the values for each key. I
> > want to understand if I can 'sort' through the response body,
> find the required 'name' & associate the correct
> > 'status.state' to it.
> >
> > Your example only shows one 'group' with clear associations, my
> response body has multiple similar keys but
> > different values.
> >
> > Thanks for the response though, but I can't see how it would
> help me.
> >
> >
> >
> > On Wednesday, 9 September 2020 at 08:14:32 UTC+1
> [email protected] wrote:
> >
> > HI
> >
> > from programming view, you should decode json string to a
> data structure (hash), then access to the hash.
> >
> > my test:
> >
> > $ cat a.json
> >
> > {"a":123,"b":456,"c":789}
> >
> >
> > $ perl -MJSON -le 'open
> FD,"a.json";$str=<FD>;$hash=JSON->new->decode($str);print $hash->{c}'
> >
> > 789
> >
> >
> > Thanks.
> >
> >
> >
> >
> >
> > On Wed, Sep 9, 2020 at 2:59 PM [email protected] <
> [email protected]> wrote:
> >
> > Morning all,
> >
> > have had this question from a co-worker & not managed to
> work out how do do it. Any help is greatly
> > appreciated as I can see this coming up several times in
> the future as well.
> >
> > We have the following response body
> >
> > {
> >
> > "products": [
> >
> > {
> >
> > "chartName": "action-orchestrator",
> >
> > "installTime": 1599482114,
> >
> > "modifiedTime": 1599482114,
> >
> > "name": "Action Orchestrator",
> >
> > "revision": 1,
> >
> > "status": {
> >
> > "message": "Product is ready",
> >
> > "progressPercentage": 100,
> >
> > "state": "running"
> >
> > },
> >
> > "version": [
> >
> > "5.2.0"
> >
> > ]
> >
> > },
> >
> > {
> >
> > "chartName": "cloudcenter-shared",
> >
> > "installTime": 1599483017,
> >
> > "modifiedTime": 1599483017,
> >
> > "name": "cloudcenter-shared",
> >
> > "revision": 1,
> >
> > "status": {
> >
> > "message": "Product is ready",
> >
> > "progressPercentage": 100,
> >
> > "state": "running"
> >
> > },
> >
> > "version": [
> >
> > "5.4.0"
> >
> > ]
> >
> > },
> >
> > {
> >
> > "chartName": "common-framework",
> >
> > "installTime": 1599469174,
> >
> > "modifiedTime": 1599469174,
> >
> > "name": "Suite Admin",
> >
> > "revision": 1,
> >
> > "status": {
> >
> > "message": "Product is ready",
> >
> > "progressPercentage": 100,
> >
> > "state": "running"
> >
> > },
> >
> > "version": [
> >
> > "5.2.0"
> >
> > ]
> >
> > },
> >
> > {
> >
> > "chartName": "workload-manager",
> >
> > "installTime": 1599483064,
> >
> > "modifiedTime": 1599483064,
> >
> > "name": "Workload Manager",
> >
> > "revision": 1,
> >
> > "status": {
> >
> > "message": "Waiting for product to be
> ready",
> >
> > "progressPercentage": 67,
> >
> > "state": "creating"
> >
> > },
> >
> > "version": [
> >
> > "5.4.0"
> >
> > ]
> >
> > }
> >
> > ],
> >
> > "status": {
> >
> > "message": "Product install success",
> >
> > "progressPercentage": 100,
> >
> > "state": "running"
> >
> > }
> >
> > }
> >
> >
> >
> > What we need to do is search through 'products', & check
> that the 'status.state' is 'running' for a
> > specific 'name', in our case 'Workload Manager'
> >
> > I can't work out how to provide the search, with the
> expected result for the co-wokrer to use with an
> > 'until' module.
> >
> > The idea is to only execute the next task, when the
> 'status.state' changes to 'running'.
> >
> >
> > Hope this makes sense!
> >
> >
> > Regards
> >
> > --
> > 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 view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/ansible-project/14ccb917-6782-48c5-9d9d-89dafb336d47n%40googlegroups.com
> > <
> https://groups.google.com/d/msgid/ansible-project/14ccb917-6782-48c5-9d9d-89dafb336d47n%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
> >
> > --
> > 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 view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/ansible-project/c41801fe-83b3-4f23-9cda-6578c1559321n%40googlegroups.com
> > <
> https://groups.google.com/d/msgid/ansible-project/c41801fe-83b3-4f23-9cda-6578c1559321n%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
> >
> >
> >
> > --
> > Thanks,
> > Abhijeet Kasurde
> >
> > --
> > 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] <mailto:
> [email protected]>.
> > To view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/ansible-project/d54ead7e-e067-4562-a162-c406006eb3cbn%40googlegroups.com
> > <
> https://groups.google.com/d/msgid/ansible-project/d54ead7e-e067-4562-a162-c406006eb3cbn%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
>
>
> --
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration. Provisioning with Ansible.
>
> --
> 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 view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/32a8f7bc-ce9b-5d41-cc65-9d4fb383f5be%40linuxia.de
> .
>
--
Thanks,
Abhijeet Kasurde
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CAFwWkHrha%3DxPRRQJCSL_1eUbU%3DQW2%3DBpN2%3DfkHc3sKD_Fhnhpg%40mail.gmail.com.