blob: 6f37ec3f640a16e34d2841c154814edba272e6a7 [file] [log] [blame]
Jakub Josef3de91af2016-12-08 17:03:33 +01001import logging
2logger = logging.getLogger(__name__)
3
4create_admin_groovy = u"""\
5import jenkins.model.*
6import hudson.security.*
7def instance = Jenkins.getInstance()
8def hudsonRealm = new HudsonPrivateSecurityRealm(false)
9def result=hudsonRealm.createAccount("{username}","{password}")
10instance.setSecurityRealm(hudsonRealm)
11def strategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
12strategy.setAllowAnonymousRead(false)
13instance.setAuthorizationStrategy(strategy)
14instance.save()
15print(result)
Jakub Josef7ae6b242016-12-14 14:41:44 +010016""" # noqa
Jakub Josef3de91af2016-12-08 17:03:33 +010017
18
19create_user_groovy = u"""\
20def result=jenkins.model.Jenkins.instance.securityRealm.createAccount("{username}", "{password}")
21print(result)
22""" # noqa
23
Jakub Josef3de91af2016-12-08 17:03:33 +010024def present(name, username, password, admin=False):
25 """
26 Main jenkins users state method
27
28 :param username: user name
29 :param password: user password
30 :param admin: is admin user flag (username will be always admin)
31 :returns: salt-specified state dict
32 """
33 test = __opts__['test'] # noqa
34 ret = {
35 'name': username,
36 'changes': {},
37 'result': False,
38 'comment': '',
39 }
40
41 result = False
42 if test:
43 status = 'CREATED'
44 ret['changes'][username] = status
45 ret['comment'] = 'User %s %s' % (username, status.lower())
46 else:
Jakub Josef7ae6b242016-12-14 14:41:44 +010047 # try to call jenkins script api with given user and password to prove
48 # his existence
49 user_exists_result = __salt__['jenkins_common.call_groovy_script'](
50 "print(\"TEST\")", {"username": username}, username, password,[200, 401])
51 user_exists = user_exists_result and user_exists_result[
52 "code"] == 200 and user_exists_result["msg"].count("TEST") == 1
53 if not user_exists:
54 call_result = __salt__['jenkins_common.call_groovy_script'](
55 create_admin_groovy if admin else create_user_groovy, {"username": username, "password": password})
56 if call_result["code"] == 200 and call_result["msg"].count(username) == 1:
57 status = "CREATED" if not admin else "ADMIN CREATED"
58 ret['changes'][username] = status
59 ret['comment'] = 'User %s %s' % (username, status.lower())
60 result = True
61 else:
62 status = 'FAILED'
63 logger.error("Jenkins user API call failure: %s",
64 call_result["msg"])
65 ret['comment'] = 'Jenkins user API call failure: %s' % (call_result[
66 "msg"])
67 else:
68 status = "EXISTS"
Jakub Josef3de91af2016-12-08 17:03:33 +010069 ret['comment'] = 'User %s %s' % (username, status.lower())
70 result = True
Jakub Josef3de91af2016-12-08 17:03:33 +010071 ret['result'] = None if test else result
72 return ret