Viewing file: Image.php (14.34 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Service_Amazon * @subpackage Ec2 * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Image.php 16971 2009-07-22 18:05:45Z mikaelkael $ */
require_once 'Zend/Service/Amazon/Ec2/Abstract.php';
/** * An Amazon EC2 interface to register, describe and deregister Amamzon Machine Instances (AMI) * * @category Zend * @package Zend_Service_Amazon * @subpackage Ec2 * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Service_Amazon_Ec2_Image extends Zend_Service_Amazon_Ec2_Abstract { /** * Registers an AMI with Amazon EC2. Images must be registered before * they can be launched. * * Each AMI is associated with an unique ID which is provided by the Amazon * EC2 service through the RegisterImage operation. During registration, Amazon * EC2 retrieves the specified image manifest from Amazon S3 and verifies that * the image is owned by the user registering the image. * * The image manifest is retrieved once and stored within the Amazon EC2. * Any modifications to an image in Amazon S3 invalidates this registration. * If you make changes to an image, deregister the previous image and register * the new image. For more information, see DeregisterImage. * * @param string $imageLocation Full path to your AMI manifest in Amazon S3 storage. * @return string The ami fro the newly registred image; */ public function register($imageLocation) { $params = array(); $params['Action'] = 'RegisterImage'; $params['ImageLocation']= $imageLocation;
$response = $this->sendRequest($params); $xpath = $response->getXPath();
$amiId = $xpath->evaluate('string(//ec2:imageId/text())');
return $amiId; }
/** * Returns information about AMIs, AKIs, and ARIs available to the user. * Information returned includes image type, product codes, architecture, * and kernel and RAM disk IDs. Images available to the user include public * images available for any user to launch, private images owned by the user * making the request, and private images owned by other users for which the * user has explicit launch permissions. * * Launch permissions fall into three categories: * public: The owner of the AMI granted launch permissions for the AMI * to the all group. All users have launch permissions for these AMIs. * explicit: The owner of the AMI granted launch permissions to a specific user. * implicit: A user has implicit launch permissions for all AMIs he or she owns. * * The list of AMIs returned can be modified by specifying AMI IDs, AMI owners, * or users with launch permissions. If no options are specified, Amazon EC2 returns * all AMIs for which the user has launch permissions. * * If you specify one or more AMI IDs, only AMIs that have the specified IDs are returned. * If you specify an invalid AMI ID, a fault is returned. If you specify an AMI ID for which * you do not have access, it will not be included in the returned results. * * If you specify one or more AMI owners, only AMIs from the specified owners and for * which you have access are returned. The results can include the account IDs of the * specified owners, amazon for AMIs owned by Amazon or self for AMIs that you own. * * If you specify a list of executable users, only users that have launch permissions * for the AMIs are returned. You can specify account IDs (if you own the AMI(s)), self * for AMIs for which you own or have explicit permissions, or all for public AMIs. * * @param string|array $imageId A list of image descriptions * @param string|array $owner Owners of AMIs to describe. * @param string|array $executableBy AMIs for which specified users have access. * @return array */ public function describe($imageId = null, $owner = null, $executableBy = null) { $params = array(); $params['Action'] = 'DescribeImages';
if(is_array($imageId) && !empty($imageId)) { foreach($imageId as $k=>$name) { $params['ImageId.' . ($k+1)] = $name; } } elseif($imageId) { $params['ImageId.1'] = $imageId; }
if(is_array($owner) && !empty($owner)) { foreach($owner as $k=>$name) { $params['Owner.' . ($k+1)] = $name; } } elseif($owner) { $params['Owner.1'] = $owner; }
if(is_array($executableBy) && !empty($executableBy)) { foreach($executableBy as $k=>$name) { $params['ExecutableBy.' . ($k+1)] = $name; } } elseif($executableBy) { $params['ExecutableBy.1'] = $executableBy; }
$response = $this->sendRequest($params);
$xpath = $response->getXPath(); $nodes = $xpath->query('//ec2:imagesSet/ec2:item');
$return = array(); foreach ($nodes as $node) { $item = array();
$item['imageId'] = $xpath->evaluate('string(ec2:imageId/text())', $node); $item['imageLocation'] = $xpath->evaluate('string(ec2:imageLocation/text())', $node); $item['imageState'] = $xpath->evaluate('string(ec2:imageState/text())', $node); $item['imageOwnerId'] = $xpath->evaluate('string(ec2:imageOwnerId/text())', $node); $item['isPublic'] = $xpath->evaluate('string(ec2:isPublic/text())', $node); $item['architecture'] = $xpath->evaluate('string(ec2:architecture/text())', $node); $item['imageType'] = $xpath->evaluate('string(ec2:imageType/text())', $node); $item['kernelId'] = $xpath->evaluate('string(ec2:kernelId/text())', $node); $item['ramdiskId'] = $xpath->evaluate('string(ec2:ramdiskId/text())', $node); $item['platform'] = $xpath->evaluate('string(ec2:platform/text())', $node);
$return[] = $item; unset($item, $node); }
return $return; }
/** * Deregisters an AMI. Once deregistered, instances of the AMI can no longer be launched. * * @param string $imageId Unique ID of a machine image, returned by a call * to RegisterImage or DescribeImages. * @return boolean */ public function deregister($imageId) { $params = array(); $params['Action'] = 'DeregisterImage'; $params['ImageId'] = $imageId;
$response = $this->sendRequest($params); $xpath = $response->getXPath();
$return = $xpath->evaluate('string(//ec2:return/text())');
return ($return === "true"); }
/** * Modifies an attribute of an AMI. * * Valid Attributes: * launchPermission: Controls who has permission to launch the AMI. Launch permissions * can be granted to specific users by adding userIds. * To make the AMI public, add the all group. * productCodes: Associates a product code with AMIs. This allows developers to * charge users for using AMIs. The user must be signed up for the * product before they can launch the AMI. This is a write once attribute; * after it is set, it cannot be changed or removed. * * @param string $imageId AMI ID to modify. * @param string $attribute Specifies the attribute to modify. See the preceding * attributes table for supported attributes. * @param string $operationType Specifies the operation to perform on the attribute. * See the preceding attributes table for supported operations for attributes. * Valid Values: add | remove * Required for launchPermssion Attribute * * @param string|array $userId User IDs to add to or remove from the launchPermission attribute. * Required for launchPermssion Attribute * @param string|array $userGroup User groups to add to or remove from the launchPermission attribute. * Currently, the all group is available, which will make it a public AMI. * Required for launchPermssion Attribute * @param string $productCode Attaches a product code to the AMI. Currently only one product code * can be associated with an AMI. Once set, the product code cannot be changed or reset. * Required for productCodes Attribute * @return boolean */ public function modifyAttribute($imageId, $attribute, $operationType = 'add', $userId = null, $userGroup = null, $productCode = null) { $params = array(); $params['Action'] = 'ModifyImageAttribute'; $parmas['ImageId'] = $imageId; $params['Attribute'] = $attribute;
switch($attribute) { case 'launchPermission': // break left out case 'launchpermission': $params['Attribute'] = 'launchPermission'; $params['OperationType'] = $operationType;
if(is_array($userId) && !empty($userId)) { foreach($userId as $k=>$name) { $params['UserId.' . ($k+1)] = $name; } } elseif($userId) { $params['UserId.1'] = $userId; }
if(is_array($userGroup) && !empty($userGroup)) { foreach($userGroup as $k=>$name) { $params['UserGroup.' . ($k+1)] = $name; } } elseif($userGroup) { $params['UserGroup.1'] = $userGroup; }
break; case 'productCodes': // break left out case 'productcodes': $params['Attribute'] = 'productCodes'; $params['ProductCode.1'] = $productCode; break; default: require_once 'Zend/Service/Amazon/Ec2/Exception.php'; throw new Zend_Service_Amazon_Ec2_Exception('Invalid Attribute Passed In. Valid Image Attributes are launchPermission and productCode.'); break; }
$response = $this->sendRequest($params); $xpath = $response->getXPath();
$return = $xpath->evaluate('string(//ec2:return/text())');
return ($return === "true"); }
/** * Returns information about an attribute of an AMI. Only one attribute can be specified per call. * * @param string $imageId ID of the AMI for which an attribute will be described. * @param string $attribute Specifies the attribute to describe. Valid Attributes are * launchPermission, productCodes */ public function describeAttribute($imageId, $attribute) { $params = array(); $params['Action'] = 'DescribeImageAttribute'; $params['ImageId'] = $imageId; $params['Attribute'] = $attribute;
$response = $this->sendRequest($params); $xpath = $response->getXPath();
$return = array(); $return['imageId'] = $xpath->evaluate('string(//ec2:imageId/text())');
// check for launchPermission if($attribute == 'launchPermission') { $lPnodes = $xpath->query('//ec2:launchPermission/ec2:item');
if($lPnodes->length > 0) { $return['launchPermission'] = array(); foreach($lPnodes as $node) { $return['launchPermission'][] = $xpath->evaluate('string(ec2:userId/text())', $node); } } }
// check for product codes if($attribute == 'productCodes') { $pCnodes = $xpath->query('//ec2:productCodes/ec2:item'); if($pCnodes->length > 0) { $return['productCodes'] = array(); foreach($pCnodes as $node) { $return['productCodes'][] = $xpath->evaluate('string(ec2:productCode/text())', $node); } } }
return $return;
}
/** * Resets an attribute of an AMI to its default value. The productCodes attribute cannot be reset * * @param string $imageId ID of the AMI for which an attribute will be reset. * @param String $attribute Specifies the attribute to reset. Currently, only launchPermission is supported. * In the case of launchPermission, all public and explicit launch permissions for * the AMI are revoked. * @return boolean */ public function resetAttribute($imageId, $attribute) { $params = array(); $params['Action'] = 'ResetImageAttribute'; $params['ImageId'] = $imageId; $params['Attribute'] = $attribute;
$response = $this->sendRequest($params); $xpath = $response->getXPath();
$return = $xpath->evaluate('string(//ec2:return/text())');
return ($return === "true"); } }
|