133 lines
3.7 KiB
PHP
133 lines
3.7 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* The Rackspace cloud/connection class (which uses different authentication
|
||
|
* than the pure OpenStack class)
|
||
|
*
|
||
|
* @copyright 2012-2013 Rackspace Hosting, Inc.
|
||
|
* See COPYING for licensing information
|
||
|
*
|
||
|
* @package phpOpenCloud
|
||
|
* @version 1.0
|
||
|
* @author Glen Campbell <glen.campbell@rackspace.com>
|
||
|
*/
|
||
|
|
||
|
namespace OpenCloud;
|
||
|
|
||
|
/**
|
||
|
* Rackspace extends the OpenStack class with support for Rackspace's
|
||
|
* API key and tenant requirements.
|
||
|
*
|
||
|
* The only difference between Rackspace and OpenStack is that the
|
||
|
* Rackspace class generates credentials using the username
|
||
|
* and API key, as required by the Rackspace authentication
|
||
|
* service.
|
||
|
*
|
||
|
* Example:
|
||
|
* <code>
|
||
|
* $username = 'FRED';
|
||
|
* $apiKey = '0900af093093788912388fc09dde090ffee09';
|
||
|
* $conn = new Rackspace(
|
||
|
* 'https://identity.api.rackspacecloud.com/v2.0/',
|
||
|
* array(
|
||
|
* 'username' => $username,
|
||
|
* 'apiKey' => $apiKey
|
||
|
* ));
|
||
|
* </code>
|
||
|
*/
|
||
|
class Rackspace extends OpenStack
|
||
|
{
|
||
|
|
||
|
//this is the JSON string for our new credentials
|
||
|
const APIKEYTEMPLATE = <<<ENDCRED
|
||
|
{ "auth": { "RAX-KSKEY:apiKeyCredentials": { "username": "%s",
|
||
|
"apiKey": "%s"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
ENDCRED;
|
||
|
|
||
|
/**
|
||
|
* Generates Rackspace API key credentials
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function Credentials()
|
||
|
{
|
||
|
$sec = $this->Secret();
|
||
|
if (isset($sec['username'])
|
||
|
&& isset($sec['apiKey'])
|
||
|
) {
|
||
|
return sprintf(
|
||
|
self::APIKEYTEMPLATE,
|
||
|
$sec['username'],
|
||
|
$sec['apiKey']
|
||
|
);
|
||
|
} else {
|
||
|
return parent::Credentials();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a new DbService (Database as a Service) object
|
||
|
*
|
||
|
* This is a factory method that is Rackspace-only (NOT part of OpenStack).
|
||
|
*
|
||
|
* @param string $name the name of the service (e.g., 'Cloud Databases')
|
||
|
* @param string $region the region (e.g., 'DFW')
|
||
|
* @param string $urltype the type of URL (e.g., 'publicURL');
|
||
|
*/
|
||
|
public function DbService($name = null, $region = null, $urltype = null)
|
||
|
{
|
||
|
return $this->Service('Database', $name, $region, $urltype);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a new LoadBalancerService object
|
||
|
*
|
||
|
* This is a factory method that is Rackspace-only (NOT part of OpenStack).
|
||
|
*
|
||
|
* @param string $name the name of the service
|
||
|
* (e.g., 'Cloud Load Balancers')
|
||
|
* @param string $region the region (e.g., 'DFW')
|
||
|
* @param string $urltype the type of URL (e.g., 'publicURL');
|
||
|
*/
|
||
|
public function LoadBalancerService($name = null, $region = null, $urltype = null)
|
||
|
{
|
||
|
return $this->Service('LoadBalancer', $name, $region, $urltype);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* creates a new DNS service object
|
||
|
*
|
||
|
* This is a factory method that is currently Rackspace-only
|
||
|
* (not available via the OpenStack class)
|
||
|
*/
|
||
|
public function DNS($name = null, $region = null, $urltype = null)
|
||
|
{
|
||
|
return $this->Service('DNS', $name, $region, $urltype);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* creates a new CloudMonitoring service object
|
||
|
*
|
||
|
* This is a factory method that is currently Rackspace-only
|
||
|
* (not available via the OpenStack class)
|
||
|
*/
|
||
|
public function CloudMonitoring($name=null, $region=null, $urltype=null)
|
||
|
{
|
||
|
return $this->Service('CloudMonitoring', $name, $region, $urltype);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* creates a new Autoscale service object
|
||
|
*
|
||
|
* This is a factory method that is currently Rackspace-only
|
||
|
* (not available via the OpenStack class)
|
||
|
*/
|
||
|
public function Autoscale($name=null, $region=null, $urltype=null)
|
||
|
{
|
||
|
return $this->Service('Autoscale', $name, $region, $urltype);
|
||
|
}
|
||
|
|
||
|
}
|