Add capability check for parameters on request_spot_instances

This commit is contained in:
Joseph Tate 2013-12-19 18:16:56 -05:00
parent c89c645b27
commit eb1288b961

View file

@ -399,6 +399,17 @@ def boto_supports_profile_name_arg(ec2):
run_instances_method = getattr(ec2, 'run_instances') run_instances_method = getattr(ec2, 'run_instances')
return 'instance_profile_name' in run_instances_method.func_code.co_varnames return 'instance_profile_name' in run_instances_method.func_code.co_varnames
def boto_supports_param_in_spot_request(ec2, param):
"""
Check if Boto library has a <param> in its request_spot_instances() method. For example, the placement_group parameter wasn't added until 2.3.0.
ec2: authenticated ec2 connection object
Returns:
True if boto library has the named param as an argument on the request_spot_instances method, else False
"""
method = getattr(ec2, 'request_spot_instances')
return param in method.func_code.co_varnames
def create_instances(module, ec2): def create_instances(module, ec2):
""" """
@ -486,7 +497,6 @@ def create_instances(module, ec2):
'key_name': key_name, 'key_name': key_name,
'monitoring_enabled': monitoring, 'monitoring_enabled': monitoring,
'placement': zone, 'placement': zone,
'placement_group': placement_group,
'instance_type': instance_type, 'instance_type': instance_type,
'kernel_id': kernel, 'kernel_id': kernel,
'ramdisk_id': ramdisk, 'ramdisk_id': ramdisk,
@ -527,6 +537,7 @@ def create_instances(module, ec2):
'min_count': count_remaining, 'min_count': count_remaining,
'max_count': count_remaining, 'max_count': count_remaining,
'client_token': id, 'client_token': id,
'placement_group': placement_group,
'private_ip_address': private_ip, 'private_ip_address': private_ip,
}) })
res = ec2.run_instances(**params) res = ec2.run_instances(**params)
@ -545,6 +556,12 @@ def create_instances(module, ec2):
if private_ip: if private_ip:
module.fail_json( module.fail_json(
msg='private_ip only available with on-demand (non-spot) instances') msg='private_ip only available with on-demand (non-spot) instances')
if boto_supports_param_in_spot_request(ec2, placement_group):
params['placement_group'] = placement_group
elif placement_group :
module.fail_json(
msg="placement_group parameter requires Boto version 2.3.0 or higher.")
params.update({ params.update({
'count': count_remaining, 'count': count_remaining,
}) })