[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Zend Framework 4 * 5 * LICENSE 6 * 7 * This source file is subject to the new BSD license that is bundled 8 * with this package in the file LICENSE.txt. 9 * It is also available through the world-wide-web at this URL: 10 * http://framework.zend.com/license/new-bsd 11 * If you did not receive a copy of the license and are unable to 12 * obtain it through the world-wide-web, please send an email 13 * to [email protected] so we can send you a copy immediately. 14 * 15 * @category Zend 16 * @package Zend_Service_Amazon 17 * @subpackage Ec2 18 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 19 * @license http://framework.zend.com/license/new-bsd New BSD License 20 * @version $Id$ 21 */ 22 23 /** 24 * @see Zend_Service_Amazon_Ec2_Abstract 25 */ 26 require_once 'Zend/Service/Amazon/Ec2/Abstract.php'; 27 28 /** 29 * An Amazon EC2 interface to create, describe, attach, detach and delete Elastic Block 30 * Storage Volumes and Snaphsots. 31 * 32 * @category Zend 33 * @package Zend_Service_Amazon 34 * @subpackage Ec2 35 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 36 * @license http://framework.zend.com/license/new-bsd New BSD License 37 */ 38 class Zend_Service_Amazon_Ec2_Ebs extends Zend_Service_Amazon_Ec2_Abstract 39 { 40 /** 41 * Creates a new Amazon EBS volume that you can mount from any Amazon EC2 instance. 42 * 43 * You must specify an availability zone when creating a volume. The volume and 44 * any instance to which it attaches must be in the same availability zone. 45 * 46 * @param string $size The size of the volume, in GiB. 47 * @param string $availabilityZone The availability zone in which to create the new volume. 48 * @return array 49 */ 50 public function createNewVolume($size, $availabilityZone) 51 { 52 $params = array(); 53 $params['Action'] = 'CreateVolume'; 54 $params['AvailabilityZone'] = $availabilityZone; 55 $params['Size'] = $size; 56 57 $response = $this->sendRequest($params); 58 $xpath = $response->getXPath(); 59 60 $return = array(); 61 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 62 $return['size'] = $xpath->evaluate('string(//ec2:size/text())'); 63 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 64 $return['createTime'] = $xpath->evaluate('string(//ec2:createTime/text())'); 65 $return['availabilityZone'] = $xpath->evaluate('string(//ec2:availabilityZone/text())'); 66 67 return $return; 68 } 69 70 /** 71 * Creates a new Amazon EBS volume that you can mount from any Amazon EC2 instance. 72 * 73 * You must specify an availability zone when creating a volume. The volume and 74 * any instance to which it attaches must be in the same availability zone. 75 * 76 * @param string $snapshotId The snapshot from which to create the new volume. 77 * @param string $availabilityZone The availability zone in which to create the new volume. 78 * @return array 79 */ 80 public function createVolumeFromSnapshot($snapshotId, $availabilityZone) 81 { 82 $params = array(); 83 $params['Action'] = 'CreateVolume'; 84 $params['AvailabilityZone'] = $availabilityZone; 85 $params['SnapshotId'] = $snapshotId; 86 87 $response = $this->sendRequest($params); 88 $xpath = $response->getXPath(); 89 90 $return = array(); 91 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 92 $return['size'] = $xpath->evaluate('string(//ec2:size/text())'); 93 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 94 $return['createTime'] = $xpath->evaluate('string(//ec2:createTime/text())'); 95 $return['availabilityZone'] = $xpath->evaluate('string(//ec2:availabilityZone/text())'); 96 $return['snapshotId'] = $xpath->evaluate('string(//ec2:snapshotId/text())'); 97 98 return $return; 99 } 100 101 /** 102 * Lists one or more Amazon EBS volumes that you own, If you do not 103 * specify any volumes, Amazon EBS returns all volumes that you own. 104 * 105 * @param string|array $volumeId The ID or array of ID's of the volume(s) to list 106 * @return array 107 */ 108 public function describeVolume($volumeId = null) 109 { 110 $params = array(); 111 $params['Action'] = 'DescribeVolumes'; 112 113 if(is_array($volumeId) && !empty($volumeId)) { 114 foreach($volumeId as $k=>$name) { 115 $params['VolumeId.' . ($k+1)] = $name; 116 } 117 } elseif($volumeId) { 118 $params['VolumeId.1'] = $volumeId; 119 } 120 121 $response = $this->sendRequest($params); 122 123 $xpath = $response->getXPath(); 124 $nodes = $xpath->query('//ec2:volumeSet/ec2:item', $response->getDocument()); 125 126 $return = array(); 127 foreach ($nodes as $node) { 128 $item = array(); 129 130 $item['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $node); 131 $item['size'] = $xpath->evaluate('string(ec2:size/text())', $node); 132 $item['status'] = $xpath->evaluate('string(ec2:status/text())', $node); 133 $item['createTime'] = $xpath->evaluate('string(ec2:createTime/text())', $node); 134 135 $attachmentSet = $xpath->query('ec2:attachmentSet/ec2:item', $node); 136 if($attachmentSet->length == 1) { 137 $_as = $attachmentSet->item(0); 138 $as = array(); 139 $as['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $_as); 140 $as['instanceId'] = $xpath->evaluate('string(ec2:instanceId/text())', $_as); 141 $as['device'] = $xpath->evaluate('string(ec2:device/text())', $_as); 142 $as['status'] = $xpath->evaluate('string(ec2:status/text())', $_as); 143 $as['attachTime'] = $xpath->evaluate('string(ec2:attachTime/text())', $_as); 144 $item['attachmentSet'] = $as; 145 } 146 147 $return[] = $item; 148 unset($item, $node); 149 } 150 151 return $return; 152 } 153 154 public function describeAttachedVolumes($instanceId) 155 { 156 $volumes = $this->describeVolume(); 157 158 $return = array(); 159 foreach($volumes as $vol) { 160 if(isset($vol['attachmentSet']) && $vol['attachmentSet']['instanceId'] == $instanceId) { 161 $return[] = $vol; 162 } 163 } 164 165 return $return; 166 } 167 168 /** 169 * Attaches an Amazon EBS volume to an instance 170 * 171 * @param string $volumeId The ID of the Amazon EBS volume 172 * @param string $instanceId The ID of the instance to which the volume attaches 173 * @param string $device Specifies how the device is exposed to the instance (e.g., /dev/sdh). 174 * @return array 175 */ 176 public function attachVolume($volumeId, $instanceId, $device) 177 { 178 $params = array(); 179 $params['Action'] = 'AttachVolume'; 180 $params['VolumeId'] = $volumeId; 181 $params['InstanceId'] = $instanceId; 182 $params['Device'] = $device; 183 184 $response = $this->sendRequest($params); 185 186 $xpath = $response->getXPath(); 187 188 $return = array(); 189 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 190 $return['instanceId'] = $xpath->evaluate('string(//ec2:instanceId/text())'); 191 $return['device'] = $xpath->evaluate('string(//ec2:device/text())'); 192 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 193 $return['attachTime'] = $xpath->evaluate('string(//ec2:attachTime/text())'); 194 195 return $return; 196 } 197 198 /** 199 * Detaches an Amazon EBS volume from an instance 200 * 201 * @param string $volumeId The ID of the Amazon EBS volume 202 * @param string $instanceId The ID of the instance from which the volume will detach 203 * @param string $device The device name 204 * @param boolean $force Forces detachment if the previous detachment attempt did not occur cleanly 205 * (logging into an instance, unmounting the volume, and detaching normally). 206 * This option can lead to data loss or a corrupted file system. Use this option 207 * only as a last resort to detach an instance from a failed instance. The 208 * instance will not have an opportunity to flush file system caches nor 209 * file system meta data. 210 * @return array 211 */ 212 public function detachVolume($volumeId, $instanceId = null, $device = null, $force = false) 213 { 214 $params = array(); 215 $params['Action'] = 'DetachVolume'; 216 $params['VolumeId'] = $volumeId; 217 $params['InstanceId'] = strval($instanceId); 218 $params['Device'] = strval($device); 219 $params['Force'] = strval($force); 220 221 $response = $this->sendRequest($params); 222 223 $xpath = $response->getXPath(); 224 225 $return = array(); 226 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 227 $return['instanceId'] = $xpath->evaluate('string(//ec2:instanceId/text())'); 228 $return['device'] = $xpath->evaluate('string(//ec2:device/text())'); 229 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 230 $return['attachTime'] = $xpath->evaluate('string(//ec2:attachTime/text())'); 231 232 return $return; 233 } 234 235 /** 236 * Deletes an Amazon EBS volume 237 * 238 * @param string $volumeId The ID of the volume to delete 239 * @return boolean 240 */ 241 public function deleteVolume($volumeId) 242 { 243 $params = array(); 244 $params['Action'] = 'DeleteVolume'; 245 $params['VolumeId'] = $volumeId; 246 247 $response = $this->sendRequest($params); 248 $xpath = $response->getXPath(); 249 250 $return = $xpath->evaluate('string(//ec2:return/text())'); 251 252 return ($return === "true"); 253 } 254 255 /** 256 * Creates a snapshot of an Amazon EBS volume and stores it in Amazon S3. You can use snapshots for backups, 257 * to launch instances from identical snapshots, and to save data before shutting down an instance 258 * 259 * @param string $volumeId The ID of the Amazon EBS volume to snapshot 260 * @return array 261 */ 262 public function createSnapshot($volumeId) 263 { 264 $params = array(); 265 $params['Action'] = 'CreateSnapshot'; 266 $params['VolumeId'] = $volumeId; 267 268 $response = $this->sendRequest($params); 269 270 $xpath = $response->getXPath(); 271 272 $return = array(); 273 $return['snapshotId'] = $xpath->evaluate('string(//ec2:snapshotId/text())'); 274 $return['volumeId'] = $xpath->evaluate('string(//ec2:volumeId/text())'); 275 $return['status'] = $xpath->evaluate('string(//ec2:status/text())'); 276 $return['startTime'] = $xpath->evaluate('string(//ec2:startTime/text())'); 277 $return['progress'] = $xpath->evaluate('string(//ec2:progress/text())'); 278 279 return $return; 280 } 281 282 /** 283 * Describes the status of Amazon EBS snapshots 284 * 285 * @param string|array $snapshotId The ID or arry of ID's of the Amazon EBS snapshot 286 * @return array 287 */ 288 public function describeSnapshot($snapshotId = null) 289 { 290 $params = array(); 291 $params['Action'] = 'DescribeSnapshots'; 292 293 if(is_array($snapshotId) && !empty($snapshotId)) { 294 foreach($snapshotId as $k=>$name) { 295 $params['SnapshotId.' . ($k+1)] = $name; 296 } 297 } elseif($snapshotId) { 298 $params['SnapshotId.1'] = $snapshotId; 299 } 300 301 $response = $this->sendRequest($params); 302 303 $xpath = $response->getXPath(); 304 $nodes = $xpath->query('//ec2:snapshotSet/ec2:item', $response->getDocument()); 305 306 $return = array(); 307 foreach ($nodes as $node) { 308 $item = array(); 309 310 $item['snapshotId'] = $xpath->evaluate('string(ec2:snapshotId/text())', $node); 311 $item['volumeId'] = $xpath->evaluate('string(ec2:volumeId/text())', $node); 312 $item['status'] = $xpath->evaluate('string(ec2:status/text())', $node); 313 $item['startTime'] = $xpath->evaluate('string(ec2:startTime/text())', $node); 314 $item['progress'] = $xpath->evaluate('string(ec2:progress/text())', $node); 315 316 $return[] = $item; 317 unset($item, $node); 318 } 319 320 return $return; 321 } 322 323 /** 324 * Deletes a snapshot of an Amazon EBS volume that is stored in Amazon S3 325 * 326 * @param string $snapshotId The ID of the Amazon EBS snapshot to delete 327 * @return boolean 328 */ 329 public function deleteSnapshot($snapshotId) 330 { 331 $params = array(); 332 $params['Action'] = 'DeleteSnapshot'; 333 $params['SnapshotId'] = $snapshotId; 334 335 $response = $this->sendRequest($params); 336 337 $xpath = $response->getXPath(); 338 $return = $xpath->evaluate('string(//ec2:return/text())'); 339 340 return ($return === "true"); 341 } 342 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |