Fix use of user_data field with spot_price in ec2 module (#37628)

The user_data field is base64 encoded inside of the boto library.  In
Python3, base64 must be used with byte strings.  So we make sure to
encode the user_data into a byte string before passing it on to the boto
library.

Fixes #34978
This commit is contained in:
Toshio Kuratomi 2018-03-20 12:01:24 -07:00 committed by Sloane Hertel
parent ba4f26313b
commit 0d55081ba8

View file

@ -541,15 +541,15 @@ EXAMPLES = '''
'''
import traceback
import time
import traceback
from ast import literal_eval
from ansible.module_utils.six import get_function_code, string_types
from ansible.module_utils._text import to_text
from distutils.version import LooseVersion
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.ec2 import get_aws_connection_info, ec2_argument_spec, ec2_connect
from distutils.version import LooseVersion
from ansible.module_utils.six import string_types
from ansible.module_utils.six import get_function_code, string_types
from ansible.module_utils._text import to_bytes, to_text
try:
import boto.ec2
@ -1042,7 +1042,7 @@ def create_instances(module, ec2, vpc, override_count=None):
'instance_type': instance_type,
'kernel_id': kernel,
'ramdisk_id': ramdisk,
'user_data': user_data}
'user_data': to_bytes(user_data, errors='surrogate_or_strict')}
if ebs_optimized:
params['ebs_optimized'] = ebs_optimized