Wie sammelt man mithilfe von Ansible-Fakten selektive Festplatten und ungenutzten Speicherplatz?

Wie sammelt man mithilfe von Ansible-Fakten selektive Festplatten und ungenutzten Speicherplatz?

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:

  1. Wie kann man eine Schleife über alle /dev/sd* in verwalteten Knoten ausführen und ihre jeweilige Festplattengröße erfassen?
  2. 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 dierejectfiltern 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_mountsum 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

verwandte Informationen