Skip to content

Instantly share code, notes, and snippets.

@justinlund
Created February 10, 2015 21:26
Show Gist options
  • Save justinlund/94a2641c9f8772e9525a to your computer and use it in GitHub Desktop.
Save justinlund/94a2641c9f8772e9525a to your computer and use it in GitHub Desktop.
Using php-opencloud to launch a DreamCompute subsonic CentOS 6.5 instance
<?php
require 'vendor/autoload.php';
use OpenCloud\OpenStack;
$client = new OpenStack('https://keystone.dream.io/v2.0', array(
'username' => 'username',
'password' => 'password',
// Use either tenantName or tenantId
'tenantName' => 'demo',
));
$compute = $client->computeService('nova', 'RegionOne');
/*
// Upload a keypair
// This only needs to be done once
$keypair = $compute->keypair();
$keypair->create(array(
'name' => 'my-keypair',
'publicKey' => file_get_contents('/home/my-user/.ssh/id_rsa.pub')
));
*/
// Grab the latest CentOS 6.5 image
$images = $compute->imageList();
foreach ($images as $image) {
if (strpos($image->name, 'Centos65') !== false) {
$centos = $image;
break;
}
}
// Subsonic instance size
$subsonic = $compute->flavor('100');
$server = $compute->server();
try {
$response = $server->create(array(
'name' => 'test server',
'image' => $centos,
'flavor' => $subsonic,
'keypair' => 'my-keypair',
));
} catch (\Guzzle\Http\Exception\BadResponseException $e) {
// Something failed - Details:
$responseBody = (string) $e->getResponse()->getBody();
$statusCode = $e->getResponse()->getStatusCode();
$headers = $e->getResponse()->getHeaderLines();
echo sprintf("Status: %s\nBody: %s\nHeaders: %s", $statusCode, $responseBody, implode(', ', $headers));
}
// Poll for server status
use OpenCloud\Compute\Constants\ServerState;
$callback = function($server) {
if (!empty($server->error)) {
var_dump($server->error);
exit;
} else {
echo sprintf(
"Waiting on %s/%-12s %4s%%",
$server->name(),
$server->status(),
isset($server->progress) ? $server->progress : 0
);
}
};
$server->waitFor(ServerState::ACTIVE, 600, $callback);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment