diff --git a/library/database/mongodb_user b/library/database/mongodb_user index 63bc6b5400d..de99e4971dd 100644 --- a/library/database/mongodb_user +++ b/library/database/mongodb_user @@ -188,19 +188,28 @@ def main(): try: client = MongoClient(login_host, int(login_port)) - if login_user is None and login_password is None: - mongocnf_creds = load_mongocnf() - if mongocnf_creds is not False: - login_user = mongocnf_creds['user'] - login_password = mongocnf_creds['password'] - elif login_password is None and login_user is not None: - module.fail_json(msg='when supplying login arguments, both login_user and login_password must be provided') - - if login_user is not None and login_password is not None: - client.admin.authenticate(login_user, login_password) - except ConnectionFailure, e: - module.fail_json(msg='unable to connect to database, check login_user and login_password are correct') + module.fail_json(msg='unable to connect to database, check login_host and login_port are correct') + + # try to authenticate as a target user to check if it already exists + try: + client[db_name].authenticate(user, password) + if state == 'present': + module.exit_json(changed=False, user=user) + except OperationFailure: + if state == 'absent': + module.exit_json(changed=False, user=user) + + if login_user is None and login_password is None: + mongocnf_creds = load_mongocnf() + if mongocnf_creds is not False: + login_user = mongocnf_creds['user'] + login_password = mongocnf_creds['password'] + elif login_password is None and login_user is not None: + module.fail_json(msg='when supplying login arguments, both login_user and login_password must be provided') + + if login_user is not None and login_password is not None: + client.admin.authenticate(login_user, login_password) if state == 'present': if password is None: