Implemented existence checking in user state.
diff --git a/_states/jenkins_user.py b/_states/jenkins_user.py
index 29a2f64..6f37ec3 100644
--- a/_states/jenkins_user.py
+++ b/_states/jenkins_user.py
@@ -13,7 +13,7 @@
instance.setAuthorizationStrategy(strategy)
instance.save()
print(result)
-""" #noqa
+""" # noqa
create_user_groovy = u"""\
@@ -21,7 +21,6 @@
print(result)
""" # noqa
-
def present(name, username, password, admin=False):
"""
Main jenkins users state method
@@ -45,15 +44,29 @@
ret['changes'][username] = status
ret['comment'] = 'User %s %s' % (username, status.lower())
else:
- call_result = __salt__['jenkins_common.call_groovy_script'](create_admin_groovy if admin else create_user_groovy, {"username": username, "password":password})
- if call_result["code"] == 200 and call_result["msg"].count(username) == 1:
- status = "CREATED" if not admin else "ADMIN CREATED"
- ret['changes'][username] = status
+ # try to call jenkins script api with given user and password to prove
+ # his existence
+ user_exists_result = __salt__['jenkins_common.call_groovy_script'](
+ "print(\"TEST\")", {"username": username}, username, password,[200, 401])
+ user_exists = user_exists_result and user_exists_result[
+ "code"] == 200 and user_exists_result["msg"].count("TEST") == 1
+ if not user_exists:
+ call_result = __salt__['jenkins_common.call_groovy_script'](
+ create_admin_groovy if admin else create_user_groovy, {"username": username, "password": password})
+ if call_result["code"] == 200 and call_result["msg"].count(username) == 1:
+ status = "CREATED" if not admin else "ADMIN CREATED"
+ ret['changes'][username] = status
+ ret['comment'] = 'User %s %s' % (username, status.lower())
+ result = True
+ else:
+ status = 'FAILED'
+ logger.error("Jenkins user API call failure: %s",
+ call_result["msg"])
+ ret['comment'] = 'Jenkins user API call failure: %s' % (call_result[
+ "msg"])
+ else:
+ status = "EXISTS"
ret['comment'] = 'User %s %s' % (username, status.lower())
result = True
- else:
- status = 'FAILED'
- logger.error("Jenkins user API call failure: %s", call_result["msg"])
- ret['comment'] = 'Jenkins user API call failure: %s' % (call_result["msg"])
ret['result'] = None if test else result
return ret