Hi,
I just started playing around with ansible and tried to achieve a simple operations task with it:
Iterate over all nodes of my Xen-Cluster – get free_memory of every node and sum up those values.
next step would be making a decision e.g. spawning a new VM without overprovisioning the cluster.
So I wrote a simple module which collects “xm info” values as ansible_facts. This was easy…
Next step: write a playbook which sums up one of the collected fact (free_memory) – here I got stuck and have no more ideas how to solve this…
This is a not working idea:
vim:ft=ansible:
Hi Ulrich
How about a ‘for’ loop (in Jinja2) contained as a parameter to the set_fact module, iterating the facts you gathered as presented in the {{ hostvars }}
magic variable?
Regards
Tom
for loops in Jinja2 can’t be used (with any definition of sanity) in Ansible playbooks.
They can be used in templates used by the template module.
Let’s step back a moment…
Can you remove the recursive reference and just call it “actual_free_mem” or something, and see where you are from there.
Hi,
Many thanks for these ideas, since this posting was held back for moderation (it was my first one in this group) I asked the question on irc channel and got the tip: simply write a filter to collect the necessary data to a list which can be summed up.“ktosiek” from irc channel wrote me the start of a filter which I modified to solve my problem
this is the Filter:
def multiget(dictionary, keys):
return [int(dictionary[k][‘xm_infos’][‘free_memory’]) for k in keys]
which can then be used in a playbook like this:
- name: show the sum
debug: msg=“{{ hostvars | multiget(keys=groups.Cluster)|sum }}”
The first Idea was to have the filter more generally to use it like this:
debug: msg=“{{ hostvars | multiget(keys=groups.Cluster)|sum(attribute=xm_infos.free_memory) }}”
But the values inside the list must be casted to int and I had no other Idea than to do this inside the generation of the list.
Cheers
Ulli
PS: I like ansible more and more especially the really cool and helpfull community ;-D