Implemented jenkins user enforcing by script API from client side
diff --git a/_states/jenkins_users.py b/_states/jenkins_users.py
new file mode 100644
index 0000000..29a2f64
--- /dev/null
+++ b/_states/jenkins_users.py
@@ -0,0 +1,59 @@
+import logging
+logger = logging.getLogger(__name__)
+
+create_admin_groovy = u"""\
+import jenkins.model.*
+import hudson.security.*
+def instance = Jenkins.getInstance()
+def hudsonRealm = new HudsonPrivateSecurityRealm(false)
+def result=hudsonRealm.createAccount("{username}","{password}")
+instance.setSecurityRealm(hudsonRealm)
+def strategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
+strategy.setAllowAnonymousRead(false)
+instance.setAuthorizationStrategy(strategy)
+instance.save()
+print(result)
+"""  #noqa
+
+
+create_user_groovy = u"""\
+def result=jenkins.model.Jenkins.instance.securityRealm.createAccount("{username}", "{password}")
+print(result)
+"""  # noqa
+
+
+def present(name, username, password, admin=False):
+    """
+    Main jenkins users state method
+
+    :param username: user name
+    :param password: user password
+    :param admin:  is admin user flag (username will be always admin)
+    :returns: salt-specified state dict
+    """
+    test = __opts__['test']  # noqa
+    ret = {
+        'name': username,
+        'changes': {},
+        'result': False,
+        'comment': '',
+    }
+
+    result = False
+    if test:
+        status = 'CREATED'
+        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
+            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