Hier sind meine Beispielcodes, Fragen ganz unten
hw.j2
:
System Total Memory : {{ ansible_memtotal_mb }}
Free Memory : {{ ansible_memfree_mb }}
System Total CPU : {{ ansible_processor_cores }}
System Virtual CPU : {{ ansible_processor_vcpus }}
Disks capacities
/dev/sda : {{ ansible_devices.sda.size }}
/dev/sdb : {{ ansible_devices.sdb.size }}
/dev/sdc : {{ ansible_devices.sdc.size }}
collecthw.yml
:
---
- name: Collect information
become: yes
hosts: clients
tasks:
- name: use template from labs/hw.j2
template:
src: hw.j2
dest: hw.{{ ansible_facts.hostname }}.txt
owner: corona
group: corona
mode: '0600'
Es funktioniert okay, aber ...
Nun sind meine Fragen:
- Wie kann man eine Schleife über alle /dev/sd* in verwalteten Knoten ausführen und ihre jeweilige Festplattengröße erfassen?
- Dies ist die Datenträgergröße. Wie sieht es mit ungenutztem Speicherplatz auf dem Datenträger aus?
Vielen Dank im Voraus an alle, die Zeit und Mühe investieren, um eine Antwort oder vielleicht einen anderen Rat zu bekommen. Bin Neuling hier xD
Antwort1
Wählen Sie beispielsweise alle Geräte außer loop*
und Anzeigegröße
- set_fact:
my_devices: "{{ ansible_devices.keys()|
reject('match', '^loop(.*)$')|
list }}"
- debug:
msg: "{{ item }} {{ ansible_devices[item].size }}"
loop: "{{ my_devices }}"
geben
msg: nvme0n1 238.47 GB
Frage 1:„Wie kann ich eine Schleife über alle /dev/sd* in verwalteten Knoten ausführen und ihre jeweilige Festplattengröße erfassen?“
A1: Ändern Sie im obigen Code diereject
filtern nachselect
select('match', '^sd(.*)$')|
und verwenden Sie die Vorlage unten
{% for dev in my_devices %}
{{ dev }}: {{ ansible_devices[dev].size }}
{% endfor %}
Frage 2:„Wie steht es mit ungenutztem Speicherplatz auf der Festplatte?“
A2: Verwenden Sie die Variable, ansible_mounts
um ungenutzten Speicherplatz anzuzeigen. Zum Beispiel
- set_fact:
my_devs: "{{ my_devs|default([]) +
[ansible_mounts|
selectattr('device', 'match', my_regex)|
list|
json_query(my_query)]|first }}"
loop: "{{ my_devices }}"
vars:
my_regex: '^(.*){{ item }}(.*)$'
my_query: '[].[device, size_total, size_available]'
- debug:
msg: "dev: {{ item.0 }}
size[MB]: {{ (item.1|int / 1000000)|int }}
free[MB]: {{ (item.2|int / 1000000)|int }}"
loop: "{{ my_devs }}"
geben
msg: 'dev: /dev/nvme0n1p6 size[MB]: 41015 free[MB]: 12677'
msg: 'dev: /dev/nvme0n1p7 size[MB]: 109899 free[MB]: 39896'
msg: 'dev: /dev/nvme0n1p2 size[MB]: 100 free[MB]: 45'
Verwenden Sie die folgende Vorlage, um ungenutzten Speicherplatz in Bytes zu speichern
{% for dev in my_devs %}
{{ dev[0] }}: {{ dev[2] }}
{% endfor %}
Antwort2
Ok, gys, ich habe endlich die Antwort gefunden. Der Standardwert ist mit der Jinja-Vorlage.
Beispielcode unten:
vi hw.j2
Festplattenkapazitäten
/dev/sda: {{ ansible_devices.sda.size|default("NONE", true) }}
/dev/sdb: {{ ansible_devices.sdb.size|default("NONE", true) }}
/dev/sdc: {{ ansible_devices.sdc.size|default("NONE", true) }}
/dev/sdz: {{ ansible_devices.sdz.size|default("NONE", true) }
client@ cat list-hw.r8s2.txt
Festplattenkapazitäten
/dev/sda: 20,00 GB
/dev/sdb: 20,00 GB
/dev/sdc: 20,00 GB
/dev/sdz: KEINE