Here is a way that
* uses only ansible built-ins (note that json_query is a) in an unsupported
collection b) requires python json libraries which may not be available)
* works with every version of jinja2 (EL7 and later controller)
insights.jdbc.password={{ postgres_create_users | selectattr('role',
'match', '^user4$') | map(attribute='password') | first }}
On Tue, Aug 9, 2022 at 6:09 AM 'Walter Rowe' via Ansible Project <
[email protected]> wrote:
> 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
> <https://groups.google.com/d/msgid/ansible-project/cbdebba3-d3b0-455d-ac16-498e773c0c4cn%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/CALF5A-K13OZu6i%3Dbh8TriR8CDcPVvaOztv88QqcM%2BmBOw0E-Hw%40mail.gmail.com.