318 lines
7.8 KiB
PHP
318 lines
7.8 KiB
PHP
<?php
|
|
/**
|
|
* @category Zend
|
|
* @package Zend_Cloud
|
|
* @subpackage Infrastructure
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
|
|
/**
|
|
* Instance of an infrastructure service
|
|
*
|
|
* @package Zend_Cloud
|
|
* @subpackage Infrastructure
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
class Zend_Cloud_Infrastructure_Instance
|
|
{
|
|
const STATUS_RUNNING = 'running';
|
|
const STATUS_STOPPED = 'stopped';
|
|
const STATUS_SHUTTING_DOWN = 'shutting-down';
|
|
const STATUS_REBOOTING = 'rebooting';
|
|
const STATUS_TERMINATED = 'terminated';
|
|
const STATUS_PENDING = 'pending';
|
|
const STATUS_REBUILD = 'rebuild';
|
|
const INSTANCE_ID = 'id';
|
|
const INSTANCE_IMAGEID = 'imageId';
|
|
const INSTANCE_NAME = 'name';
|
|
const INSTANCE_STATUS = 'status';
|
|
const INSTANCE_PUBLICDNS = 'publicDns';
|
|
const INSTANCE_CPU = 'cpu';
|
|
const INSTANCE_RAM = 'ram';
|
|
const INSTANCE_STORAGE = 'storageSize';
|
|
const INSTANCE_ZONE = 'zone';
|
|
const INSTANCE_LAUNCHTIME = 'launchTime';
|
|
const MONITOR_CPU = 'CpuUsage';
|
|
const MONITOR_RAM = 'RamUsage';
|
|
const MONITOR_NETWORK_IN = 'NetworkIn';
|
|
const MONITOR_NETWORK_OUT = 'NetworkOut';
|
|
const MONITOR_DISK = 'DiskUsage';
|
|
const MONITOR_DISK_WRITE = 'DiskWrite';
|
|
const MONITOR_DISK_READ = 'DiskRead';
|
|
const MONITOR_START_TIME = 'StartTime';
|
|
const MONITOR_END_TIME = 'EndTime';
|
|
const SSH_USERNAME = 'username';
|
|
const SSH_PASSWORD = 'password';
|
|
const SSH_PRIVATE_KEY = 'privateKey';
|
|
const SSH_PUBLIC_KEY = 'publicKey';
|
|
const SSH_PASSPHRASE = 'passphrase';
|
|
|
|
/**
|
|
* @var Zend_Cloud_Infrastructure_Adapter
|
|
*/
|
|
protected $adapter;
|
|
|
|
/**
|
|
* Instance's attribute
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $attributes;
|
|
|
|
/**
|
|
* Attributes required for an instance
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $attributeRequired = array(
|
|
self::INSTANCE_ID,
|
|
self::INSTANCE_STATUS,
|
|
self::INSTANCE_IMAGEID,
|
|
self::INSTANCE_ZONE
|
|
);
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param Adapter $adapter
|
|
* @param array $data
|
|
* @return void
|
|
*/
|
|
public function __construct($adapter, $data = null)
|
|
{
|
|
if (!($adapter instanceof Zend_Cloud_Infrastructure_Adapter)) {
|
|
throw new Zend_Cloud_Infrastructure_Exception("You must pass a Zend_Cloud_Infrastructure_Adapter instance");
|
|
}
|
|
|
|
if (is_object($data)) {
|
|
if (method_exists($data, 'toArray')) {
|
|
$data= $data->toArray();
|
|
} elseif ($data instanceof Traversable) {
|
|
$data = iterator_to_array($data);
|
|
}
|
|
}
|
|
|
|
if (empty($data) || !is_array($data)) {
|
|
throw new Zend_Cloud_Infrastructure_Exception("You must pass an array of parameters");
|
|
}
|
|
|
|
foreach ($this->attributeRequired as $key) {
|
|
if (empty($data[$key])) {
|
|
throw new Zend_Cloud_Infrastructure_Exception(sprintf(
|
|
'The param "%s" is a required param for %s',
|
|
$key,
|
|
__CLASS__
|
|
));
|
|
}
|
|
}
|
|
|
|
$this->adapter = $adapter;
|
|
$this->attributes = $data;
|
|
}
|
|
|
|
/**
|
|
* Get Attribute with a specific key
|
|
*
|
|
* @param array $data
|
|
* @return misc|false
|
|
*/
|
|
public function getAttribute($key)
|
|
{
|
|
if (!empty($this->attributes[$key])) {
|
|
return $this->attributes[$key];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get all the attributes
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getAttributes()
|
|
{
|
|
return $this->attributes;
|
|
}
|
|
|
|
/**
|
|
* Get the instance's id
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getId()
|
|
{
|
|
return $this->attributes[self::INSTANCE_ID];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's image id
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getImageId()
|
|
{
|
|
return $this->attributes[self::INSTANCE_IMAGEID];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's name
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getName()
|
|
{
|
|
return $this->attributes[self::INSTANCE_NAME];
|
|
}
|
|
|
|
/**
|
|
* Get the status of the instance
|
|
*
|
|
* @return string|boolean
|
|
*/
|
|
public function getStatus()
|
|
{
|
|
return $this->adapter->statusInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
|
|
/**
|
|
* Wait for status $status with a timeout of $timeout seconds
|
|
*
|
|
* @param string $status
|
|
* @param integer $timeout
|
|
* @return boolean
|
|
*/
|
|
public function waitStatus($status, $timeout = Adapter::TIMEOUT_STATUS_CHANGE)
|
|
{
|
|
return $this->adapter->waitStatusInstance($this->attributes[self::INSTANCE_ID], $status, $timeout);
|
|
}
|
|
|
|
/**
|
|
* Get the public DNS of the instance
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getPublicDns()
|
|
{
|
|
if (!isset($this->attributes[self::INSTANCE_PUBLICDNS])) {
|
|
$this->attributes[self::INSTANCE_PUBLICDNS] = $this->adapter->publicDnsInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
return $this->attributes[self::INSTANCE_PUBLICDNS];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's CPU
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getCpu()
|
|
{
|
|
return $this->attributes[self::INSTANCE_CPU];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's RAM size
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getRamSize()
|
|
{
|
|
return $this->attributes[self::INSTANCE_RAM];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's storage size
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getStorageSize()
|
|
{
|
|
return $this->attributes[self::INSTANCE_STORAGE];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's zone
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getZone()
|
|
{
|
|
return $this->attributes[self::INSTANCE_ZONE];
|
|
}
|
|
|
|
/**
|
|
* Get the instance's launch time
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getLaunchTime()
|
|
{
|
|
return $this->attributes[self::INSTANCE_LAUNCHTIME];
|
|
}
|
|
|
|
/**
|
|
* Reboot the instance
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function reboot()
|
|
{
|
|
return $this->adapter->rebootInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
|
|
/**
|
|
* Stop the instance
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function stop()
|
|
{
|
|
return $this->adapter->stopInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
|
|
/**
|
|
* Start the instance
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function start()
|
|
{
|
|
return $this->adapter->startInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
|
|
/**
|
|
* Destroy the instance
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function destroy()
|
|
{
|
|
return $this->adapter->destroyInstance($this->attributes[self::INSTANCE_ID]);
|
|
}
|
|
|
|
/**
|
|
* Return the system informations about the $metric of an instance
|
|
*
|
|
* @param string $metric
|
|
* @param null|array $options
|
|
* @return array|boolean
|
|
*/
|
|
public function monitor($metric, $options = null)
|
|
{
|
|
return $this->adapter->monitorInstance($this->attributes[self::INSTANCE_ID], $metric, $options);
|
|
}
|
|
|
|
/**
|
|
* Run arbitrary shell script on the instance
|
|
*
|
|
* @param array $param
|
|
* @param string|array $cmd
|
|
* @return string|array
|
|
*/
|
|
public function deploy($params, $cmd)
|
|
{
|
|
return $this->adapter->deployInstance($this->attributes[self::INSTANCE_ID], $params, $cmd);
|
|
}
|
|
}
|