blob: 0fea075d8c8994fcfc8dc585e643bbc0083fef33 [file] [log] [blame]
Jakub Josef01940252017-05-10 14:01:22 +02001import logging
2logger = logging.getLogger(__name__)
3
4add_artifactory_groovy = u"""\
5import jenkins.model.*
6import org.jfrog.*
7import org.jfrog.hudson.*
8def inst = Jenkins.getInstance()
9def desc = inst.getDescriptor("org.jfrog.hudson.ArtifactoryBuilder")
10def server = desc.getArtifactoryServers().find{{it -> it.name.equals("{name}")}}
11if(server &&
12 server.getName().equals("{name}") &&
13 server.getUrl().equals("{serverUrl}") &&
14 server.getDeployerCredentialsConfig().getCredentialsId().equals("{credentialsId}") &&
15 server.getResolverCredentialsConfig().getCredentialsId().equals("{credentialsId}")){{
16 print("EXISTS")
17}}else{{
18 desc.getArtifactoryServers().removeIf{{it -> it.name.equals("{name}")}}
19 def newServer = new ArtifactoryServer(
20 "{name}",
21 "{serverUrl}",
22 new CredentialsConfig("", "", "{credentialsId}"),
23 new CredentialsConfig("", "", "{credentialsId}"),
24 300,
25 false,
26 null)
27 desc.getArtifactoryServers().add(newServer)
28 desc.save()
29 print("ADDED/CHANGED")
30}}
31""" # noqa
32
33delete_artifactory_groovy = u"""\
34def inst = Jenkins.getInstance()
35def desc = inst.getDescriptor("org.jfrog.hudson.ArtifactoryBuilder")
36if(desc.getArtifactoryServers().removeIf{{it -> it.name.equals("{name}")}}){{
37 print("REMOVED")
38}}else{{
39 print("NOT PRESENT")
40}}
41""" # noqa
42
43
Ilya Kharin3d8bffe2017-06-22 17:40:31 +040044def __virtual__():
45 '''
46 Only load if jenkins_common module exist.
47 '''
48 if 'jenkins_common.call_groovy_script' not in __salt__:
49 return (
50 False,
51 'The jenkins_artifactory state module cannot be loaded: '
52 'jenkins_common not found')
53 return True
54
55
Jakub Josef01940252017-05-10 14:01:22 +020056def present(name, url, credential_id, **kwargs):
57 """
58 Jenkins artifactory present state method
59
60 :param name: artifactory server name
61 :param url: artifactory server url
62 :param credential_id: artifactory server credential id
63 :returns: salt-specified state dict
64 """
65 return _plugin_call(name, url, credential_id, add_artifactory_groovy, ["ADDED/CHANGED", "EXISTS"], **kwargs)
66
67
68def absent(name, **kwargs):
69 """
70 Jenkins artifactory present state method
71
72 :param name: artifactory server name
73 :returns: salt-specified state dict
74 """
75 return _plugin_call(name, None, None, delete_artifactory_groovy, ["REMOVED", "NOT PRESENT"], **kwargs)
76
77
78def _plugin_call(name, url, credentialsId, template, success_msgs, **kwargs):
79 test = __opts__['test'] # noqa
80 ret = {
81 'name': name,
82 'changes': {},
83 'result': False,
84 'comment': '',
85 }
86 result = False
87 if test:
88 status = success_msgs[0]
89 ret['changes'][name] = status
90 ret['comment'] = 'Jenkins artifactory server %s %s' % (
91 name, status.lower())
92 else:
93 call_result = __salt__['jenkins_common.call_groovy_script'](
94 template, {"name": name, "serverUrl": url, "credentialsId": credentialsId})
95 if call_result["code"] == 200 and call_result["msg"] in success_msgs:
96 status = call_result["msg"]
97 if status == success_msgs[0]:
98 ret['changes'][name] = status
99 ret['comment'] = 'Jenkins artifactory server %s %s' % (
100 name, status.lower())
101 result = True
102 else:
103 status = 'FAILED'
104 logger.error(
105 "Jenkins artifactory API call failure: %s", call_result["msg"])
106 ret['comment'] = 'Jenkins artifactory API call failure: %s' % (call_result[
107 "msg"])
108 ret['result'] = None if test else result
109 return ret