blob: 969019c2062bc36567c9a53213cc3abaa8880005 [file] [log] [blame]
Jakub Josef60cc9d22017-01-18 12:02:14 +01001import logging
2logger = logging.getLogger(__name__)
3
4set_smtp_groovy = """\
Jakub Josefdfb288c2017-04-27 17:29:00 +02005def result = ""
6for(desc in [Jenkins.getInstance().getDescriptor("hudson.plugins.emailext.ExtendedEmailPublisher"),Jenkins.getInstance().getDescriptor("hudson.tasks.Mailer")]){{
7 if(desc.getSmtpServer().equals("{host}") &&
Jakub Josef8fd82942017-05-18 16:39:01 +02008 ((desc instanceof hudson.plugins.emailext.ExtendedEmailPublisherDescriptor && desc.getSmtpAuthUsername().equals("{username}")) ||
9 (desc instanceof hudson.tasks.Mailer$DescriptorImpl && desc.getSmtpAuthUserName().equals("{username}"))) &&
Jakub Josefdfb288c2017-04-27 17:29:00 +020010 desc.getSmtpAuthPassword().toString().equals("{password}") &&
11 desc.getSmtpPort().equals("{port}") &&
12 desc.getUseSsl() == {ssl} &&
13 desc.getCharset().equals("{charset}") &&
14 (!{reply_to_exists} || desc.getReplyAddress().equals("{reply_to}"))){{
15 result = "EXISTS"
16 }}else{{
17 desc.setSmtpAuth("{username}", "{password}")
Jakub Josefdfb288c2017-04-27 17:29:00 +020018 desc.setUseSsl({ssl})
Jakub Josefa0811532017-05-16 18:00:56 +020019 if(desc instanceof hudson.plugins.emailext.ExtendedEmailPublisherDescriptor){{
20 desc.setSmtpServer("{host}")
21 }}else{{
22 desc.setSmtpHost("{host}")
23 }}
Jakub Josefdfb288c2017-04-27 17:29:00 +020024 desc.setSmtpPort("{port}")
25 desc.setCharset("{charset}")
26 if({reply_to_exists}){{
27 desc.setReplyToAddress("{reply_to}")
28 }}
29 desc.save()
30 result = "SUCCESS"
Jakub Josef60cc9d22017-01-18 12:02:14 +010031 }}
Jakub Josefdfb288c2017-04-27 17:29:00 +020032}}
33print(result)
34""" # noqa
35
36set_admin_email_groovy = """
37def jenkinsLocationConfiguration = JenkinsLocationConfiguration.get()
38if(jenkinsLocationConfiguration.getAdminAddress().equals("{email}")){{
39 print("EXISTS")
40}}else{{
41 jenkinsLocationConfiguration.setAdminAddress("{email}")
42 jenkinsLocationConfiguration.save()
Jakub Josef60cc9d22017-01-18 12:02:14 +010043 print("SUCCESS")
44}}
45""" # noqa
46
47def config(name, host, username, password, reply_to=None, port=25, ssl=False, charset="UTF-8"):
48 """
49 Jenkins SMTP server config state method
50
51 :param name: configuration name
52 :param host: SMTP host
53 :param username: SMTP username
54 :param password: SMTP password
55 :param reply_to: sent emails ReplyTo header (optional)
56 :param port: SMTP port (optional, default 25)
57 :param ssl: use SSL for SMTP (optional, default False)
58 :param charset: SMTP charset (optional, default UTF-8)
59 :returns: salt-specified state dict
60 """
61 test = __opts__['test'] # noqa
62 ret = {
63 'name': name,
64 'changes': {},
65 'result': False,
66 'comment': '',
67 }
68 result = False
69 if test:
70 status = "SUCCESS"
71 ret['changes'][name] = status
72 ret['comment'] = 'Jenkins SMTP config %s %s' % (name, status.lower())
73 else:
74 call_result = __salt__['jenkins_common.call_groovy_script'](
75 set_smtp_groovy, {"username": username, "password": password, "host": host,
76 "reply_to_exists": "true" if reply_to else "false",
77 "reply_to": reply_to,
78 "port": port if port else 25,
79 "ssl": "true" if ssl else "false",
80 "charset": charset if charset else "UTF-8"})
81 if call_result["code"] == 200 and call_result["msg"] in ["SUCCESS", "EXISTS"]:
82 status = call_result["msg"]
83 if status == "SUCCESS":
84 ret['changes'][name] = status
85 ret['comment'] = 'Jenkins smtp config %s %s' % (name, status.lower())
86 result = True
87 else:
88 status = 'FAILED'
89 logger.error(
90 "Jenkins smtp API call failure: %s", call_result["msg"])
91 ret['comment'] = 'Jenkins smtp API call failure: %s' % (call_result[
92 "msg"])
93 ret['result'] = None if test else result
94 return ret
Jakub Josefdfb288c2017-04-27 17:29:00 +020095
96
97def admin_email(name, email):
98 """
99 Jenkins Admin user email config state method
100
101 :param name: jenkins admin email
102 :returns: salt-specified state dict
103 """
104 test = __opts__['test'] # noqa
105 ret = {
106 'name': name,
107 'changes': {},
108 'result': False,
109 'comment': '',
110 }
111 result = False
112 if test:
113 status = "SUCCESS"
114 ret['changes'][name] = status
115 ret['comment'] = 'Jenkins admin email config %s %s' % (name, status.lower())
116 else:
117 call_result = __salt__['jenkins_common.call_groovy_script'](
Jakub Josefa0811532017-05-16 18:00:56 +0200118 set_admin_email_groovy, {"email": email})
Jakub Josefdfb288c2017-04-27 17:29:00 +0200119 if call_result["code"] == 200 and call_result["msg"] in ["SUCCESS", "EXISTS"]:
120 status = call_result["msg"]
121 if status == "SUCCESS":
122 ret['changes'][name] = status
123 ret['comment'] = 'Jenkins admin email config %s %s' % (name, status.lower())
124 result = True
125 else:
126 status = 'FAILED'
127 logger.error(
128 "Jenkins admin email API call failure: %s", call_result["msg"])
129 ret['comment'] = 'Jenkins admin email API call failure: %s' % (call_result[
130 "msg"])
131 ret['result'] = None if test else result
132 return ret