I see what you want, but it isn't possible. From each host's perspective,
the `group_comment` variable will have the value as set in whichever one of
that host's groups where the group name sorts last, as that's the last one
loaded. So it is consistent, just not a solution to your problem.
You can work around it if you want to go to the trouble. Say you have
groups named gr1, gr2, gr3, etc. Within each group, put that group's
comment in a variable called `group_comment_<group_name>`, i.e.
`group_comment_gr1`, `group_comment_gr2`, `group_comment_gr3`, etc.
Then do something like the following to create a `group_comments` list for
each host.
- name: Create a list of group_comment_* variable names
ansible.builtin.set_fact:
# Two different ways to do it.
group_comment_names_a: "{{ ['group_comment_'] |
product(vars.group_names) | map('join') | flatten }}"
group_comment_names_b: "{{ query('ansible.builtin.varnames',
'^group_comment_.+') }}"
- name: Join group_comment_* into a list
ansible.builtin.set_fact:
group_comments: |
{% set gclist = [] %}
{% for gcn in group_comment_names_a %}
{% set _ = gclist.append(query('ansible.builtin.vars', gcn)) %}
{% endfor %}{{ gclist | flatten }}
I tried lots of different ways to invoke `ansible.builtin.vars` on a list
using "normal" jinja pipelines before resorting to the old-school for loop
above. If somebody knows how to do it I'd love to see your solution.
Anyway, you end up with each host having a list containing each comment
from each of its groups. But I somehow doubt that solves your problem
either. It's still a host-centric view of your group comments.
On Wednesday, February 8, 2023 at 3:21:42 AM UTC-5
[email protected] wrote:
> Hello all,
> i use Ansible to document and manage a small network of computers and
> other devices. So I bulit an inventory with several groups and hosts and
> defined a bunch of variables on each level to describe what i want to
> achieve, Each host and each group has for example a variable named
> `host_comment` or `group_comment` respectively.
>
> This is very useful on the host level, but i want to show the group
> variables separately in a loop over all groups.
>
> I can show a group variable via `hostvars[host].group_comment`but because
> every hosts belongs to several groups i cannot control, whicht name is
> displayed.
>
> This template
> ```
> {% for group in groups if group != 'ungrouped' %}
> {% for host in groups[group] %}
> {% if loop.first %}{% set hvh = hostvars[host] %}
> {{ group }} {{ hvh.group_comment }}
> {% endif %}
> {% endfor %}
> {% endfor %}
> ```
>
> gives
> ```
> all Nicht per Ansible erreichbare Maschinen, aber sie sollen durch
> (Meta-) Variablen doukmentiert werden
> lxc_container Alle Hosts in FM 174 (soweit Ansible-fähig)
> fm174 Alle Hosts in FM 174 (soweit Ansible-fähig)
> hetzner Alle Hosts bei Hetzner (cloud)
> controllable Alle Hosts in FM 174 (soweit Ansible-fähig)
> virtual_FM174 Virtuelle Ansible Hosts in FM174
> virtual_ansible_hosts Nicht per Ansible erreichbare Maschinen, aber
> sie sollen durch (Meta-) Variablen doukmentiert werden
>
> ```
> I think it is visible that this result makes no sense.
>
> Can anyone help here ?
>
> Thanks a lot !
>
> Norbert
>
>
>
--
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/694d03f5-c1f0-4745-bcc1-2eb97ab9ac20n%40googlegroups.com.