Supprimer un conteneur OpenStack Swift et tous ses objets

04 novembre 2019

Une petite note qui pourrait éventuellement servir à d’autres dans le même cas. J’ai un conteneur de stockage d’objets sur le Public Cloud OVH avec plusieurs téraoctets de données que j’ai besoin de supprimer. Sauf que via l’interface je ne peux pas le faire, car il faut d’abord supprimer toutes ses données, et ça prend énormément de ressources au point de rendre mon navigateur inutilisable, en plus de prendre énormément de temps.

Du coup, comme pour tous les problèmes liés à une interface, la solution est l’utilisation de la ligne de commande. On va donc utiliser le client python openstackclient, il est installable via pip ou dans les dépôts Debian sous le nom de python3-openstackclient. Et dans le l’interface de gestion des utilisateurs du projet Public Cloud OVH, on peut télécharger le fichier RC avec les informations d’authentification.

$ export OS_AUTH_URL=https://auth.cloud.ovh.net/v2.0/
$ export OS_IDENTITY_API_VERSION=2
$ export OS_TENANT_ID=******
$ export OS_TENANT_NAME="******"
$ export OS_USERNAME="******"
$ export OS_PASSWORD="******"
$ export OS_REGION_NAME="GRA1"
$ openstack container delete monconteneur
Conflict (HTTP 409) (Request-ID: txc504d5d75e734666bfd6d-**********)

Naïvement je me suis dit qu’en ligne de commande on pourrait simplement supprimer le conteneur entier, sauf que non, on se mange une erreur 409 qui à priori signifie qu’on ne peut pas supprimer un conteneur qui n’est pas vide.

$ openstack object list monconteneur --format value --all | xargs openstack object delete monconteneur
$ openstack container delete monconteneur

Voilà qui devrait résoudre le problème. Avec cette commande on liste tous les objets au format brut, afin de pouvoir les passer en argument, via xargs, à la commande qui supprime les objets individuellement. Ça prend toujours énormément de temps, mais quasiment aucune ressource. Il n’y a plus qu’à laisser tourner dans un tmux en arrière plan.

Mise à jour 05/11/2019 : Il s’avère que même avec l’argument --all la commande ne peut en lister que 10 000 objets au maximum. J’ai donc terminé avec le script suivant :

#!/usr/bin/bash

export OS_AUTH_URL="https://auth.cloud.ovh.net/v2.0/"
export OS_IDENTITY_API_VERSION="2"
export OS_TENANT_ID="******"
export OS_TENANT_NAME="******"
export OS_USERNAME="******"
export OS_PASSWORD="******"
export OS_REGION_NAME="GRA1"

CT_NAME="backup"

openstack object list $CT_NAME --format value --all > /tmp/objects.txt
while [[ $(wc -l /tmp/objects.txt) > 0 ]]; do
    for object in $(cat /tmp/objects.txt); do
        echo deleting: $object
        openstack object delete $CT_NAME $object
    done
    openstack object list $CT_NAME --format value --all > /tmp/objects.txt
done

rm -rf /tmp/objects.txt

openstack container delete $CT_NAME

Mise à jour 07/11/2019 : Bon ça prend encore trop de temps via le script, à priori avec cette méthode pour supprimer 2 000 000 d’objets ça prendrait environ 1 mois. En cherchant un peu j’ai trouvé le paquet client swift (python3-swiftclient pour le paquet Debian) qui permet vraisemblablement d’aller plus vite :

$ export OS_AUTH_URL=https://auth.cloud.ovh.net/v2.0/
$ export OS_IDENTITY_API_VERSION=2
$ export OS_TENANT_ID=******
$ export OS_TENANT_NAME="******"
$ export OS_USERNAME="******"
$ export OS_PASSWORD="******"
$ export OS_REGION_NAME="GRA1"
$ swift delete monconteneur

Commenter
Articles de blogs que je lis

40 ans de GNU

40 ans de GNU Richard Stallman ne voulait pas changer le monde. Il ne voulait pas se battre contre les moulins à vent. Il ne voulait pas réinventer la roue. Richard Stallman voulait simplement retrouver ses amis, sa communauté. Pour ce jeune homme barbu et …
Ploum.net · 27 Sep 2023

La blog­chain

Avec les réseaux sociaux, les petits espaces person­nels inter­con­nec­tés qu’é­taient les blogs ont peu à peu disparu du paysage. Il en reste, mais les liens ne sont plus aussi forts. À la grande époque il était fréquent d’avoir des blogroll. sur un coin de c…
Carnet de notes · 8 Sep 2023

#63 : Comment parler du vivant pour mieux l’appréhender

Baptiste Morizot est philosophe, maître de conférences à Aix-Marseille Université et auteur de plusieurs ouvrages sur les relations entre l'humain et le reste du vivant (Les Diplomates, Sur la piste animale, Manières d'être vivant…). En avril dern…
Nourritures terrestres · 13 Aug 2023