You also can use json_query.
---
- name: test
hosts: localhost
become: no
gather_facts: no
vars:
postgres_create_users:
- {role: user1, password: password1}
- {role: user2, password: password2}
- {role: user3, password: password3}
- {role: user4, password: password4}
my_user: user4
tasks:
- debug:
msg: "{{ (postgres_create_users |
json_query('[?role==`'+my_user+'`]'))[0].password }}"
Note that in my jinja2 variable template in the debug statement I insert a
variable "my_user" to show that json queries can be dynamic based on a
value only known at run-time. Change the value of my_user on the command
line and see how it changes the output.
*% ansible-playbook foo.yml*
*[WARNING]: No inventory was parsed, only implicit localhost is available*
*[WARNING]: provided hosts list is empty, only localhost is available. Note
that the implicit localhost does not match **'all'*
PLAY [test]
************************************************************************************************************
TASK [debug]
***********************************************************************************************************
ok: [localhost] => {
* "msg": "password4"*
}
PLAY RECAP
*************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0
*% ansible-playbook foo.yml -e my_user=user2*
*[WARNING]: No inventory was parsed, only implicit localhost is available*
*[WARNING]: provided hosts list is empty, only localhost is available. Note
that the implicit localhost does not match **'all'*
PLAY [test]
************************************************************************************************************
TASK [debug]
***********************************************************************************************************
ok: [localhost] => {
* "msg": "password2"*
}
PLAY RECAP
*************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0
--
Walter Rowe, Chief
Infrastructure Services
Office of Information Systems Management
National Institute of Standards and Technology
United States Department of Commerce
On Tuesday, August 9, 2022 at 6:49:20 AM UTC-4 [email protected] wrote:
> On Mon, 8 Aug 2022 23:07:32 -0700 (PDT)
> "[email protected]" <[email protected]> wrote:
>
> > insights.jdbc.password={{ postgres_create_users ??? }}
>
> Create a dictionary. The best choice might be the same place the list
> *postgres_create_users* comes from. For example,
>
> shell> cat group_vars/all/postgres_create_users.yml
> postgres_create_users:
> - {role: user1, password: password1}
> - {role: user2, password: password2}
> - {role: user3, password: password3}
> - {role: user4, password: password4}
> pcu_dict: "{{ postgres_create_users|
> items2dict(key_name='role',
> value_name='password') }}"
>
> gives
>
> pcu_dict:
> user1: password1
> user2: password2
> user3: password3
> user4: password4
>
> The usage is trivial. For example, the template
>
> shell> cat templates/server.xml.j2
> insights.jdbc.password="{{ pcu_dict.user4 }}"
>
> and the playbook
>
> shell> cat pb.yml
> - hosts: localhost
> tasks:
> - debug:
> msg: "{{ lookup('template', 'server.xml.j2') }}"
>
> gives (abridged)
>
> shell> ansible-playbook pb.yml
>
> TASK [debug]
> **************************************
> ok: [localhost] => msg: |-
> insights.jdbc.password="password4"
>
> --
> Vladimir Botka
>
--
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/cbdebba3-d3b0-455d-ac16-498e773c0c4cn%40googlegroups.com.