Honestly, I try to stay away from json_query when possible, and stick to
just standard jinja2 pipelines:

"{{ (results.json.statuses|selectattr('name', 'match',
'Lucene')|list|first).isHealthy }}"

You can use a variety of tests instead of `match`, such as `search` or
`equalto`.

On Thu, Feb 15, 2018 at 4:28 PM, Tito Valentin <[email protected]>
wrote:

> I have a task that hits a url and returns the results in JSON array like
> this:
>
>
>    1.
>>
>>    "json": {
>>           "statuses": [
>>               {
>>                   "application": "JIRA",
>>                   "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:hsqlHealthCheck",
>>                   "description": "Checks if the instance is connected to
>>    an HSQL or H2 database",
>>                   "documentation": "https://confluence.atlassian.
>>    com/x/1guaEQ",
>>                    "failureReason": "You are not using an HSQL or H2
>>    embedded database with a production license.",
>>                    "healthy": true,
>>                    "id": 0,
>>                    "isHealthy": true,
>>                    "name": "Embedded database",
>>                    "severity": "undefined",
>>                    "tag": "Supported Platforms",
>>                    "time": 1518726326309
>>                },
>>                {
>>                    "application": "JIRA",
>>                    "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:eolHealthCheck",
>>                    "description": "Checks if the running version of JIRA
>>    is approaching, or has reached End of Life.",
>>                    "documentation": "https://confluence.atlassian.com/x/
>>    HjnRLg",
>>                    "failureReason": "Unable to verify the End of Life
>>    date for version '7.4.x'. The check has not been performed.",
>>                    "healthy": true,
>>                    "id": 0,
>>                    "isHealthy": true,
>>                    "name": "End of Life",
>>                    "severity": "undefined",
>>                    "tag": "Supported Platforms",
>>                    "time": 1518726326316
>>                },
>>    {
>>                    "application": "JIRA",
>>                    "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:luceneSupportHealthCheck",
>>                    "description": "Checks the state of the search index
>>    is consistent with the database.",
>>                    "documentation": "https://confluence.atlassian.com/x/
>>    9IUfL",
>>                    "failureReason": "The issue index is inconsistent
>>    with the database state.",
>>                    "healthy": false,
>>                    "id": 0,
>>                    "isHealthy": false,
>>                    "name": "Lucene",
>>                    "severity": "major",
>>                    "tag": "Indexing",
>>                    "time": 1518726326372
>>                },
>
>
> The two tasks that run looks like this:
>
> ---
>
>
> - name: check if jira indexing is required and do it
>   hosts: localhost
>   become: no
>   connection: local
>   #vars_files:
>   #  - vault.yml
>
>
>   tasks:
>     - name: Check for "Lucene" health
>       uri:
>         url: https://example.com/rest/supportHealthCheck/1.0/check/
>         method: GET
>         user: user
>         password: password
>         force_basic_auth: yes
>         body_format: json
>         return_content: yes
>         validate_certs: no
>         status_code: 200
>       register: results
>
>
>     - name: Get health result
>       debug: var=item
>       with_items: "{{results|json_query(name_Lucene_query)}}"
>       vars:
>         name_Lucene_query: "statuses.name[?name=='Lucene'].isHealthy"
>
>
> The final result looks like this:
>
>
>    1.
>>
>>    ###################
>>    ## results / output of "Check for "Lucene" health
>>
>>    TASK [Check for "Lucene" health] ******************************
>>    ************************************************************
>>    ************************************************************
>>    ****************************
>>    task path: /home/user/jiraHealth.yml:11
>>
>>
>>    "json": {
>>           "statuses": [
>>               {
>>                   "application": "JIRA",
>>                   "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:hsqlHealthCheck",
>>                   "description": "Checks if the instance is connected to
>>    an HSQL or H2 database",
>>                   "documentation": "https://confluence.atlassian.
>>    com/x/1guaEQ",
>>                    "failureReason": "You are not using an HSQL or H2
>>    embedded database with a production license.",
>>                    "healthy": true,
>>                    "id": 0,
>>                    "isHealthy": true,
>>                    "name": "Embedded database",
>>                    "severity": "undefined",
>>                    "tag": "Supported Platforms",
>>                    "time": 1518726326309
>>                },
>>                {
>>                    "application": "JIRA",
>>                    "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:eolHealthCheck",
>>                    "description": "Checks if the running version of JIRA
>>    is approaching, or has reached End of Life.",
>>                    "documentation": "https://confluence.atlassian.com/x/
>>    HjnRLg",
>>                    "failureReason": "Unable to verify the End of Life
>>    date for version '7.4.x'. The check has not been performed.",
>>                    "healthy": true,
>>                    "id": 0,
>>                    "isHealthy": true,
>>                    "name": "End of Life",
>>                    "severity": "undefined",
>>                    "tag": "Supported Platforms",
>>                    "time": 1518726326316
>>                },
>>    {
>>                    "application": "JIRA",
>>                    "completeKey": "com.atlassian.jira.plugins.jira-
>>    healthcheck-plugin:luceneSupportHealthCheck",
>>                    "description": "Checks the state of the search index
>>    is consistent with the database.",
>>                    "documentation": "https://confluence.atlassian.com/x/
>>    9IUfL",
>>                    "failureReason": "The issue index is inconsistent
>>    with the database state.",
>>                    "healthy": false,
>>                    "id": 0,
>>                    "isHealthy": false,
>>                    "name": "Lucene",
>>                    "severity": "major",
>>                    "tag": "Indexing",
>>                    "time": 1518726326372
>>                },
>>
>>    ####################
>>    ## results / output of "Get health result
>>
>>    TASK [Get health result] ******************************
>>    ************************************************************
>>    ************************************************************
>>    ************************************
>>    task path: /home/user/jiraHealth.yml:25
>>    ok: [localhost] => (item=) => {
>>       "changed": false,
>>       "item": ""
>>    }
>
>
> The issue I am having is that my second task is not storing the result I
> am looking for. What I am trying to do is from all of the data structure, I
> want to find the one that has the key named *name *with the value of
> *Lucene* and for that data structure, give me the result of *isHealthy* so
> that I can use that result to run a third task. As you can see from the
> output of the data, *isHealthy *is *false* but my second task is not
> storing that value in *item*. What am I doing wrong here with my filter?
> Basically, I want to create and run a third task that is like this based on
> the *isHealthy *value:
>
> - name: Reindex db
>   command: runthis
>   when: "{{ name_Lucene_query }}" == false
>
>
> ...but I can't get to that third task to run yet until my second task gets
> the value I am looking for. Any help is greatly appreciated.
>
> --
> 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/ff35e970-8a2c-427b-b3eb-ea570e1c8931%40googlegroups.
> com
> <https://groups.google.com/d/msgid/ansible-project/ff35e970-8a2c-427b-b3eb-ea570e1c8931%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Matt Martz
@sivel
sivel.net

-- 
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/CAD8N0v9-1NmYV1ZfYvvRRgaOkXC%2BkLa9JuOZmzocCmZjAy-ENg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to