Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: boto/ec2/securitygroup.py

Issue 8386013: Merging in latest boto. (Closed) Base URL: svn://svn.chromium.org/boto
Patch Set: Redoing vendor drop by deleting and then merging. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « boto/ec2/keypair.py ('k') | boto/ec2/snapshot.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ 1 # Copyright (c) 2006-2011 Mitch Garnaat http://garnaat.org/
2 # Copyright (c) 2011, Eucalyptus Systems, Inc.
2 # 3 #
3 # Permission is hereby granted, free of charge, to any person obtaining a 4 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the 5 # copy of this software and associated documentation files (the
5 # "Software"), to deal in the Software without restriction, including 6 # "Software"), to deal in the Software without restriction, including
6 # without limitation the rights to use, copy, modify, merge, publish, dis- 7 # without limitation the rights to use, copy, modify, merge, publish, dis-
7 # tribute, sublicense, and/or sell copies of the Software, and to permit 8 # tribute, sublicense, and/or sell copies of the Software, and to permit
8 # persons to whom the Software is furnished to do so, subject to the fol- 9 # persons to whom the Software is furnished to do so, subject to the fol-
9 # lowing conditions: 10 # lowing conditions:
10 # 11 #
11 # The above copyright notice and this permission notice shall be included 12 # The above copyright notice and this permission notice shall be included
12 # in all copies or substantial portions of the Software. 13 # in all copies or substantial portions of the Software.
13 # 14 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- 16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 17 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE. 21 # IN THE SOFTWARE.
21 22
22 """ 23 """
23 Represents an EC2 Security Group 24 Represents an EC2 Security Group
24 """ 25 """
25 from boto.ec2.ec2object import EC2Object 26 from boto.ec2.ec2object import TaggedEC2Object
26 from boto.exception import BotoClientError 27 from boto.exception import BotoClientError
27 28
28 class SecurityGroup(EC2Object): 29 class SecurityGroup(TaggedEC2Object):
29 30
30 def __init__(self, connection=None, owner_id=None, 31 def __init__(self, connection=None, owner_id=None,
31 name=None, description=None): 32 name=None, description=None, id=None):
32 EC2Object.__init__(self, connection) 33 TaggedEC2Object.__init__(self, connection)
34 self.id = id
33 self.owner_id = owner_id 35 self.owner_id = owner_id
34 self.name = name 36 self.name = name
35 self.description = description 37 self.description = description
36 self.rules = [] 38 self.vpc_id = None
39 self.rules = IPPermissionsList()
40 self.rules_egress = IPPermissionsList()
37 41
38 def __repr__(self): 42 def __repr__(self):
39 return 'SecurityGroup:%s' % self.name 43 return 'SecurityGroup:%s' % self.name
40 44
41 def startElement(self, name, attrs, connection): 45 def startElement(self, name, attrs, connection):
42 if name == 'item': 46 retval = TaggedEC2Object.startElement(self, name, attrs, connection)
43 self.rules.append(IPPermissions(self)) 47 if retval is not None:
44 return self.rules[-1] 48 return retval
49 if name == 'ipPermissions':
50 return self.rules
51 elif name == 'ipPermissionsEgress':
52 return self.rules_egress
45 else: 53 else:
46 return None 54 return None
47 55
48 def endElement(self, name, value, connection): 56 def endElement(self, name, value, connection):
49 if name == 'ownerId': 57 if name == 'ownerId':
50 self.owner_id = value 58 self.owner_id = value
59 elif name == 'groupId':
60 self.id = value
51 elif name == 'groupName': 61 elif name == 'groupName':
52 self.name = value 62 self.name = value
63 elif name == 'vpcId':
64 self.vpc_id = value
53 elif name == 'groupDescription': 65 elif name == 'groupDescription':
54 self.description = value 66 self.description = value
55 elif name == 'ipRanges': 67 elif name == 'ipRanges':
56 pass 68 pass
57 elif name == 'return': 69 elif name == 'return':
58 if value == 'false': 70 if value == 'false':
59 self.status = False 71 self.status = False
60 elif value == 'true': 72 elif value == 'true':
61 self.status = True 73 self.status = True
62 else: 74 else:
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 133
122 :type ip_protocol: string 134 :type ip_protocol: string
123 :param ip_protocol: Either tcp | udp | icmp 135 :param ip_protocol: Either tcp | udp | icmp
124 136
125 :type from_port: int 137 :type from_port: int
126 :param from_port: The beginning port number you are enabling 138 :param from_port: The beginning port number you are enabling
127 139
128 :type to_port: int 140 :type to_port: int
129 :param to_port: The ending port number you are enabling 141 :param to_port: The ending port number you are enabling
130 142
131 :type to_port: string 143 :type cidr_ip: string
132 :param to_port: The CIDR block you are providing access to. 144 :param cidr_ip: The CIDR block you are providing access to.
133 See http://en.wikipedia.org/wiki/Classless_Inter-Domain_ Routing 145 See http://en.wikipedia.org/wiki/Classless_Inter-Domain_ Routing
134 146
135 :type src_group: :class:`boto.ec2.securitygroup.SecurityGroup` or 147 :type src_group: :class:`boto.ec2.securitygroup.SecurityGroup` or
136 :class:`boto.ec2.securitygroup.GroupOrCIDR` 148 :class:`boto.ec2.securitygroup.GroupOrCIDR`
149 :param src_group: The Security Group you are granting access to.
137 150
138 :rtype: bool 151 :rtype: bool
139 :return: True if successful. 152 :return: True if successful.
140 """ 153 """
141 if src_group: 154 if src_group:
142 cidr_ip = None 155 cidr_ip = None
143 src_group_name = src_group.name 156 src_group_name = src_group.name
144 src_group_owner_id = src_group.owner_id 157 src_group_owner_id = src_group.owner_id
145 else: 158 else:
146 src_group_name = None 159 src_group_name = None
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 :return: The new security group. 209 :return: The new security group.
197 """ 210 """
198 if region.name == self.region: 211 if region.name == self.region:
199 raise BotoClientError('Unable to copy to the same Region') 212 raise BotoClientError('Unable to copy to the same Region')
200 conn_params = self.connection.get_params() 213 conn_params = self.connection.get_params()
201 rconn = region.connect(**conn_params) 214 rconn = region.connect(**conn_params)
202 sg = rconn.create_security_group(name or self.name, self.description) 215 sg = rconn.create_security_group(name or self.name, self.description)
203 source_groups = [] 216 source_groups = []
204 for rule in self.rules: 217 for rule in self.rules:
205 grant = rule.grants[0] 218 grant = rule.grants[0]
206 if grant.name: 219 for grant in rule.grants:
207 if grant.name not in source_groups: 220 if grant.name:
208 source_groups.append(grant.name) 221 if grant.name not in source_groups:
209 sg.authorize(None, None, None, None, grant) 222 source_groups.append(grant.name)
210 else: 223 sg.authorize(None, None, None, None, grant)
211 sg.authorize(rule.ip_protocol, rule.from_port, rule.to_port, 224 else:
212 grant.cidr_ip) 225 sg.authorize(rule.ip_protocol, rule.from_port, rule.to_port,
226 grant.cidr_ip)
213 return sg 227 return sg
214 228
215 def instances(self): 229 def instances(self):
230 """
231 Find all of the current instances that are running within this
232 security group.
233
234 :rtype: list of :class:`boto.ec2.instance.Instance`
235 :return: A list of Instance objects
236 """
237 # It would be more efficient to do this with filters now
238 # but not all services that implement EC2 API support filters.
216 instances = [] 239 instances = []
217 rs = self.connection.get_all_instances() 240 rs = self.connection.get_all_instances()
218 for reservation in rs: 241 for reservation in rs:
219 uses_group = [g.id for g in reservation.groups if g.id == self.name] 242 uses_group = [g.name for g in reservation.groups if g.name == self.n ame]
220 if uses_group: 243 if uses_group:
221 instances.extend(reservation.instances) 244 instances.extend(reservation.instances)
222 return instances 245 return instances
223 246
224 class IPPermissions: 247 class IPPermissionsList(list):
248
249 def startElement(self, name, attrs, connection):
250 if name == 'item':
251 self.append(IPPermissions(self))
252 return self[-1]
253 return None
254
255 def endElement(self, name, value, connection):
256 pass
257
258 class IPPermissions(object):
225 259
226 def __init__(self, parent=None): 260 def __init__(self, parent=None):
227 self.parent = parent 261 self.parent = parent
228 self.ip_protocol = None 262 self.ip_protocol = None
229 self.from_port = None 263 self.from_port = None
230 self.to_port = None 264 self.to_port = None
231 self.grants = [] 265 self.grants = []
232 266
233 def __repr__(self): 267 def __repr__(self):
234 return 'IPPermissions:%s(%s-%s)' % (self.ip_protocol, 268 return 'IPPermissions:%s(%s-%s)' % (self.ip_protocol,
(...skipping 16 matching lines...) Expand all
251 setattr(self, name, value) 285 setattr(self, name, value)
252 286
253 def add_grant(self, name=None, owner_id=None, cidr_ip=None): 287 def add_grant(self, name=None, owner_id=None, cidr_ip=None):
254 grant = GroupOrCIDR(self) 288 grant = GroupOrCIDR(self)
255 grant.owner_id = owner_id 289 grant.owner_id = owner_id
256 grant.name = name 290 grant.name = name
257 grant.cidr_ip = cidr_ip 291 grant.cidr_ip = cidr_ip
258 self.grants.append(grant) 292 self.grants.append(grant)
259 return grant 293 return grant
260 294
261 class GroupOrCIDR: 295 class GroupOrCIDR(object):
262 296
263 def __init__(self, parent=None): 297 def __init__(self, parent=None):
264 self.owner_id = None 298 self.owner_id = None
265 self.name = None 299 self.name = None
266 self.cidr_ip = None 300 self.cidr_ip = None
267 301
268 def __repr__(self): 302 def __repr__(self):
269 if self.cidr_ip: 303 if self.cidr_ip:
270 return '%s' % self.cidr_ip 304 return '%s' % self.cidr_ip
271 else: 305 else:
272 return '%s-%s' % (self.name, self.owner_id) 306 return '%s-%s' % (self.name, self.owner_id)
273 307
274 def startElement(self, name, attrs, connection): 308 def startElement(self, name, attrs, connection):
275 return None 309 return None
276 310
277 def endElement(self, name, value, connection): 311 def endElement(self, name, value, connection):
278 if name == 'userId': 312 if name == 'userId':
279 self.owner_id = value 313 self.owner_id = value
280 elif name == 'groupName': 314 elif name == 'groupName':
281 self.name = value 315 self.name = value
282 if name == 'cidrIp': 316 if name == 'cidrIp':
283 self.cidr_ip = value 317 self.cidr_ip = value
284 else: 318 else:
285 setattr(self, name, value) 319 setattr(self, name, value)
286 320
OLDNEW
« no previous file with comments | « boto/ec2/keypair.py ('k') | boto/ec2/snapshot.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698