Having difficulty using a generator? object?

1,898 views
Skip to first unread message

J. Norment

unread,
Apr 4, 2016, 10:16:13 PM4/4/16
to Ansible Project
Would like to be able to check contents of json.items.*.labels[*] and json.items.*.labels[*].value from json below:

I'm unsure how to get the contents of the generator from ansible / jinja2.

- name: Test json
  debug: "msg={{ json.items|map(attribute='metadata') }}"

$ ansible-playbook -i inv/dev k8s-redis.yml --extra-vars "@test-var.json"

Gives me:

TASK [k8s-redis : Test json] ***************************************************
ok: [aus-ared-dev-00] => {
    "msg": "<generator object do_map at 0x224de60>"
}

This is the json:

{"json": {
    "apiVersion": "v1",
    "items": [
                {
                    "metadata": {
                        "creationTimestamp": "2016-03-22T18:18:48Z",
                        "labels": {
                            "kubernetes.io/hostname": "aus-akn-dev-00.q2dc.local"
                        },
                        "name": "aus-akn-dev-00.q2dc.local",
                        "resourceVersion": "557645",
                        "selfLink": "/api/v1/nodes/aus-akn-dev-00.q2dc.local",
                        "uid": "85b7ae17-f05a-11e5-b8a3-005056bc5b54"
                    }
                },
                {
                    "metadata": {
                        "creationTimestamp": "2016-03-23T19:49:22Z",
                        "labels": {
                            "kubernetes.io/hostname": "aus-akn-dev-01.q2dc.local"
                        },
                        "name": "aus-akn-dev-01.q2dc.local",
                        "resourceVersion": "557644",
                        "selfLink": "/api/v1/nodes/aus-akn-dev-01.q2dc.local",
                        "uid": "57306016-f130-11e5-975f-005056bc5b54"
                    }
                }
             ]
}}

I've tried |to_json, |from_json, |list, combinations of the preceding, and even building custom filters to try to work with the generator object directly.


Matt Martz

unread,
Apr 4, 2016, 10:50:34 PM4/4/16
to ansible...@googlegroups.com
There are likely a few problems.  The first is that `items` has a naming collision with the .items() method of a python dictionary, so you need to use `json['items']` instead.

After that, you will also likely need to use the |list filter too.  So something like:

json['items']|map(attribute='metadata')|list

--
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 ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/680e985c-c364-4c23-9223-e210cb00c9da%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Matt Martz
@sivel
sivel.net
Reply all
Reply to author
Forward
0 new messages