allow passing user data to run_instances
This commit is contained in:
parent
d42a27b3b3
commit
9f19662d1c
@ -16,10 +16,29 @@ from .utils import (
|
||||
|
||||
|
||||
class Instance(BotoInstance):
|
||||
def __init__(self):
|
||||
self._state_name = None
|
||||
self._state_code = None
|
||||
def __init__(self, image_id, user_data):
|
||||
super(Instance, self).__init__()
|
||||
self.id = random_instance_id()
|
||||
self.image_id = image_id
|
||||
self._state_name = "pending"
|
||||
self._state_code = 0
|
||||
self.user_data = user_data
|
||||
|
||||
def start(self):
|
||||
self._state_name = "pending"
|
||||
self._state_code = 0
|
||||
|
||||
def stop(self):
|
||||
self._state_name = "stopping"
|
||||
self._state_code = 64
|
||||
|
||||
def terminate(self):
|
||||
self._state_name = "shutting-down"
|
||||
self._state_code = 32
|
||||
|
||||
def reboot(self):
|
||||
self._state_name = "pending"
|
||||
self._state_code = 0
|
||||
|
||||
|
||||
class InstanceBackend(object):
|
||||
@ -33,15 +52,14 @@ class InstanceBackend(object):
|
||||
if instance.id == instance_id:
|
||||
return instance
|
||||
|
||||
def add_instances(self, image_id, count):
|
||||
def add_instances(self, image_id, count, user_data):
|
||||
new_reservation = Reservation()
|
||||
new_reservation.id = random_reservation_id()
|
||||
for index in range(count):
|
||||
new_instance = Instance()
|
||||
new_instance.id = random_instance_id()
|
||||
new_instance.image_id = image_id
|
||||
new_instance._state_name = "pending"
|
||||
new_instance._state_code = 0
|
||||
new_instance = Instance(
|
||||
image_id,
|
||||
user_data,
|
||||
)
|
||||
new_reservation.instances.append(new_instance)
|
||||
self.reservations[new_reservation.id] = new_reservation
|
||||
return new_reservation
|
||||
@ -50,8 +68,7 @@ class InstanceBackend(object):
|
||||
started_instances = []
|
||||
for instance in self.all_instances():
|
||||
if instance.id in instance_ids:
|
||||
instance._state_name = "pending"
|
||||
instance._state_code = 0
|
||||
instance.start()
|
||||
started_instances.append(instance)
|
||||
|
||||
return started_instances
|
||||
@ -60,8 +77,7 @@ class InstanceBackend(object):
|
||||
stopped_instances = []
|
||||
for instance in self.all_instances():
|
||||
if instance.id in instance_ids:
|
||||
instance._state_name = "stopping"
|
||||
instance._state_code = 64
|
||||
instance.stop()
|
||||
stopped_instances.append(instance)
|
||||
|
||||
return stopped_instances
|
||||
@ -70,8 +86,7 @@ class InstanceBackend(object):
|
||||
terminated_instances = []
|
||||
for instance in self.all_instances():
|
||||
if instance.id in instance_ids:
|
||||
instance._state_name = "shutting-down"
|
||||
instance._state_code = 32
|
||||
instance.terminate()
|
||||
terminated_instances.append(instance)
|
||||
|
||||
return terminated_instances
|
||||
@ -80,9 +95,7 @@ class InstanceBackend(object):
|
||||
rebooted_instances = []
|
||||
for instance in self.all_instances():
|
||||
if instance.id in instance_ids:
|
||||
# TODO double check instances go to pending when reboot
|
||||
instance._state_name = "pending"
|
||||
instance._state_code = 0
|
||||
instance.reboot()
|
||||
rebooted_instances.append(instance)
|
||||
|
||||
return rebooted_instances
|
||||
|
@ -13,7 +13,8 @@ class InstanceResponse(object):
|
||||
def run_instances(self):
|
||||
min_count = int(self.querystring.get('MinCount', ['1'])[0])
|
||||
image_id = self.querystring.get('ImageId')[0]
|
||||
new_reservation = ec2_backend.add_instances(image_id, min_count)
|
||||
user_data = self.querystring.get('UserData')
|
||||
new_reservation = ec2_backend.add_instances(image_id, min_count, user_data)
|
||||
template = Template(EC2_RUN_INSTANCES)
|
||||
return template.render(reservation=new_reservation)
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
import base64
|
||||
|
||||
import boto
|
||||
from boto.ec2.instance import Reservation, InstanceAttribute
|
||||
import sure # flake8: noqa
|
||||
@ -98,3 +100,16 @@ def test_instance_attribute_user_data():
|
||||
instance_attribute = instance.get_attribute("userData")
|
||||
instance_attribute.should.be.a(InstanceAttribute)
|
||||
instance_attribute.get("userData").should.equal("this is my user data")
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_user_data_with_run_instance():
|
||||
user_data = "some user data"
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd', user_data=user_data)
|
||||
instance = reservation.instances[0]
|
||||
|
||||
instance_attribute = instance.get_attribute("userData")
|
||||
instance_attribute.should.be.a(InstanceAttribute)
|
||||
decoded_user_data = base64.decodestring(instance_attribute.get("userData"))
|
||||
decoded_user_data.should.equal("some user data")
|
||||
|
Loading…
Reference in New Issue
Block a user