问题
I have to check different hardware and configurations elements on Linux machines using ansible, and I am not sure at all about how to do it (RAM, disk space, DNS, CPU...), I've understood that I can find nearly all I want in the ansible facts, but I do not understand how I can use it.
For example, I have to check if the RAM amount is at least of 4GB and have an alarm if not, so I tried many things, and... nothing works.
Here is an example of what I tried.
- hosts: client
remote_user: user
tasks:
- debug: var=ansible_memory_mb
- debug: msg="total RAM is {{ ansible_memory_mb.real.total }}"
- fail: msg="not enough RAM"t
- when: {{ ansible_memory_mb.real.total }} < 4096
Could you tell me how it works ? and maybe there is a better way to do what I want using Ansible ?
Thank you for your answer.
回答1:
There are a few things wrong with the snippet you posted.
Your indentation is off.
tasksneeds to be at the same indentation level ashosts.The
whencondition needs to be part of thefailtask block, not a separate list item.In general, you do not need to use
{{ ... }}in awhencondition, the entire expression will be treated as a Jinja template.
Try this:
- hosts: client
remote_user: user
tasks:
- debug: var=ansible_memory_mb
- debug: msg="total RAM is {{ ansible_memory_mb.real.total }}"
- fail: msg="not enough RAM"
when: ansible_memory_mb.real.total < 4096
You can also use the assert module to check a condition or list of conditions.
- assert:
that:
- ansible_memory_mb.real.total >= 4096
- some other condition
- ...
来源:https://stackoverflow.com/questions/38033996/ansible-and-hardware-checks