From 8263dd18a9c1ab28fc9006c24a67a3a91b7192a4 Mon Sep 17 00:00:00 2001 From: Sergei Antipov Date: Mon, 16 May 2016 22:25:52 +0700 Subject: [PATCH] Fixed problem with pymongo compatibility (#1249) * Fixed problem with pymongo compatibility Fixes #11 --- .../modules/extras/database/misc/mongodb_user.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/ansible/modules/extras/database/misc/mongodb_user.py b/lib/ansible/modules/extras/database/misc/mongodb_user.py index 5b5ec1b34a2..5e67ad2c1d3 100644 --- a/lib/ansible/modules/extras/database/misc/mongodb_user.py +++ b/lib/ansible/modules/extras/database/misc/mongodb_user.py @@ -159,6 +159,17 @@ else: # MongoDB module specific support methods. # +def check_compatibility(module, client): + srv_info = client.server_info() + if LooseVersion(srv_info['version']) >= LooseVersion('3.2') and LooseVersion(PyMongoVersion) <= LooseVersion('3.2'): + module.fail_json(msg=' (Note: you must use pymongo 3.2+ with MongoDB >= 3.2)') + elif LooseVersion(srv_info['version']) >= LooseVersion('3.0') and LooseVersion(PyMongoVersion) <= LooseVersion('2.8'): + module.fail_json(msg=' (Note: you must use pymongo 2.8+ with MongoDB 3.0)') + elif LooseVersion(srv_info['version']) >= LooseVersion('2.6') and LooseVersion(PyMongoVersion) <= LooseVersion('2.7'): + module.fail_json(msg=' (Note: you must use pymongo 2.7+ with MongoDB 2.6)') + elif LooseVersion(PyMongoVersion) <= LooseVersion('2.5'): + module.fail_json(msg=' (Note: you must be on mongodb 2.4+ and pymongo 2.5+ to use the roles param)') + def user_find(client, user, db_name): for mongo_user in client["admin"].system.users.find(): if mongo_user['user'] == user and mongo_user['db'] == db_name: @@ -177,8 +188,6 @@ def user_add(module, client, db_name, user, password, roles): db.add_user(user, password, None, roles=roles) except OperationFailure, e: err_msg = str(e) - if LooseVersion(PyMongoVersion) <= LooseVersion('2.5'): - err_msg = err_msg + ' (Note: you must be on mongodb 2.4+ and pymongo 2.5+ to use the roles param)' module.fail_json(msg=err_msg) def user_remove(module, client, db_name, user): @@ -309,6 +318,8 @@ def main(): except ConnectionFailure, e: module.fail_json(msg='unable to connect to database: %s' % str(e)) + check_compatibility(module, client) + if state == 'present': if password is None and update_password == 'always': module.fail_json(msg='password parameter required when adding a user unless update_password is set to on_create')