|
Moodle
2.2.1
http://www.collinsharper.com
|
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