Lien vers l'offre OVH Public Cloud Object Storage : https://www.ovh.com/fr/cloud/storage/object-storage.xml
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
- Se connecter sur Horizon: https://horizon.cloud.ovh.net/auth/login/
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:
- Object Store => https://storage.sbg1.cloud.ovh.net/v1/AUTH_xxx
- Image => https://image.compute.sbg1.cloud.ovh.net/
- Compute => https://compute.sbg1.cloud.ovh.net/v2/xxx
- Network => https://network.compute.sbg1.cloud.ovh.net/
- Identity => https://auth.cloud.ovh.net/v2.0
Vous pouvez ensuite trouver vos identifiants en téléchargeant le fichier RC d'Openstack.
##Utiliser l'API OpenStack Swift (Exemple PHP)
Liens utiles:
- The PHP SDK for OpenStack clouds http://developer.rackspace.com
- Documentation du SDK PHP http://docs.php-opencloud.com/en/latest/services/object-store/index.html
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';
<?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());
}
?>
Non la variable $swiftUrl est pas inutile, très importante pour manage votre service !