Sure. Here's a complete example where the debug task's output msg
contains exactly what I want. However, instead of each item being a
3-element list of strings, I want to pass in a single string, and use
that string in various ways within the msg: expressions to accomplish
the same thing.
To be clear: as presented below, this problem isn't worth solving. After
all, there's the playbook down below already! But that's not the point.
The point is to understand effective /run-time/ techniques to build
strings containing Jinja2 expressions and have them evaluated.
("Templated" I guess is the verb rather than "evaluated," but that feels
backwards. In my brain, "to template" means to examine a sufficiently
large set of outputs and create a template adequate to reproduce those
outputs from reasonable inputs. But I digress.)
Apparently it's possible to write such strings to a file and use
lookup('template',tmpfilename), but there doesn't seem to be the
equivalent of lookup('template',jinja2_expression_string). Not that I
have found anyway.
[utoddl@tango ansible]$*cat deferred.yml*
---
# deferred.yml
- name: Deferred evaluation demo
hosts: localhost
gather_facts: false
tasks:
- name: Evaluate booleanness of various expressions
ansible.builtin.debug:
msg:
- '{{ item.0 }}'
- '{{ item.1 }}'
- '{{ item.2 }}'
loop:
- [ "0",
"{{ 0 }}",
"{{ 0 | bool }}"]
- [ "1",
"{{ 1 }}",
"{{ 1 | bool }}"]
- [ "2",
"{{ 2 }}",
"{{ 2 | bool }}"]
- [ "['aa', 'bb', 'cc'] | intersect(['bb', 'cc'])",
"{{ ['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) }}",
"{{ ['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | bool }}"]
- [ "['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | length > 0",
"{{ ['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | length > 0 }}",
"{{ ['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | length > 0 | bool
}}"]
[utoddl@tango ansible]$*ansible-playbook deferred.yml*
PLAY [Deferred evaluation demo]
*************************************************************************
TASK [Evaluate booleanness of various expressions]
******************************************************
ok: [localhost] => (item=['0', '0', False]) => {
"msg": [
"0",
"0",
false
]
}
ok: [localhost] => (item=['1', '1', True]) => {
"msg": [
"1",
"1",
true
]
}
ok: [localhost] => (item=['2', '2', False]) => {
"msg": [
"2",
"2",
false
]
}
ok: [localhost] => (item=["['aa', 'bb', 'cc'] | intersect(['bb', 'cc'])", ['bb',
'cc'], False]) => {
"msg": [
"['aa', 'bb', 'cc'] | intersect(['bb', 'cc'])",
[
"bb",
"cc"
],
false
]
}
ok: [localhost] => (item=["['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | length >
0", True, True]) => {
"msg": [
"['aa', 'bb', 'cc'] | intersect(['bb', 'cc']) | length > 0",
true,
true
]
}
PLAY RECAP
**********************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0
On 7/27/23 6:03 PM, Vladimir Botka wrote:
post expected result
--
Todd
--
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/ce2582b2-add4-5806-8523-d44ef7f1bcb9%40gmail.com.