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.