blob: cb5463390522dc52d6dd61e14a29fd4f5eb1ea1e [file] [log] [blame]
Jakub Josef10b4e102017-01-05 18:18:41 +01001import logging
2logger = logging.getLogger(__name__)
3
4install_plugin_groovy = """\
5import jenkins.model.*
6import java.util.logging.Logger
7
8def logger = Logger.getLogger("")
9def installed = false
10def exists = false
11def pluginName="{plugin}"
12def instance = Jenkins.getInstance()
13def pm = instance.getPluginManager()
14def uc = instance.getUpdateCenter()
15def needUpdateSites(maxOldInSec = 1800){{
16 long oldestTs = 0
17 for (UpdateSite s : Jenkins.instance.updateCenter.siteList) {{
18 if(oldestTs == 0 || s.getDataTimestamp()<oldestTs){{
19 oldestTs = s.getDataTimestamp()
20 }}
21 }}
22 return (System.currentTimeMillis()-oldestTs)/1000 > maxOldInSec
23}}
24
25if (!pm.getPlugin(pluginName)) {{
26 if(needUpdateSites()) {{
27 uc.updateAllSites()
28 }}
29 def plugin = uc.getPlugin(pluginName)
30 if (plugin) {{
31 plugin.deploy()
32 installed = true
33 }}
34}}else{{
35 exists = true
Jakub Josef10b4e102017-01-05 18:18:41 +010036 print("EXISTS")
37}}
38if (installed) {{
39 instance.save()
40 if({restart}){{
41 instance.doSafeRestart()
42 }}
43 print("INSTALLED")
44}}else if(!exists){{
45 print("FAILED")
46}}
47""" # noqa
48
49remove_plugin_groovy = """
50import jenkins.model.*
51import java.util.logging.Logger
52
53def logger = Logger.getLogger("")
54def installed = false
55def initialized = false
56
57def pluginName="{plugin}"
58def instance = Jenkins.getInstance()
59def pm = instance.getPluginManager()
60
61def actPlugin = pm.getPlugin(pluginName)
62if (!actPlugin) {{
63 def pluginToInstall = Jenkins.instance.updateCenter.getPlugin(pluginName)
64 if(!pluginToInstall){{
65 print("FAILED")
66 }}else{{
67 print("NOT PRESENT")
68 }}
69}} else {{
70 actPlugin.disable()
71 actPlugin.archive.delete()
72 if({restart}){{
73 instance.doSafeRestart()
74 }}
75 print("REMOVED")
76}}
77""" # noqa
78
79
Ilya Kharin3d8bffe2017-06-22 17:40:31 +040080def __virtual__():
81 '''
82 Only load if jenkins_common module exist.
83 '''
84 if 'jenkins_common.call_groovy_script' not in __salt__:
85 return (
86 False,
87 'The jenkins_plugin state module cannot be loaded: '
88 'jenkins_common not found')
89 return True
90
91
Jakub Josef10b4e102017-01-05 18:18:41 +010092def present(name, restart=False):
93 """
94 Jenkins plugin present state method, for installing plugins
95
96 :param name: plugin name
97 :param restart: do you want to restart jenkins after plugin install?
98 :returns: salt-specified state dict
99 """
100 return _plugin_call(name, restart, install_plugin_groovy, ["INSTALLED", "EXISTS"])
101
102
103def absent(name, restart=False):
104 """
105 Jenkins plugin absent state method, for removing plugins
106
107 :param name: plugin name
108 :param restart: do you want to restart jenkins after plugin remove?
109 :returns: salt-specified state dict
110 """
111 return _plugin_call(name, restart, remove_plugin_groovy, ["REMOVED", "NOT PRESENT"])
112
113
114def _plugin_call(name, restart, template, success_msgs):
115 test = __opts__['test'] # noqa
116 ret = {
117 'name': name,
118 'changes': {},
119 'result': False,
120 'comment': '',
121 }
122 result = False
123 if test:
124 status = success_msgs[0]
125 ret['changes'][name] = status
126 ret['comment'] = 'Jenkins plugin %s %s' % (name, status.lower())
127 else:
128 call_result = __salt__['jenkins_common.call_groovy_script'](
129 template, {"plugin": name, "restart": "true" if restart else "false"})
130 if call_result["code"] == 200 and call_result["msg"] in success_msgs:
131 status = call_result["msg"]
132 if status == success_msgs[0]:
133 ret['changes'][name] = status
134 ret['comment'] = 'Jenkins plugin %s %s%s' % (name, status.lower(), ", jenkins restarted" if status == success_msgs[0] and restart else "")
135 result = True
136 else:
137 status = 'FAILED'
138 logger.error(
139 "Jenkins plugin API call failure: %s", call_result["msg"])
140 ret['comment'] = 'Jenkins plugin API call failure: %s' % (call_result[
141 "msg"])
142 ret['result'] = None if test else result
143 return ret