Wie löscht man bei Elasticsearch alle Snapshots per Python-Skript?
In einem aktuellen Projekt, in dem wir für ein weiteres Land das Digital-Asset-Management (DAM) System ausrollen wollten, ging es genau um dieses Thema.
Das DAM System benutzt hierbei Elasticsearch - in unserem Fall in der Version 2.4 - als NoSQL Datenbank und für die Suche über die Metadaten der Assets.
Ein Studium der Dokumentation ergab, dass man per REST API immer nur einen Snapshot löschen kann und etwaig vorhandene Plug-Ins konnten wir nicht installieren, da das DAM in einem Docker-Container läuft.
Zuerst muss man mit diesem Befehl die Namen aller Snapshot-Repositories ausgeben :
curl localhost:9200/_snapshot/_all?pretty=true
Und danach führt man folgendes Python-Skript aus, wobei --snapshot_repo-name-- mit dem Ergebnis der obigen Abfrage ersetzt wird:
import urllib2, json
url = "http://localhost:9200/_snapshot/--snapshot_repo-name--/_all"
response = urllib2.urlopen(url)
json_resp = json.loads(response.read())
for json_item in json_resp["snapshots"]:
del_url = "http://localhost:9200/_snapshot/--snapshot_repo-name--/%s" % (json_item["snapshot"])
print(del_url)
request = urllib2.Request(del_url)
request.get_method = lambda: 'DELETE'
response = urllib2.urlopen(request)
Das Skript basiert auf Python 2.7, muss keine Module installieren und lief deshalb selbst innerhalb des Docker-Containers.