2017-09-22 1 views
0

ansible_mounts ist ein Array von Wörterbüchern, wie so -Simplest nicht-Schale Weise eingestellt Mount-Punkte, um zu bestätigen existieren mit benutzerdefinierten Mindestgröße für jede

"ansible_mounts": [ 
     { 
      "device": "/dev/mapper/vg_centos67template-lv_root", 
      "fstype": "ext4", 
      "mount": "/", 
      "options": "rw", 
      "size_available": 8806977536, 
      "size_total": 37458894848, 
      "uuid": "N/A" 
     }, 
     { 
      "device": "/dev/sda1", 
      "fstype": "ext4", 
      "mount": "/boot", 
      "options": "rw", 
      "size_available": 369055744, 
      "size_total": 499355648, 
      "uuid": "N/A" 
     }, 
    ], 

I müssen eine Reihe von spezifischen bestätigen Einhängepunkte existieren mit minimalen Größen. Ich habe die Kontrolle über die Datenstruktur für diese, aber für jetzt haben sie ähnlich strukturiert -

requiredMounts: 
- { mount: /tmp,  size_min: 2147483648, } 
- { mount: /dev/shm, size_min: 204010946560, } 

Ich hatte gehofft, einen selectattr() verwenden Filter wie ein grep, aber es ist nicht verfügbar.

fatal: [tstServer]: FEHLGESCHLAGEN! => {"failed": true, "msg": "Template Fehler beim Templating String: Kein Filter namens 'selectattr'. String: {{ansible_mounts | selectattr ('mount', 'equalto', item.mount)}}" }

Verwendung von jinja 2.6. Keine Ahnung, warum selectattr() nicht da ist.
(Das ist jenkins Ausgang, wenn jemand kümmert.)

Glückliche zu verwenden, wenn, scheitern, assert, with_items, with_nested, kombinieren() und/oder irgend etwas anderes ; habe einfach nicht die richtige Kombination gefunden, um es ordentlich zu machen. Ich würde es lieber nicht ein Dutzend Schritte nehmen - einer wäre ideal.

Vorschläge?

Nachtrag: Ich kann Mount bestätigen Punkte ziemlich leicht in einem Schritt mit einem fail: ... when: not item.mount|is_mount

... was interessant ist, denn während /dev/shm zeigt als Mount-Punkt auf diese Weise (und von Befehl wie df & mount) Es ist nicht in ansible_mounts enthalten.

Das bedeutet, ich kann nicht einfach ansible_mounts verwenden, um Dateigrößen in einem separaten with_nested für /dev/shm zu überprüfen. Das macht mich zu einem traurigen Panda.

Weitere Nachtrag:

Stellt sich heraus, ich habe einen Punkt zu prüfen, montieren (/ tmp), die im Allgemeinen zur Verfügung über das übliche Dateisystem ist - beste Option ansible_mounts! - eine (/ dev/shm), die tempfs ist - am einfachsten scheint df zu sein, die auch mit/tmp umgehen kann - und eine Menge, die oracle verwaltet, so dass sie nur über fdisk verfügbar sind.

Am Ende stellt sich heraus, dass ich mehr als ein Dutzend Laufwerke pro System überprüfen muss, aber das/tmp ist das einzig verfügbare für ansible_mounts. Das gesagt, meine Frage wird so strittig, wie ich es gefragt habe ...

Danke für die Eingabe.

Antwort

0

Warum nicht aktualisieren Jinja2?

Vom documentation:

selectattr() Neu in der Version 2.7.

+0

Versucht, unter verschiedenen anderen Bemühungen. Habe in dieser Umgebung nicht genau herausgefunden, wie. 'Anforderung bereits erfüllt: Jinja2 in/usr/lib/python2.6/site-packages/Jinja2-2.6-py2.6.egg' –

+1

' pip installieren Jinja2 == 2.8'? –

+0

Wissen Sie, ich habe mindestens eine Stunde damit verbracht, diese spezifische Syntax zu finden, und bin einfach im Kreis geblieben. Vielen Dank! :) Aber '{{ansible_mounts}}' immer noch nicht meine '/ dev/shm' mount, so muss ich einen anderen Weg finden, um die Größe zu überprüfen. :( –

0

Haben Sie eine Antwort auf den ersten Teil.

- name: testing for required mount points 
    fail: 
    msg: "{{ item.mount }} must be a mount point" 
    when: not item.mount|is_mount 
    with_items: "{{ requiredMounts }}" 

Immer noch eine harte Zeit, einen einfachen, zuverlässigen, nicht-Skript Weg zu finden Einhängepunkt Größen git, though. {{ ansible_mounts }} zeigt nicht meinen gemeinsamen Speicher /dev/shm mount, und nichts anderes gibt mir Größen.

Warum sollte es nicht einschließen, dass mount df es zeigt?

Gibt es eine andere Möglichkeit, auf Mount-Punktzuweisungen ohne Shell-Aufruf zuzugreifen?

ein kurzes Skript verwenden, das tue ich dies mit kann -

- name: check mount point space allocation 
    shell: df -B 1 {{ reqMount.mount }} | grep {{ reqMount.mount }} | { read x siz x; echo $siz; } 
    register: mountStat 

- name: Confirm mount point minimum size 
    fail: 
    msg: "mountpoint '{{ reqMount.mount }}' of {{ mountStat.stdout }} bytes must be at least {{ reqMount.size_min }} bytes." 
    when: mountStat.stdout|int < reqMount.size_min|int 

... aber ich mag es nicht, ein bisschen Scripting dass ich denke, wahrscheinlich mehrere Zeilen Kommentare haben sollten verwenden zu müssen, um erkläre es. (Sollte ich die Mühe awk zu erwähnen, macht mich schmutzig fühlen?)

auch versucht, die parted Modul, aber meine logische Bereitstellungspunkte sind Dateisystem-Verzeichnisse, und ich sehe nichts, aber df, die die Partition gibt mir einfach per dir , also gibt es keinen Grund, Schritte hinzuzufügen, wenn ich das trotzdem anrufe.

Als ein Zusatz, der Grund ansible_mounts wird nicht angezeigt /dev/shm ist wahrscheinlich, weil es ein tmpfs Mount ist. Hoffe, dass es wenigstens jemandem hilft.

Verwandte Themen