Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/zend/Zend/Service/Amazon/Ec2/Instance.php
Go to the documentation of this file.
00001 <?php
00026 require_once 'Zend/Service/Amazon/Ec2/Abstract.php';
00027 
00038 class Zend_Service_Amazon_Ec2_Instance extends Zend_Service_Amazon_Ec2_Abstract
00039 {
00043     const SMALL = 'm1.small';
00044 
00048     const LARGE = 'm1.large';
00049 
00053     const XLARGE = 'm1.xlarge';
00054 
00058     const HCPU_MEDIUM = 'c1.medium';
00059 
00063     const HCPU_XLARGE = 'c1.xlarge';
00064 
00065 
00108     public function run(array $options)
00109     {
00110         $_defaultOptions = array(
00111             'minCount'  => 1,
00112             'maxCount'  => 1,
00113             'instanceType' => Zend_Service_Amazon_Ec2_Instance::SMALL
00114         );
00115 
00116         // set / override the defualt optoins if they are not passed into the array;
00117         $options = array_merge($_defaultOptions, $options);
00118 
00119         if(!isset($options['imageId'])) {
00120             require_once 'Zend/Service/Amazon/Ec2/Exception.php';
00121             throw new Zend_Service_Amazon_Ec2_Exception('No Image Id Provided');
00122         }
00123 
00124 
00125         $params = array();
00126         $params['Action'] = 'RunInstances';
00127         $params['ImageId'] = $options['imageId'];
00128         $params['MinCount'] = $options['minCount'];
00129         $params['MaxCount'] = $options['maxCount'];
00130 
00131         if(isset($options['keyName'])) {
00132             $params['KeyName'] = $options['keyName'];
00133         }
00134 
00135         if(is_array($options['securityGroup']) && !empty($options['securityGroup'])) {
00136             foreach($options['securityGroup'] as $k=>$name) {
00137                 $params['SecurityGroup.' . ($k+1)] = $name;
00138             }
00139         } elseif(isset($options['securityGroup'])) {
00140             $params['SecurityGroup.1'] = $options['securityGroup'];
00141         }
00142 
00143         if(isset($options['userData'])) {
00144             $params['UserData'] = base64_encode($options['userData']);
00145         }
00146 
00147         if(isset($options['instanceType'])) {
00148             $params['InstanceType'] = $options['instanceType'];
00149         }
00150 
00151         if(isset($options['placement'])) {
00152             $params['Placement.AvailabilityZone'] = $options['placement'];
00153         }
00154 
00155         if(isset($options['kernelId'])) {
00156             $params['KernelId'] = $options['kernelId'];
00157         }
00158 
00159         if(isset($options['ramdiskId'])) {
00160             $params['RamdiskId'] = $options['ramdiskId'];
00161         }
00162 
00163         if(isset($options['blockDeviceVirtualName']) && isset($options['blockDeviceName'])) {
00164             $params['BlockDeviceMapping.n.VirtualName'] = $options['blockDeviceVirtualName'];
00165             $params['BlockDeviceMapping.n.DeviceName'] = $options['blockDeviceName'];
00166         }
00167 
00168         if(isset($options['monitor']) && $options['monitor'] === true) {
00169             $params['Monitoring.Enabled'] = true;
00170         }
00171 
00172         $response = $this->sendRequest($params);
00173         $xpath = $response->getXPath();
00174 
00175         $return = array();
00176 
00177         $return['reservationId'] = $xpath->evaluate('string(//ec2:reservationId/text())');
00178         $return['ownerId'] = $xpath->evaluate('string(//ec2:ownerId/text())');
00179 
00180         $gs = $xpath->query('//ec2:groupSet/ec2:item');
00181         foreach($gs as $gs_node) {
00182             $return['groupSet'][] = $xpath->evaluate('string(ec2:groupId/text())', $gs_node);
00183             unset($gs_node);
00184         }
00185         unset($gs);
00186 
00187         $is = $xpath->query('//ec2:instancesSet/ec2:item');
00188         foreach($is as $is_node) {
00189             $item = array();
00190 
00191             $item['instanceId'] = $xpath->evaluate('string(ec2:instanceId/text())', $is_node);
00192             $item['imageId'] = $xpath->evaluate('string(ec2:imageId/text())', $is_node);
00193             $item['instanceState']['code'] = $xpath->evaluate('string(ec2:instanceState/ec2:code/text())', $is_node);
00194             $item['instanceState']['name'] = $xpath->evaluate('string(ec2:instanceState/ec2:name/text())', $is_node);
00195             $item['privateDnsName'] = $xpath->evaluate('string(ec2:privateDnsName/text())', $is_node);
00196             $item['dnsName'] = $xpath->evaluate('string(ec2:dnsName/text())', $is_node);
00197             $item['keyName'] = $xpath->evaluate('string(ec2:keyName/text())', $is_node);
00198             $item['instanceType'] = $xpath->evaluate('string(ec2:instanceType/text())', $is_node);
00199             $item['amiLaunchIndex'] = $xpath->evaluate('string(ec2:amiLaunchIndex/text())', $is_node);
00200             $item['launchTime'] = $xpath->evaluate('string(ec2:launchTime/text())', $is_node);
00201             $item['availabilityZone'] = $xpath->evaluate('string(ec2:placement/ec2:availabilityZone/text())', $is_node);
00202 
00203             $return['instances'][] = $item;
00204             unset($item);
00205             unset($is_node);
00206         }
00207         unset($is);
00208 
00209         return $return;
00210 
00211     }
00212 
00229     public function describe($instanceId = null, $ignoreTerminated = false)
00230     {
00231         $params = array();
00232         $params['Action'] = 'DescribeInstances';
00233 
00234         if(is_array($instanceId) && !empty($instanceId)) {
00235             foreach($instanceId as $k=>$name) {
00236                 $params['InstanceId.' . ($k+1)] = $name;
00237             }
00238         } elseif($instanceId) {
00239             $params['InstanceId.1'] = $instanceId;
00240         }
00241 
00242         $response = $this->sendRequest($params);
00243 
00244         $xpath = $response->getXPath();
00245 
00246         $nodes = $xpath->query('//ec2:reservationSet/ec2:item');
00247 
00248         $return = array();
00249         $return['instances'] = array();
00250 
00251         foreach($nodes as $node) {
00252             if($xpath->evaluate('string(ec2:instancesSet/ec2:item/ec2:instanceState/ec2:code/text())', $node) == 48 && $ignoreTerminated) continue;
00253             $item = array();
00254 
00255             $item['reservationId'] = $xpath->evaluate('string(ec2:reservationId/text())', $node);
00256             $item['ownerId'] = $xpath->evaluate('string(ec2:ownerId/text())', $node);
00257 
00258             $gs = $xpath->query('ec2:groupSet/ec2:item', $node);
00259             foreach($gs as $gs_node) {
00260                 $item['groupSet'][] = $xpath->evaluate('string(ec2:groupId/text())', $gs_node);
00261                 unset($gs_node);
00262             }
00263             unset($gs);
00264 
00265             $is = $xpath->query('ec2:instancesSet/ec2:item', $node);
00266 
00267             foreach($is as $is_node) {
00268 
00269                 $item['instanceId'] = $xpath->evaluate('string(ec2:instanceId/text())', $is_node);
00270                 $item['imageId'] = $xpath->evaluate('string(ec2:imageId/text())', $is_node);
00271                 $item['instanceState']['code'] = $xpath->evaluate('string(ec2:instanceState/ec2:code/text())', $is_node);
00272                 $item['instanceState']['name'] = $xpath->evaluate('string(ec2:instanceState/ec2:name/text())', $is_node);
00273                 $item['privateDnsName'] = $xpath->evaluate('string(ec2:privateDnsName/text())', $is_node);
00274                 $item['dnsName'] = $xpath->evaluate('string(ec2:dnsName/text())', $is_node);
00275                 $item['keyName'] = $xpath->evaluate('string(ec2:keyName/text())', $is_node);
00276                 $item['productCode'] = $xpath->evaluate('string(ec2:productCodesSet/ec2:item/ec2:productCode/text())', $is_node);
00277                 $item['instanceType'] = $xpath->evaluate('string(ec2:instanceType/text())', $is_node);
00278                 $item['launchTime'] = $xpath->evaluate('string(ec2:launchTime/text())', $is_node);
00279                 $item['availabilityZone'] = $xpath->evaluate('string(ec2:placement/ec2:availabilityZone/text())', $is_node);
00280                 $item['kernelId'] = $xpath->evaluate('string(ec2:kernelId/text())', $is_node);
00281                 $item['ramediskId'] = $xpath->evaluate('string(ec2:ramediskId/text())', $is_node);
00282                 $item['amiLaunchIndex'] = $xpath->evaluate('string(ec2:amiLaunchIndex/text())', $is_node);
00283                 $item['monitoringState'] = $xpath->evaluate('string(ec2:monitoring/ec2:state/text())', $is_node);
00284 
00285                 $return['instances'][] = $item;
00286                 unset($is_node);
00287             }
00288             unset($item);
00289             unset($is);
00290         }
00291 
00292         return $return;
00293     }
00294 
00306     public function describeByImageId($imageId, $ignoreTerminated = false)
00307     {
00308         $arrInstances = $this->describe(null, $ignoreTerminated);
00309 
00310         $return = array();
00311 
00312         foreach($arrInstances['instances'] as $instance) {
00313             if($instance['imageId'] !== $imageId) continue;
00314             $return[] = $instance;
00315         }
00316 
00317         return $return;
00318     }
00319 
00329     public function terminate($instanceId)
00330     {
00331         $params = array();
00332         $params['Action'] = 'TerminateInstances';
00333 
00334         if(is_array($instanceId) && !empty($instanceId)) {
00335             foreach($instanceId as $k=>$name) {
00336                 $params['InstanceId.' . ($k+1)] = $name;
00337             }
00338         } elseif($instanceId) {
00339             $params['InstanceId.1'] = $instanceId;
00340         }
00341 
00342         $response = $this->sendRequest($params);
00343         $xpath = $response->getXPath();
00344 
00345         $nodes = $xpath->query('//ec2:instancesSet/ec2:item');
00346 
00347         $return = array();
00348         foreach($nodes as $node) {
00349             $item = array();
00350 
00351             $item['instanceId'] = $xpath->evaluate('string(ec2:instanceId/text())', $node);
00352             $item['shutdownState']['code'] = $xpath->evaluate('string(ec2:shutdownState/ec2:code/text())', $node);
00353             $item['shutdownState']['name'] = $xpath->evaluate('string(ec2:shutdownState/ec2:name/text())', $node);
00354             $item['previousState']['code'] = $xpath->evaluate('string(ec2:previousState/ec2:code/text())', $node);
00355             $item['previousState']['name'] = $xpath->evaluate('string(ec2:previousState/ec2:name/text())', $node);
00356 
00357             $return[] = $item;
00358             unset($item);
00359         }
00360 
00361         return $return;
00362     }
00363 
00373     public function reboot($instanceId)
00374     {
00375         $params = array();
00376         $params['Action'] = 'RebootInstances';
00377 
00378         if(is_array($instanceId) && !empty($instanceId)) {
00379             foreach($instanceId as $k=>$name) {
00380                 $params['InstanceId.' . ($k+1)] = $name;
00381             }
00382         } elseif($instanceId) {
00383             $params['InstanceId.1'] = $instanceId;
00384         }
00385 
00386         $response = $this->sendRequest($params);
00387         $xpath = $response->getXPath();
00388 
00389         $return = $xpath->evaluate('string(//ec2:return/text())');
00390 
00391         return ($return === "true");
00392     }
00393 
00403     public function consoleOutput($instanceId)
00404     {
00405         $params = array();
00406         $params['Action'] = 'GetConsoleOutput';
00407         $params['InstanceId'] = $instanceId;
00408 
00409         $response = $this->sendRequest($params);
00410         $xpath = $response->getXPath();
00411 
00412         $return = array();
00413 
00414         $return['instanceId'] = $xpath->evaluate('string(//ec2:instanceId/text())');
00415         $return['timestamp'] = $xpath->evaluate('string(//ec2:timestamp/text())');
00416         $return['output'] = base64_decode($xpath->evaluate('string(//ec2:output/text())'));
00417 
00418         return $return;
00419     }
00420 
00433     public function confirmProduct($productCode, $instanceId)
00434     {
00435         $params = array();
00436         $params['Action'] = 'ConfirmProductInstance';
00437         $params['ProductCode'] = $productCode;
00438         $params['InstanceId'] = $instanceId;
00439 
00440         $response = $this->sendRequest($params);
00441         $xpath = $response->getXPath();
00442 
00443         $result = $xpath->evaluate('string(//ec2:result/text())');
00444 
00445         if($result === "true") {
00446             $return['result'] = true;
00447             $return['ownerId'] = $xpath->evaluate('string(//ec2:ownerId/text())');
00448 
00449             return $return;
00450         }
00451 
00452         return false;
00453     }
00454 
00461     public function monitor($instanceId)
00462     {
00463         $params = array();
00464         $params['Action'] = 'MonitorInstances';
00465 
00466         if(is_array($instanceId) && !empty($instanceId)) {
00467             foreach($instanceId as $k=>$name) {
00468                 $params['InstanceId.' . ($k+1)] = $name;
00469             }
00470         } elseif($instanceId) {
00471             $params['InstanceId.1'] = $instanceId;
00472         }
00473 
00474         $response = $this->sendRequest($params);
00475         $xpath = $response->getXPath();
00476 
00477 
00478         $items = $xpath->query('//ec2:instancesSet/ec2:item');
00479 
00480         $arrReturn = array();
00481         foreach($items as $item) {
00482             $i = array();
00483             $i['instanceid'] = $xpath->evaluate('string(//ec2:instanceId/text())', $item);
00484             $i['monitorstate'] = $xpath->evaluate('string(//ec2:monitoring/ec2:state/text())');
00485             $arrReturn[] = $i;
00486             unset($i);
00487         }
00488 
00489         return $arrReturn;
00490     }
00497     public function unmonitor($instanceId)
00498     {
00499         $params = array();
00500         $params['Action'] = 'UnmonitorInstances';
00501 
00502         if(is_array($instanceId) && !empty($instanceId)) {
00503             foreach($instanceId as $k=>$name) {
00504                 $params['InstanceId.' . ($k+1)] = $name;
00505             }
00506         } elseif($instanceId) {
00507             $params['InstanceId.1'] = $instanceId;
00508         }
00509 
00510         $response = $this->sendRequest($params);
00511         $xpath = $response->getXPath();
00512 
00513 
00514         $items = $xpath->query('//ec2:instancesSet/ec2:item');
00515 
00516         $arrReturn = array();
00517         foreach($items as $item) {
00518             $i = array();
00519             $i['instanceid'] = $xpath->evaluate('string(//ec2:instanceId/text())', $item);
00520             $i['monitorstate'] = $xpath->evaluate('string(//ec2:monitoring/ec2:state/text())');
00521             $arrReturn[] = $i;
00522             unset($i);
00523         }
00524 
00525         return $arrReturn;
00526     }
00527 
00528 }
00529 
 All Data Structures Namespaces Files Functions Variables Enumerations