in syndicate/connection/ec2_connection.py [0:0]
def launch_instance(self, image_id, instance_type,
security_groups_names=None,
security_group_ids=None,
iam_instance_profile=None,
name=None, key_name=None,
user_data=None, tags=None,
subnet_id=None, availability_zone=None):
tags = tags or []
if iam_instance_profile:
if not iam_instance_profile.get('Arn') \
and not iam_instance_profile.get('Name'):
raise AssertionError('Provided instance profile {0}'
'is not well-formed. '
'Arn or Name nodes required.'
.format(iam_instance_profile))
if name:
tags.append({
'Key': 'Name',
'Value': name
})
instance_parameters = {
'ImageId': image_id,
'InstanceType': instance_type,
'MinCount': 1,
'MaxCount': 1
}
if tags:
instance_parameters['TagSpecifications'] = [{
'ResourceType': 'instance',
'Tags': tags
}]
if availability_zone:
instance_parameters['Placement'] = {
'AvailabilityZone': availability_zone
}
if key_name:
instance_parameters['KeyName'] = key_name
if user_data:
instance_parameters['UserData'] = user_data
if iam_instance_profile:
instance_parameters['IamInstanceProfile'] = iam_instance_profile
if subnet_id:
instance_parameters['SubnetId'] = subnet_id
if security_groups_names:
instance_parameters['SecurityGroups'] = security_groups_names
if security_group_ids:
instance_parameters['SecurityGroupIds'] = security_group_ids
response = self.client.run_instances(**instance_parameters)
# always launch only one instance
launched_instances = response['Instances']
if len(launched_instances) < 1:
return 'No instances launched'
else:
return launched_instances[0]