2016-09-15 2 views
0

Anstatt die Ansible Module shell oder command zu verwenden, versuche ich die find module zu verwenden, um alte Backup-Verzeichnisse zu löschen und nur die neuesten n Backups zu behalten. Derzeit ich den folgenden Code verwenden, um eine Liste aller Backup-Verzeichnisse zu erhalten (so dass in einem zweiten Schritt, den ich die unerwünschten gelöscht haben könnte):Wie kann man die Ergebnisse des Moduls Ansible find eingrenzen?

- find: 
    paths: "/opt/" 
    patterns: "backup_*" 
    file_type: "directory" 

Leider habe ich sehe keinen Weg hinunter einzuengen die resultierende Liste von Verzeichnissen ...

  1. Das Suchmodul scheint Sortierung nicht zu unterstützen ... kann das in irgendeiner Weise gemacht werden?
  2. Bietet Ansible jede Möglichkeit, eine JSON-Liste zu manipulieren ... nur n Elemente in einer Liste zu behalten und alle anderen zu entfernen?

Hat jemand das Suchmodul für ähnliche Zwecke erfolgreich verwendet?

Antwort

1

Sie können mit sort Filter sortieren

Sie ersten N Elemente einer Liste mit [:N] Syntax Aufgabe kann.

- find: 
    path: "/tmp/" 
    pattern: "file*" 
    register: my_files 

- debug: msg="{{(my_files.files | sort(attribute='ctime'))[:-3] | map(attribute='path') | list }}" 

Dateien nach ctime, nehmen Sie alle, aber letzten drei Elemente, nehmen Sie eine Liste nur path Attribut und bilden.

+0

Sind diese Befehle 'sort',' map' und 'list' irgendwo dokumentiert? Ich bekomme einen Fehler "" Template-Fehler beim Templating String: kein Filter mit dem Namen 'map' " – dokaspar

+0

auch, das' [: -3] 'tut wirklich nichts ... immer wird die vollständige Liste gedruckt – dokaspar

+0

ja, http: //jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters und http://docs.ansible.com/ansible/playbooks_filters.html –

Verwandte Themen