|
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_Ebs extends Zend_Service_Amazon_Ec2_Abstract 00039 { 00050 public function createNewVolume($size, $availabilityZone) 00051 { 00052 $params = array(); 00053 $params['Action'] = 'CreateVolume'; 00054 $params['AvailabilityZone'] = $availabilityZone; 00055 $params['Size'] = $size; 00056 00057 $response = $this->sendRequest($params); 00058 $xpath = $response->getXPath(); 00059 00060 $return = array(); 00061 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 00062 $return['size'] = $xpath->evaluate('string(//ec2:size/text())'); 00063 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 00064 $return['createTime'] = $xpath->evaluate('string(//ec2:createTime/text())'); 00065 $return['availabilityZone'] = $xpath->evaluate('string(//ec2:availabilityZone/text())'); 00066 00067 return $return; 00068 } 00069 00080 public function createVolumeFromSnapshot($snapshotId, $availabilityZone) 00081 { 00082 $params = array(); 00083 $params['Action'] = 'CreateVolume'; 00084 $params['AvailabilityZone'] = $availabilityZone; 00085 $params['SnapshotId'] = $snapshotId; 00086 00087 $response = $this->sendRequest($params); 00088 $xpath = $response->getXPath(); 00089 00090 $return = array(); 00091 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 00092 $return['size'] = $xpath->evaluate('string(//ec2:size/text())'); 00093 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 00094 $return['createTime'] = $xpath->evaluate('string(//ec2:createTime/text())'); 00095 $return['availabilityZone'] = $xpath->evaluate('string(//ec2:availabilityZone/text())'); 00096 $return['snapshotId'] = $xpath->evaluate('string(//ec2:snapshotId/text())'); 00097 00098 return $return; 00099 } 00100 00108 public function describeVolume($volumeId = null) 00109 { 00110 $params = array(); 00111 $params['Action'] = 'DescribeVolumes'; 00112 00113 if(is_array($volumeId) && !empty($volumeId)) { 00114 foreach($volumeId as $k=>$name) { 00115 $params['VolumeId.' . ($k+1)] = $name; 00116 } 00117 } elseif($volumeId) { 00118 $params['VolumeId.1'] = $volumeId; 00119 } 00120 00121 $response = $this->sendRequest($params); 00122 00123 $xpath = $response->getXPath(); 00124 $nodes = $xpath->query('//ec2:volumeSet/ec2:item', $response->getDocument()); 00125 00126 $return = array(); 00127 foreach ($nodes as $node) { 00128 $item = array(); 00129 00130 $item['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $node); 00131 $item['size'] = $xpath->evaluate('string(ec2:size/text())', $node); 00132 $item['status'] = $xpath->evaluate('string(ec2:status/text())', $node); 00133 $item['createTime'] = $xpath->evaluate('string(ec2:createTime/text())', $node); 00134 00135 $attachmentSet = $xpath->query('ec2:attachmentSet/ec2:item', $node); 00136 if($attachmentSet->length == 1) { 00137 $_as = $attachmentSet->item(0); 00138 $as = array(); 00139 $as['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $_as); 00140 $as['instanceId'] = $xpath->evaluate('string(ec2:instanceId/text())', $_as); 00141 $as['device'] = $xpath->evaluate('string(ec2:device/text())', $_as); 00142 $as['status'] = $xpath->evaluate('string(ec2:status/text())', $_as); 00143 $as['attachTime'] = $xpath->evaluate('string(ec2:attachTime/text())', $_as); 00144 $item['attachmentSet'] = $as; 00145 } 00146 00147 $return[] = $item; 00148 unset($item, $node); 00149 } 00150 00151 return $return; 00152 } 00153 00154 public function describeAttachedVolumes($instanceId) 00155 { 00156 $volumes = $this->describeVolume(); 00157 00158 $return = array(); 00159 foreach($volumes as $vol) { 00160 if(isset($vol['attachmentSet']) && $vol['attachmentSet']['instanceId'] == $instanceId) { 00161 $return[] = $vol; 00162 } 00163 } 00164 00165 return $return; 00166 } 00167 00176 public function attachVolume($volumeId, $instanceId, $device) 00177 { 00178 $params = array(); 00179 $params['Action'] = 'AttachVolume'; 00180 $params['VolumeId'] = $volumeId; 00181 $params['InstanceId'] = $instanceId; 00182 $params['Device'] = $device; 00183 00184 $response = $this->sendRequest($params); 00185 00186 $xpath = $response->getXPath(); 00187 00188 $return = array(); 00189 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 00190 $return['instanceId'] = $xpath->evaluate('string(//ec2:instanceId/text())'); 00191 $return['device'] = $xpath->evaluate('string(//ec2:device/text())'); 00192 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 00193 $return['attachTime'] = $xpath->evaluate('string(//ec2:attachTime/text())'); 00194 00195 return $return; 00196 } 00197 00212 public function detachVolume($volumeId, $instanceId = null, $device = null, $force = false) 00213 { 00214 $params = array(); 00215 $params['Action'] = 'DetachVolume'; 00216 $params['VolumeId'] = $volumeId; 00217 $params['InstanceId'] = strval($instanceId); 00218 $params['Device'] = strval($device); 00219 $params['Force'] = strval($force); 00220 00221 $response = $this->sendRequest($params); 00222 00223 $xpath = $response->getXPath(); 00224 00225 $return = array(); 00226 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 00227 $return['instanceId'] = $xpath->evaluate('string(//ec2:instanceId/text())'); 00228 $return['device'] = $xpath->evaluate('string(//ec2:device/text())'); 00229 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 00230 $return['attachTime'] = $xpath->evaluate('string(//ec2:attachTime/text())'); 00231 00232 return $return; 00233 } 00234 00241 public function deleteVolume($volumeId) 00242 { 00243 $params = array(); 00244 $params['Action'] = 'DeleteVolume'; 00245 $params['VolumeId'] = $volumeId; 00246 00247 $response = $this->sendRequest($params); 00248 $xpath = $response->getXPath(); 00249 00250 $return = $xpath->evaluate('string(//ec2:return/text())'); 00251 00252 return ($return === "true"); 00253 } 00254 00262 public function createSnapshot($volumeId) 00263 { 00264 $params = array(); 00265 $params['Action'] = 'CreateSnapshot'; 00266 $params['VolumeId'] = $volumeId; 00267 00268 $response = $this->sendRequest($params); 00269 00270 $xpath = $response->getXPath(); 00271 00272 $return = array(); 00273 $return['snapshotId'] = $xpath->evaluate('string(//ec2:snapshotId/text())'); 00274 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 00275 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 00276 $return['startTime'] = $xpath->evaluate('string(//ec2:startTime/text())'); 00277 $return['progress'] = $xpath->evaluate('string(//ec2:progress/text())'); 00278 00279 return $return; 00280 } 00281 00288 public function describeSnapshot($snapshotId = null) 00289 { 00290 $params = array(); 00291 $params['Action'] = 'DescribeSnapshots'; 00292 00293 if(is_array($snapshotId) && !empty($snapshotId)) { 00294 foreach($snapshotId as $k=>$name) { 00295 $params['SnapshotId.' . ($k+1)] = $name; 00296 } 00297 } elseif($snapshotId) { 00298 $params['SnapshotId.1'] = $snapshotId; 00299 } 00300 00301 $response = $this->sendRequest($params); 00302 00303 $xpath = $response->getXPath(); 00304 $nodes = $xpath->query('//ec2:snapshotSet/ec2:item', $response->getDocument()); 00305 00306 $return = array(); 00307 foreach ($nodes as $node) { 00308 $item = array(); 00309 00310 $item['snapshotId'] = $xpath->evaluate('string(ec2:snapshotId/text())', $node); 00311 $item['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $node); 00312 $item['status'] = $xpath->evaluate('string(ec2:status/text())', $node); 00313 $item['startTime'] = $xpath->evaluate('string(ec2:startTime/text())', $node); 00314 $item['progress'] = $xpath->evaluate('string(ec2:progress/text())', $node); 00315 00316 $return[] = $item; 00317 unset($item, $node); 00318 } 00319 00320 return $return; 00321 } 00322 00329 public function deleteSnapshot($snapshotId) 00330 { 00331 $params = array(); 00332 $params['Action'] = 'DeleteSnapshot'; 00333 $params['SnapshotId'] = $snapshotId; 00334 00335 $response = $this->sendRequest($params); 00336 00337 $xpath = $response->getXPath(); 00338 $return = $xpath->evaluate('string(//ec2:return/text())'); 00339 00340 return ($return === "true"); 00341 } 00342 }