Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save BaptisteDixneuf/85dc4419a0398446d2d3 to your computer and use it in GitHub Desktop.
Save BaptisteDixneuf/85dc4419a0398446d2d3 to your computer and use it in GitHub Desktop.
OVH Public Cloud Object Storage et API OpenStack Swift

OVH Public Cloud Object Storage et API OpenStack Swift

Lien vers l'offre OVH Public Cloud Object Storage : https://www.ovh.com/fr/cloud/storage/object-storage.xml

I - Données d'identification

Pour utiliser l'API OpenStack Swift il faut récupérer des identifiants uniquement disponible dans l'interface Horizon

###1 - Créer un accès à Horizon

Dans l'espace client OVH : https://www.ovh.com/manager/cloud/login/

Se connecter à l'espace client

Cliquer sur OpenStack puis Ajouter un utilisateur.

Saisir une "Description de l'utilisateur"

Remarque: Cette description servira à reconnaître facilement l'utilisateur dans la liste créée mais ne servira pas d'identifiant de connexion. Cliquer sur "Ajouter un nouvel utilisateur"

L'utilisateur a bien été créé, conservez le mot de passe généré automatiquement précieusement, car comme indiqué il ne sera plus possible de récupérer ce mot de passe ultérieurement.

Plusieurs actions sont alors possibles:

  • Ajouter un nouvel utilisateur pour créer un utilisateur supplémentaire.
  • Retour à la liste des utilisateurs propose la liste des utilisateurs déjà créés.
  • Accéder à Horizon avec l'utilisateur créé à l'instant.

La liste des utilisateurs se présente ainsi:

Y apparaissent les noms, descriptions et une série de trois boutons pour chaque utilisateur, permettant respectivement de:

  • Accéder à horizon
  • Réinitialiser le mot de passe
  • Supprimer l'utilisateur

2- Accéder aux identifiants

On peut maintenant s'authentifier avec le couple identifiant/mot de passe créé précédemment. On se retrouve dans l'interface Horizon :

Vous pourrez ensuite vous rendre dans la partie "Accès et sécurité" puis dans l'onglet "Accès API". Vous trouverez les différents points d’accès pour la configuration des APIs.

Service => Point d'accès au service:

Vous pouvez ensuite trouver vos identifiants en téléchargeant le fichier RC d'Openstack.

##Utiliser l'API OpenStack Swift (Exemple PHP)

Liens utiles:

1 - Installing the SDK

Installer le SDK avec Composer , car cette bibliothèque a quelques dépendances :

composer require rackspace/php-opencloud

Une fois que vous avez installé la bibliothèque , vous devrez charger Composer's autoloader (qui enregistre tous les namespaces):

require 'vendor/autoload.php';

2 - Example d'utilisation

<?php

require 'vendor/autoload.php';
 
use OpenCloud\OpenStack;
 
// Authentification informations
$authUrl = 'https://auth.cloud.ovh.net/v2.0';  //Point d'accès au service Identity définit dans la partie la partie "Accès et sécurité" puis dans l'onglet "Accès API".
$username = 'xxx'; // utilisateur Horizon
$password = 'xxx'; // mot de passe Horizon 
$tenant = 'xxx'; //OS_TENANT_NAME du fichier RC OpenStack qu'on a téléchargé 
 
// Swift informations
$swiftUrl = 'xxx'; //Point d'accès au service Object Store définit dans la partie la partie "Accès et sécurité" puis dans l'onglet "Accès API".
$serviceName = 'swift';
$region = 'SBG1';
 
// Constructor initialization
$client = new OpenStack($authUrl, array(
'username'=> $username,
'password'=> $password,
'tenantName'  => $tenant
  )
  );
 

// Call the authenticate method
$client->authenticate();

// Send a request to the Object Store service (Swift)
$service = $client->objectStoreService($serviceName, $region);

// Create container
$container = $service->createContainer('my_container');

$container = $service->getContainer('my_container');

//Create an object 
$fileData = fopen('example.txt', 'r+'); // fopen('/path/to/file.txt', 'r+');
$container->uploadObject('example.txt', $fileData); 

sleep(5);//Latency

// Get the containers list
$containerList = $service->listContainers();

// Display containers name and count the objects in each one
while ($container = $containerList->next()) {
printf("Container name: %s\n", $container->name);
printf("Number of objects within container: %d\n", $container->getObjectCount());
}

// Get all objects in the "my_container" container
$containerObjects = $service->getContainer('my_container')->objectList();
 
// Display the name of all objects in the container
while ($containerObject = $containerObjects->next()) {
   printf("Object name: %s\n", $containerObject->getName());
}
 
?>
@EpocDotFr
Copy link

Merci !

@optyfr
Copy link

optyfr commented Oct 10, 2016

La variable $swiftUrl est inutile...

@claflamme2
Copy link

Comment créer un conteneur 'Publique'? L'utilisation des métadonnées ['read'=>'.r:*'] ne semble avoir aucun effet.

@enzogh
Copy link

enzogh commented Sep 3, 2017

Non la variable $swiftUrl est pas inutile, très importante pour manage votre service !

@Canadadry
Copy link

La variable est inutilisée dans l'exemple. Un exemple d'utilisation avec cette variable serai le bienvenu.

@Mecanik
Copy link

Mecanik commented May 25, 2018

Possible get progress ?

@scysys
Copy link

scysys commented Mar 1, 2020

Are there an example for v3?

@maximevalette
Copy link

I've put something together because I spent too much time trying to make it work:

https://gist.github.com/maximevalette/0958ad9fd2ff1c2747731459ec34ba8c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment