Thank you all so much for the responses.
On Tuesday, July 18, 2023 at 9:25:23 AM UTC-4 Rowe, Walter P. (Fed) wrote:
> Silly me .. I should re-read my own code before pressing 'send'!
>
> - name: validate filename lookup value
> assert:
> that:
> - my_var in file_table.keys()
> fail_msg: "File lookup key '{{ my_var }}' is not valid"
>
> success_msg: "File lookup key '{{ my_var }}' is valid"
>
>
> - name: do my file-based task
> debug:
>
> msg: "File name is {{file_table[my_var] }}"
>
>
> An added footnote .. keys() provides the dictionary keys in the lookup
> table as a list.
>
> vars:
> file_table:
> oracle: /apps/oracle/some/file/path
> mysql: /apps/mysql/other/path
> postgres: /apps/postgres/different/path
>
> With this dictionary, file_table.keys() returns a list of [ mysql,
> oracle, postgres ].The assert task tests my_var against that list. If
> my_var isn't one of those values, the assert task fails. If my_var is one
> of those values, the debug task prints the corresponding value associated
> with the key that my_var provides. If my_var is oracle, the debug prints
> /apps/oracle/some/file/path.
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123 <(202)%20355-4123>
>
> On Jul 18, 2023, at 9:14 AM, 'Rowe, Walter P. (Fed)' via Ansible Project <
> [email protected]> wrote:
>
> If you didn't want a default value and instead wanted to gracefully handle
> an invalid value you could do something like this:
>
> - name: validate filename lookup value
> assert:
> that:
> - my_var in file_table.keys()
> fail_msg: "File lookup key '{{ my_var }}' is not valid"
> success_msg: "File lookup key '{{ my_var }}' is valid"
>
> - name: do my file-based task
> debug:
> msg: "File name is {{ artifacts[my_var] }}"
>
> The "assert" task will fail the playbook if any of the tests fail (you
> can list more than one test).
> If all the tests pass then the playbook continues to the next task.
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123 <(202)%20355-4123>
>
> On Jul 18, 2023, at 8:51 AM, 'Rowe, Walter P. (Fed)' via Ansible Project <
> [email protected]> wrote:
>
> Todd's dictionary lookup is elegant and flexible. I'd go with that model.
> It supports any number of choices and gracefully gives a default value.
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123 <(202)%20355-4123>
>
> On Jul 17, 2023, at 10:29 PM, Todd Lewis <[email protected]> wrote:
>
> Hello, David.
>
> You could use a lookup table implemented as a simple dict. If you only
> need it in one task, you can define it in that task's vars section as I've
> done below, or farther "up" in host_vars, group_vars, etc., as long as it's
> defined somewhere. Here's a simple demo. I'm mapping colors to veggies, but
> you could map to file names or whatever. Be sure to handle the "missing"
> case.
>
> [utoddl@tango ansible]$ *cat select-artifact.yml*
> ---
> - name: Select artifact based on value
> hosts: localhost
> gather_facts: false
> tasks:
> - name: Match an artifact based on a value
> ansible.builtin.debug:
> msg: "Value {{ item }} matches artifact {{ *artifacts[item]* |
> default('!missing!') }}."
> vars:
> *artifacts:** green: cucumbers** red: tomatoes**
> purple: cabage** yellow: squash*
> loop:
> - red
> - orange
> - yellow
> - green
> - blue
> - indigo
> - violet
> [utoddl@tango ansible]$ *ansible-playbook select-artifact.yml*
>
> PLAY [Select artifact based on value]
> *********************************************************
>
> TASK [Match an artifact based on a value]
> *****************************************************
> ok: [localhost] => (item=red) => {
> "msg": "Value red matches artifact tomatoes."
> }
> ok: [localhost] => (item=orange) => {
> "msg": "Value orange matches artifact !missing!."
> }
> ok: [localhost] => (item=yellow) => {
> "msg": "Value yellow matches artifact squash."
> }
> ok: [localhost] => (item=green) => {
> "msg": "Value green matches artifact cucumbers."
> }
> ok: [localhost] => (item=blue) => {
> "msg": "Value blue matches artifact !missing!."
> }
> ok: [localhost] => (item=indigo) => {
> "msg": "Value indigo matches artifact !missing!."
> }
> ok: [localhost] => (item=violet) => {
> "msg": "Value violet matches artifact !missing!."
> }
>
> PLAY RECAP
> ************************************************************************************
> localhost : ok=1 changed=0 unreachable=0 failed=0
> skipped=0 rescued=0 ignored=0
>
> Cheers,
> --
> Todd
>
> On 7/14/23 2:00 PM, David Nadelson wrote:
>
> Hi All,
> I'm a DBA learning to use ansible to automate. I'm wondering if anyone
> can point me to docs on how to use ansible to select a file based on the
> value of a variable. i.e. if variable=x than choose 1.txt if variable=y
> then choose 2.txt.
>
> Thanks,
>
> David
>
>
>
> --
> 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/2927e3e7-9dae-26e1-d51c-e42a3acd6607%40gmail.com
>
> <https://groups.google.com/d/msgid/ansible-project/2927e3e7-9dae-26e1-d51c-e42a3acd6607%40gmail.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/9B6013A3-11F0-4D69-B9E6-56BAEC15EA40%40nist.gov
>
> <https://groups.google.com/d/msgid/ansible-project/9B6013A3-11F0-4D69-B9E6-56BAEC15EA40%40nist.gov?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/8EAC318D-AF10-40AE-8787-0710A5BD552F%40nist.gov
>
> <https://groups.google.com/d/msgid/ansible-project/8EAC318D-AF10-40AE-8787-0710A5BD552F%40nist.gov?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/9c2e9f41-4aab-41cc-ad88-db6539f696d5n%40googlegroups.com.