Ansible is an amazing tool. So many creative and powerful ways to massage 
data and get what we want.
--
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 9:10:54 AM UTC-4 Richard Megginson wrote:

> 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/58f8e13d-5ec1-4e09-ba92-0b2e34bab61cn%40googlegroups.com.

Reply via email to