Index: boto/ec2/connection.py |
diff --git a/boto/ec2/connection.py b/boto/ec2/connection.py |
index 1e492594d6dd61118c83c27e25d3298a2d22089c..f94f7f2136de9bd57ae13256537d42aa76e0cf65 100644 |
--- a/boto/ec2/connection.py |
+++ b/boto/ec2/connection.py |
@@ -57,7 +57,7 @@ from boto.exception import EC2ResponseError |
class EC2Connection(AWSQueryConnection): |
- APIVersion = boto.config.get('Boto', 'ec2_version', '2011-01-01') |
+ APIVersion = boto.config.get('Boto', 'ec2_version', '2011-11-01') |
DefaultRegionName = boto.config.get('Boto', 'ec2_region_name', 'us-east-1') |
DefaultRegionEndpoint = boto.config.get('Boto', 'ec2_region_endpoint', |
'ec2.amazonaws.com') |
@@ -71,9 +71,6 @@ class EC2Connection(AWSQueryConnection): |
api_version=None, security_token=None): |
""" |
Init method to create a new connection to EC2. |
- |
- B{Note:} The host argument is overridden by the host specified in the |
- boto configuration file. |
""" |
if not region: |
region = RegionInfo(self, self.DefaultRegionName, |
@@ -455,10 +452,13 @@ class EC2Connection(AWSQueryConnection): |
self.build_list_params(params, instance_ids, 'InstanceId') |
if filters: |
if 'group-id' in filters: |
- warnings.warn("The group-id filter now requires a security " |
- "group identifier (sg-*) instead of a group " |
- "name. To filter by group name use the " |
- "'group-name' filter instead.", UserWarning) |
+ gid = filters.get('group-id') |
+ if not gid.startswith('sg-') or len(gid) != 11: |
+ warnings.warn( |
+ "The group-id filter now requires a security group " |
+ "identifier (sg-*) instead of a group name. To filter " |
+ "by group name use the 'group-name' filter instead.", |
+ UserWarning) |
self.build_filter_params(params, filters) |
return self.get_list('DescribeInstances', params, |
[('item', Reservation)], verb='POST') |
@@ -824,10 +824,13 @@ class EC2Connection(AWSQueryConnection): |
self.build_list_params(params, request_ids, 'SpotInstanceRequestId') |
if filters: |
if 'launch.group-id' in filters: |
- warnings.warn("The 'launch.group-id' filter now requires a " |
- "security group id (sg-*) and no longer supports " |
- "filtering by group name. Please update your " |
- "filters accordingly.", UserWarning) |
+ lgid = filters.get('launch.group-id') |
+ if not lgid.startswith('sg-') or len(lgid) != 11: |
+ warnings.warn( |
+ "The 'launch.group-id' filter now requires a security " |
+ "group id (sg-*) and no longer supports filtering by " |
+ "group name. Please update your filters accordingly.", |
+ UserWarning) |
self.build_filter_params(params, filters) |
return self.get_list('DescribeSpotInstanceRequests', params, |
[('item', SpotInstanceRequest)], verb='POST') |
@@ -1703,8 +1706,11 @@ class EC2Connection(AWSQueryConnection): |
""" |
try: |
return self.get_all_key_pairs(keynames=[keyname])[0] |
- except IndexError: # None of those key pairs available |
- return None |
+ except self.ResponseError, e: |
+ if e.code == 'InvalidKeyPair.NotFound': |
+ return None |
+ else: |
+ raise |
def create_key_pair(self, key_name): |
""" |
@@ -2005,7 +2011,8 @@ class EC2Connection(AWSQueryConnection): |
return self.get_status('AuthorizeSecurityGroupIngress', |
params, verb='POST') |
- def authorize_security_group_egress(group_id, |
+ def authorize_security_group_egress(self, |
+ group_id, |
ip_protocol, |
from_port=None, |
to_port=None, |
@@ -2107,7 +2114,7 @@ class EC2Connection(AWSQueryConnection): |
params['CidrIp'] = cidr_ip |
return self.get_status('RevokeSecurityGroupIngress', params) |
- def revoke_security_group(self, group_name, src_security_group_name=None, |
+ def revoke_security_group(self, group_name=None, src_security_group_name=None, |
src_security_group_owner_id=None, |
ip_protocol=None, from_port=None, to_port=None, |
cidr_ip=None, group_id=None, |
@@ -2153,11 +2160,16 @@ class EC2Connection(AWSQueryConnection): |
group_name, src_security_group_name, |
src_security_group_owner_id) |
params = {} |
- if group_name: |
+ if group_name is not None: |
params['GroupName'] = group_name |
+ if group_id is not None: |
+ params['GroupId'] = group_id |
if src_security_group_name: |
param_name = 'IpPermissions.1.Groups.1.GroupName' |
params[param_name] = src_security_group_name |
+ if src_security_group_group_id: |
+ param_name = 'IpPermissions.1.Groups.1.GroupId' |
+ params[param_name] = src_security_group_group_id |
if src_security_group_owner_id: |
param_name = 'IpPermissions.1.Groups.1.UserId' |
params[param_name] = src_security_group_owner_id |
@@ -2172,6 +2184,59 @@ class EC2Connection(AWSQueryConnection): |
return self.get_status('RevokeSecurityGroupIngress', |
params, verb='POST') |
+ def revoke_security_group_egress(self, |
+ group_id, |
+ ip_protocol, |
+ from_port=None, |
+ to_port=None, |
+ src_group_id=None, |
+ cidr_ip=None): |
+ """ |
+ Remove an existing egress rule from an existing VPC security group. |
+ You need to pass in an ip_protocol, from_port and to_port range only |
+ if the protocol you are using is port-based. You also need to pass in either |
+ a src_group_id or cidr_ip. |
+ |
+ :type group_name: string |
+ :param group_id: The name of the security group you are removing |
+ the rule from. |
+ |
+ :type ip_protocol: string |
+ :param ip_protocol: Either tcp | udp | icmp | -1 |
+ |
+ :type from_port: int |
+ :param from_port: The beginning port number you are disabling |
+ |
+ :type to_port: int |
+ :param to_port: The ending port number you are disabling |
+ |
+ :type src_group_id: src_group_id |
+ :param src_group_id: The source security group you are revoking access to. |
+ |
+ :type cidr_ip: string |
+ :param cidr_ip: The CIDR block you are revoking access to. |
+ See http://goo.gl/Yj5QC |
+ |
+ :rtype: bool |
+ :return: True if successful. |
+ """ |
+ |
+ params = {} |
+ if group_id: |
+ params['GroupId'] = group_id |
+ if ip_protocol: |
+ params['IpPermissions.1.IpProtocol'] = ip_protocol |
+ if from_port is not None: |
+ params['IpPermissions.1.FromPort'] = from_port |
+ if to_port is not None: |
+ params['IpPermissions.1.ToPort'] = to_port |
+ if src_group_id is not None: |
+ params['IpPermissions.1.Groups.1.GroupId'] = src_group_id |
+ if cidr_ip: |
+ params['IpPermissions.1.IpRanges.1.CidrIp'] = cidr_ip |
+ return self.get_status('RevokeSecurityGroupEgress', |
+ params, verb='POST') |
+ |
# |
# Regions |
# |