Guard against too old boto library

route53 creates Record objects using `health check` and `failover`
parameters. Those parameters only became available in boto 2.28.0.
As some prominent LTS Linux releases (e.g.: Ubuntu 14.04) only ship
older boto versions (e.g.: 2.20.1 for Ubuntu 14.04), users are getting
unhelpful error messages like

  TypeError: __init__() got an unexpected keyword argument 'health_check'

when running Ansible 2 against their LTS install's default boto.
We improve upon this error message by checking the boto version
beforehand.

Fixes ansible/ansible#13646
This commit is contained in:
Christian Aistleitner 2016-03-01 18:49:10 +01:00
parent 04cde60d14
commit ffeff8053b

View file

@ -263,10 +263,12 @@ EXAMPLES = '''
''' '''
MINIMUM_BOTO_VERSION = '2.28.0'
WAIT_RETRY_SLEEP = 5 # how many seconds to wait between propagation status polls WAIT_RETRY_SLEEP = 5 # how many seconds to wait between propagation status polls
import time import time
import distutils.version
try: try:
import boto import boto
@ -366,6 +368,9 @@ def main():
if not HAS_BOTO: if not HAS_BOTO:
module.fail_json(msg='boto required for this module') module.fail_json(msg='boto required for this module')
if distutils.version.StrictVersion(boto.__version__) < distutils.version.StrictVersion(MINIMUM_BOTO_VERSION):
module.fail_json(msg='Found boto in version %s, but >= %s is required' % (boto.__version__, MINIMUM_BOTO_VERSION))
command_in = module.params.get('command') command_in = module.params.get('command')
zone_in = module.params.get('zone').lower() zone_in = module.params.get('zone').lower()
hosted_zone_id_in = module.params.get('hosted_zone_id') hosted_zone_id_in = module.params.get('hosted_zone_id')