finding a phrase through ansible script

11 views
Skip to first unread message

Bishwajit Samanta

unread,
Apr 11, 2018, 11:24:15 AM4/11/18
to Ansible Project

i am having a problem in finding solution. I have a piece of file which contains data in below format (json type with quotes)::-

hostinfo:
  'host001':
    ip: x.x.x.x
    hostclass: 'puppet'
  'host002':
    ip: y.y.y.y
    hostclass: 'ess'
  'host003':
    ip: z.z.z.z
    hostclass: 'mdb'

Now my task is to find out the hostname of the system belong to hostclass 'ess' , which in this case the answer in host002. I have to write an ansible script to find out the result. Can anyone help me in finding out, or any idea to approach for the problem.

Issue Type:: Finding a phrase through ansible
Ansible Version:: Ansible 2.4.0
Component Name:: It looks similar to json type file.



Matt Martz

unread,
Apr 11, 2018, 11:31:58 AM4/11/18
to ansible...@googlegroups.com
The following task will find that:

    - debug:
        msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"

That takes the `hostinfo` dict, turns it into a list of tuples, selects where `hostclass` equals `ess`, gets the first result (there should only be one here), and then gets the first element.

If you don't have jinja2 version with the `equalto` test, you can replace that with `search` or `match`

It outputs:

TASK [debug] *********************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "host002"
}

--
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-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/f0e5742d-cdcd-473d-854d-decff5b2b283%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Matt Martz
@sivel
sivel.net

Bishwajit Samanta

unread,
Apr 11, 2018, 12:06:13 PM4/11/18
to Ansible Project
I am glad you replied so fast, but sorry to say i am not an ansible expert . I am just a beginner . I just typed the code. Can you help me in understanding  where i am not correct.

---

- hosts: devops

  tasks:
    - debug:
       msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"

~
~

Bishwajit Samanta

unread,
Apr 11, 2018, 12:47:55 PM4/11/18
to Ansible Project
@Matt Martz : I am sorry to ask silly questions, regarding ansible as by seeing the small piece of code, i can understand you must be an ansible expert. If possible you can help me in my problem explanation a bit. 

And any such links for learning you want to refer, please refer me. As i googled selectattr but first|first parameter which you have passed i am not getting any good document. If you can help me in referring such, it would be of very nice help.

Matt Martz

unread,
Apr 11, 2018, 12:56:47 PM4/11/18
to ansible...@googlegroups.com
Templating in Ansible is handled by Jinja2.  You can find documentation on Jinja2 at http://jinja.pocoo.org/docs/dev/templates/

For the `first` filter specifically: http://jinja.pocoo.org/docs/dev/templates/#first

--
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-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Bishwajit Samanta

unread,
Apr 11, 2018, 1:35:06 PM4/11/18
to Ansible Project
Hi, thanks for sharing the docs link. In the meanwhile i am not able to go in the right direction of solving the problem. so far what i have done is ::

1. converted the text file to json through python.
2. write some ansible codes, which in return it is dumping the contents but i am not able to get the thing i want.



---

- hosts: devops
  gather_facts: no
  vars:
    contents: "{{ lookup('file', '/root/ansible/sample_1.json') | from_json }}"

  tasks:

    - debug:
      msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"

    - debug:
       msg: "{{ contents }}"



Can you guide in my problem please.. 
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.
Reply all
Reply to author
Forward
0 new messages