Updated DBaaS to actually work.
This commit is contained in:
@@ -48,7 +48,7 @@ class Instance {
|
|||||||
$res = $this->client->doRequest($url, 'GET', $this->headers());
|
$res = $this->client->doRequest($url, 'GET', $this->headers());
|
||||||
|
|
||||||
$json = json_decode($res->content(), TRUE);
|
$json = json_decode($res->content(), TRUE);
|
||||||
return InstanceDetails::newFromJSON($json);
|
return InstanceDetails::newFromJSON($json['instance']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listInstances() {
|
public function listInstances() {
|
||||||
@@ -108,13 +108,18 @@ class Instance {
|
|||||||
|
|
||||||
$url = $this->url . '/instances';
|
$url = $this->url . '/instances';
|
||||||
$postData = json_encode($json);
|
$postData = json_encode($json);
|
||||||
|
fwrite(STDOUT, "POST DATA: $postData\n");
|
||||||
$length = strlen($postData);
|
$length = strlen($postData);
|
||||||
$headers = $this->headers(array('Accept' => 'application/json', 'Content-length' => $length));
|
$headers = $this->headers(array(
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
'Content-Length' => $length,
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
));
|
||||||
$res = $this->client->doRequest($url, 'POST', $headers, $postData);
|
$res = $this->client->doRequest($url, 'POST', $headers, $postData);
|
||||||
|
|
||||||
$results = json_decode($res->content(), TRUE);
|
$results = json_decode($res->content(), TRUE);
|
||||||
|
|
||||||
return InstanceDetails::newFromJSON($results);
|
return InstanceDetails::newFromJSON($results['instance']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete($instanceId) {
|
public function delete($instanceId) {
|
||||||
|
@@ -42,50 +42,155 @@ class InstanceDetails {
|
|||||||
|
|
||||||
public function newFromJSON($json) {
|
public function newFromJSON($json) {
|
||||||
|
|
||||||
|
fwrite(STDOUT, json_encode($json));
|
||||||
|
|
||||||
$o = new InstanceDetails($json['name'], $json['id']);
|
$o = new InstanceDetails($json['name'], $json['id']);
|
||||||
$o->links = $json['links'];
|
$o->links = $json['links'];
|
||||||
$o->created = $json['created'];
|
$o->created = $json['created'];
|
||||||
$o->status = $json['status'];
|
$o->status = $json['status'];
|
||||||
$o->hostname = $json['hostname'];
|
if (!empty($json['hostname'])) {
|
||||||
$o->port= !empty($json['port']) ? $json['port'] : '3306';
|
$o->hostname = $json['hostname'];
|
||||||
|
$o->port= !empty($json['port']) ? $json['port'] : '3306';
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($json['credential']['username'])) {
|
if (!empty($json['credential']['username'])) {
|
||||||
$o->username = $json['credential']['username'];
|
$o->username = $json['credential']['username'];
|
||||||
}
|
}
|
||||||
if (!empty($json['credential']['password'])) {
|
if (!empty($json['credential']['password'])) {
|
||||||
$o->username = $json['credential']['pasword'];
|
$o->password = $json['credential']['password'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($name, $id) {
|
public function __construct($name, $id) {
|
||||||
|
$this->name = $name;
|
||||||
|
$this->id = $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the name of this instance.
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* The name of the instance.
|
||||||
|
*/
|
||||||
|
public function name() {
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ID of the instance.
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* The ID.
|
||||||
|
*/
|
||||||
|
public function id() {
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a string expressing the creation time.
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* A string indicating the creation time.
|
||||||
|
* Format is in ISO date format.
|
||||||
|
*/
|
||||||
public function createdOn() {
|
public function createdOn() {
|
||||||
return $this->created;
|
return $this->created;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status of this instance.
|
||||||
|
*
|
||||||
|
* This indicates whether or not the service is available, along with other
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* Known status messages:
|
||||||
|
*- running: Instance is fully operational.
|
||||||
|
*- building: Instance is being created.
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* A short status message.
|
||||||
|
*/
|
||||||
public function status() {
|
public function status() {
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the hostname.
|
||||||
|
*
|
||||||
|
* @attention
|
||||||
|
* In version 1.0 of the DBaaS protocol, this is ONLY available immediately
|
||||||
|
* after creation.
|
||||||
|
*
|
||||||
|
* This returns the DNS name of the host (or possibly an IP address).
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* The FQDN or IP address of the MySQL server.
|
||||||
|
*/
|
||||||
public function hostname() {
|
public function hostname() {
|
||||||
return $this->hostname;
|
return $this->hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port number of the MySQL server.
|
||||||
|
*
|
||||||
|
* @retval integer
|
||||||
|
* The port number. If this is empty, the
|
||||||
|
* default (3306) should be assumed.
|
||||||
|
*/
|
||||||
public function port() {
|
public function port() {
|
||||||
return $this->port;
|
return $this->port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The username field, if available.
|
||||||
|
*
|
||||||
|
* @attention
|
||||||
|
* Typically this is only available at creation time!
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* The username for the MySQL instance.
|
||||||
|
*/
|
||||||
public function username() {
|
public function username() {
|
||||||
return $this->username;
|
return $this->username;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* The password field, if available.
|
||||||
|
*
|
||||||
|
* This is the password for this instance's MySQL database.
|
||||||
|
*
|
||||||
|
* @attention
|
||||||
|
* This is only returned when a database is first created.
|
||||||
|
*
|
||||||
|
* @retval string
|
||||||
|
* A password string.
|
||||||
|
*/
|
||||||
public function password() {
|
public function password() {
|
||||||
return $this->password;
|
return $this->password;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* An array of links about this database.
|
||||||
|
*
|
||||||
|
* Format:
|
||||||
|
* @code
|
||||||
|
* <?php
|
||||||
|
* array(
|
||||||
|
* 0 => array(
|
||||||
|
* "rel" => "self",
|
||||||
|
* "url" => "https://some.long/url",
|
||||||
|
* ),
|
||||||
|
* );
|
||||||
|
* ?>
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* At the time of this writing, there is no definition of what URLs may
|
||||||
|
* appear here. However, the `self` URL us a URL to the present instance's
|
||||||
|
* definition.
|
||||||
|
*
|
||||||
|
* @retval array
|
||||||
|
* An array of related links to DBaaS URLs.
|
||||||
|
*/
|
||||||
public function links() {
|
public function links() {
|
||||||
return $this->links;
|
return $this->links;
|
||||||
}
|
}
|
||||||
@@ -95,6 +200,11 @@ class InstanceDetails {
|
|||||||
*
|
*
|
||||||
* A convenience function for PDO.
|
* A convenience function for PDO.
|
||||||
*
|
*
|
||||||
|
* @attention
|
||||||
|
* This may only be available immediately after the creation of
|
||||||
|
* the database. The current version of DBaaS does not return
|
||||||
|
* hostname and port in subsequent queries.
|
||||||
|
*
|
||||||
* @see http://us3.php.net/manual/en/ref.pdo-mysql.connection.php
|
* @see http://us3.php.net/manual/en/ref.pdo-mysql.connection.php
|
||||||
*
|
*
|
||||||
* @param string $dbName
|
* @param string $dbName
|
||||||
|
@@ -48,12 +48,12 @@ class DBaaSInstanceTest extends \HPCloud\Tests\TestCase {
|
|||||||
$list = $inst->listInstances();
|
$list = $inst->listInstances();
|
||||||
|
|
||||||
fwrite(STDOUT, print_r($list, TRUE));
|
fwrite(STDOUT, print_r($list, TRUE));
|
||||||
if (!empty($list['instances'])) {
|
if (!empty($list)) {
|
||||||
$dbName = self::conf('hpcloud.dbaas.database');
|
$dbName = self::conf('hpcloud.dbaas.database');
|
||||||
foreach ($list['instances'] as $item) {
|
foreach ($list as $item) {
|
||||||
if ($item['name'] == $dbName) {
|
if ($item->name() == $dbName) {
|
||||||
fprintf(STDOUT, "Deleting %s (%s)\n", $item['name'], $item['id']);
|
fprintf(STDOUT, "Deleting %s (%s)\n", $item->name(), $item->id());
|
||||||
$inst->delete($item['id']);
|
$inst->delete($item->id());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,6 +80,8 @@ class DBaaSInstanceTest extends \HPCloud\Tests\TestCase {
|
|||||||
// failed run.
|
// failed run.
|
||||||
$this->destroyDatabase();
|
$this->destroyDatabase();
|
||||||
|
|
||||||
|
//throw new \Exception("Stopped here.");
|
||||||
|
|
||||||
$dbName = self::conf('hpcloud.dbaas.database');
|
$dbName = self::conf('hpcloud.dbaas.database');
|
||||||
|
|
||||||
$details = $this->inst()->create($dbName, 'small', '3307');
|
$details = $this->inst()->create($dbName, 'small', '3307');
|
||||||
@@ -94,7 +96,7 @@ class DBaaSInstanceTest extends \HPCloud\Tests\TestCase {
|
|||||||
$this->assertNotEmpty($details->createdOn());
|
$this->assertNotEmpty($details->createdOn());
|
||||||
$this->assertEquals($dbName, $details->name());
|
$this->assertEquals($dbName, $details->name());
|
||||||
|
|
||||||
$dsn = sprint('mysql:host=%s;port=3307;dbname=foo;charset=utf-8', $details->hostname());
|
$dsn = sprintf('mysql:host=%s;port=3307;dbname=foo;charset=utf-8', $details->hostname());
|
||||||
|
|
||||||
$this->assertEquals($dsn, $details->dsn('foo', 'utf-8'));
|
$this->assertEquals($dsn, $details->dsn('foo', 'utf-8'));
|
||||||
|
|
||||||
@@ -169,7 +171,7 @@ class DBaaSInstanceTest extends \HPCloud\Tests\TestCase {
|
|||||||
$match = 0;
|
$match = 0;
|
||||||
$dbName = self::conf('hpcloud.dbaas.database');
|
$dbName = self::conf('hpcloud.dbaas.database');
|
||||||
|
|
||||||
foreach ($instances['instances'] as $server) {
|
foreach ($instances as $server) {
|
||||||
$this->assertInstanceOf('\HPCloud\Services\DBaaS\InstanceDetails', $server);
|
$this->assertInstanceOf('\HPCloud\Services\DBaaS\InstanceDetails', $server);
|
||||||
$this->assertNotEmpty($server->id());
|
$this->assertNotEmpty($server->id());
|
||||||
if ($server->name() == $dbName) {
|
if ($server->name() == $dbName) {
|
||||||
|
Reference in New Issue
Block a user