in infrastructure-provisioning/src/general/lib/aws/actions_lib.py [0:0]
def create_instance(definitions, instance_tag, primary_disk_size=12):
try:
ec2 = boto3.resource('ec2')
security_groups_ids = []
for chunk in definitions.security_group_ids.split(','):
security_groups_ids.append(chunk.strip())
user_data = ''
if definitions.user_data_file != '':
try:
with open(definitions.user_data_file, 'r') as f:
for line in f:
user_data = user_data + line
f.close()
except:
print("Error reading user-data file")
if definitions.instance_class == 'notebook':
instances = ec2.create_instances(ImageId=definitions.ami_id, MinCount=1, MaxCount=1,
BlockDeviceMappings=[
{
"DeviceName": "/dev/sda1",
"Ebs":
{
"VolumeSize": int(primary_disk_size)
}
},
{
"DeviceName": "/dev/sdb",
"Ebs":
{
"VolumeSize": int(definitions.instance_disk_size)
}
}],
KeyName=definitions.key_name,
SecurityGroupIds=security_groups_ids,
InstanceType=definitions.instance_type,
SubnetId=definitions.subnet_id,
IamInstanceProfile={'Name': definitions.iam_profile},
UserData=user_data)
elif definitions.instance_class == 'dataengine':
instances = ec2.create_instances(ImageId=definitions.ami_id, MinCount=1, MaxCount=1,
BlockDeviceMappings=[
{
"DeviceName": "/dev/sda1",
"Ebs":
{
"VolumeSize": int(primary_disk_size)
}
}],
KeyName=definitions.key_name,
SecurityGroupIds=security_groups_ids,
InstanceType=definitions.instance_type,
SubnetId=definitions.subnet_id,
IamInstanceProfile={'Name': definitions.iam_profile},
UserData=user_data)
elif definitions.instance_class == 'ssn':
get_iam_profile(definitions.iam_profile)
instances = ec2.create_instances(ImageId=definitions.ami_id, MinCount=1, MaxCount=1,
BlockDeviceMappings=[
{
"DeviceName": "/dev/sda1",
"Ebs":
{
"VolumeSize": int(primary_disk_size)
}
}],
KeyName=definitions.key_name,
SecurityGroupIds=security_groups_ids,
InstanceType=definitions.instance_type,
SubnetId=definitions.subnet_id,
IamInstanceProfile={'Name': definitions.iam_profile},
UserData=user_data)
else:
get_iam_profile(definitions.iam_profile)
instances = ec2.create_instances(ImageId=definitions.ami_id, MinCount=1, MaxCount=1,
KeyName=definitions.key_name,
SecurityGroupIds=security_groups_ids,
InstanceType=definitions.instance_type,
SubnetId=definitions.subnet_id,
IamInstanceProfile={'Name': definitions.iam_profile},
UserData=user_data)
for instance in instances:
print("Waiting for instance {} become running.".format(instance.id))
try:
instance.wait_until_running()
except:
pass
tag = {'Key': 'Name', 'Value': definitions.node_name}
create_tag(instance.id, tag)
create_tag(instance.id, instance_tag)
tag_intance_volume(instance.id, definitions.node_name, instance_tag)
return instance.id
return ''
except Exception as err:
logging.info("Unable to create EC2: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
append_result(str({"error": "Unable to create EC2",
"error_message": str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout)}))
traceback.print_exc(file=sys.stdout)