Allow passing security groups by ID when creating instances
This commit is contained in:
parent
b244457c4f
commit
745368242e
@ -107,7 +107,10 @@ class InstanceBackend(object):
|
||||
new_reservation = Reservation()
|
||||
new_reservation.id = random_reservation_id()
|
||||
|
||||
security_groups = [self.get_security_group_from_name(name) for name in security_group_names]
|
||||
security_groups = [self.get_security_group_from_name(name)
|
||||
for name in security_group_names]
|
||||
security_groups.extend(self.get_security_group_from_id(sg_id)
|
||||
for sg_id in kwargs.pop("security_group_ids", []))
|
||||
for index in range(count):
|
||||
new_instance = Instance(
|
||||
image_id,
|
||||
|
@ -9,7 +9,8 @@ from moto.ec2.exceptions import InvalidIdError
|
||||
|
||||
class InstanceResponse(BaseResponse):
|
||||
def _get_multi_param(self, param_prefix):
|
||||
return [value[0] for key, value in self.querystring.items() if key.startswith(param_prefix)]
|
||||
return [value[0] for key, value in self.querystring.items()
|
||||
if key.startswith(param_prefix + ".")]
|
||||
|
||||
def describe_instances(self):
|
||||
instance_ids = instance_ids_from_querystring(self.querystring)
|
||||
@ -33,13 +34,14 @@ class InstanceResponse(BaseResponse):
|
||||
image_id = self.querystring.get('ImageId')[0]
|
||||
user_data = self.querystring.get('UserData')
|
||||
security_group_names = self._get_multi_param('SecurityGroup')
|
||||
security_group_ids = self._get_multi_param('SecurityGroupId')
|
||||
instance_type = self.querystring.get("InstanceType", ["m1.small"])[0]
|
||||
subnet_id = self.querystring.get("SubnetId", [None])[0]
|
||||
key_name = self.querystring.get("KeyName", [None])[0]
|
||||
new_reservation = ec2_backend.add_instances(
|
||||
image_id, min_count, user_data, security_group_names,
|
||||
instance_type=instance_type, subnet_id=subnet_id,
|
||||
key_name=key_name)
|
||||
key_name=key_name, security_group_ids=security_group_ids)
|
||||
template = Template(EC2_RUN_INSTANCES)
|
||||
return template.render(reservation=new_reservation)
|
||||
|
||||
|
@ -173,11 +173,25 @@ def test_user_data_with_run_instance():
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_run_instance_with_security_group():
|
||||
def test_run_instance_with_security_group_name():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
group = conn.create_security_group('group1', "some description")
|
||||
|
||||
reservation = conn.run_instances('ami-1234abcd', security_groups=['group1'])
|
||||
reservation = conn.run_instances('ami-1234abcd',
|
||||
security_groups=['group1'])
|
||||
instance = reservation.instances[0]
|
||||
|
||||
instance.groups[0].id.should.equal(group.id)
|
||||
instance.groups[0].name.should.equal("group1")
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_run_instance_with_security_group_id():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
group = conn.create_security_group('group1', "some description")
|
||||
|
||||
reservation = conn.run_instances('ami-1234abcd',
|
||||
security_group_ids=[group.id])
|
||||
instance = reservation.instances[0]
|
||||
|
||||
instance.groups[0].id.should.equal(group.id)
|
||||
|
Loading…
Reference in New Issue
Block a user