blob: b03b3a773fd50171f63716ebe03778f7cf4345ad [file] [log] [blame]
Jakub Josef60cc9d22017-01-18 12:02:14 +01001import logging
Adam Tengler70763e02017-08-21 16:50:32 +00002
Jakub Josef60cc9d22017-01-18 12:02:14 +01003logger = logging.getLogger(__name__)
4
5set_smtp_groovy = """\
Alexander Evseev70c12fe2018-07-19 09:29:20 +02006def result = "FAILED"
Adam Tengler70763e02017-08-21 16:50:32 +00007for(desc in [Jenkins.getInstance().getDescriptor("hudson.plugins.emailext.ExtendedEmailPublisher"),Jenkins.getInstance().getDescriptor("hudson.tasks.Mailer")]){
8 if(desc.getSmtpServer().equals("${host}") &&
Alexander Evseev70c12fe2018-07-19 09:29:20 +02009 (desc instanceof hudson.tasks.Mailer$DescriptorImpl ? desc.getSmtpAuthUserName() : desc.getSmtpUsername()) == "${username}" &&
10 (desc instanceof hudson.tasks.Mailer$DescriptorImpl ? desc.getSmtpAuthPassword() : desc.getSmtpPassword().toString()) == "${password}" &&
Adam Tengler70763e02017-08-21 16:50:32 +000011 desc.getSmtpPort().equals("${port}") &&
12 desc.getUseSsl() == ${ssl} &&
13 desc.getCharset().equals("${charset}") &&
Jakub Josef917ab112017-10-06 15:08:42 +020014 (!${reply_to_exists} || desc.getReplyAddress().equals("${reply_to}"))){
Jakub Josefdfb288c2017-04-27 17:29:00 +020015 result = "EXISTS"
Adam Tengler70763e02017-08-21 16:50:32 +000016 }else{
17 desc.setSmtpAuth("${username}", "${password}")
18 desc.setUseSsl(${ssl})
19 if(desc instanceof hudson.plugins.emailext.ExtendedEmailPublisherDescriptor){
20 desc.setSmtpServer("${host}")
21 }else{
22 desc.setSmtpHost("${host}")
23 }
24 desc.setSmtpPort("${port}")
25 desc.setCharset("${charset}")
Jakub Josefd6e39b22017-11-15 18:50:40 +010026 if(${reply_to_exists}){
Adam Tengler70763e02017-08-21 16:50:32 +000027 desc.setReplyToAddress("${reply_to}")
28 }
Jakub Josefdfb288c2017-04-27 17:29:00 +020029 desc.save()
30 result = "SUCCESS"
Adam Tengler70763e02017-08-21 16:50:32 +000031 }
32}
Jakub Josefdfb288c2017-04-27 17:29:00 +020033print(result)
Adam Tengler70763e02017-08-21 16:50:32 +000034""" # noqa
Jakub Josefdfb288c2017-04-27 17:29:00 +020035
36set_admin_email_groovy = """
37def jenkinsLocationConfiguration = JenkinsLocationConfiguration.get()
Adam Tengler70763e02017-08-21 16:50:32 +000038if(jenkinsLocationConfiguration.getAdminAddress().equals("${email}")){
Jakub Josefdfb288c2017-04-27 17:29:00 +020039 print("EXISTS")
Adam Tengler70763e02017-08-21 16:50:32 +000040}else{
41 jenkinsLocationConfiguration.setAdminAddress("${email}")
Jakub Josefdfb288c2017-04-27 17:29:00 +020042 jenkinsLocationConfiguration.save()
Jakub Josef60cc9d22017-01-18 12:02:14 +010043 print("SUCCESS")
Adam Tengler70763e02017-08-21 16:50:32 +000044}
45""" # noqa
Jakub Josef60cc9d22017-01-18 12:02:14 +010046
Ilya Kharin3d8bffe2017-06-22 17:40:31 +040047
48def __virtual__():
49 '''
50 Only load if jenkins_common module exist.
51 '''
52 if 'jenkins_common.call_groovy_script' not in __salt__:
53 return (
54 False,
55 'The jenkins_smtp state module cannot be loaded: '
56 'jenkins_common not found')
57 return True
58
59
Adam Tengler70763e02017-08-21 16:50:32 +000060def config(name, host, username, password, reply_to=None,
61 port=25, ssl=False, charset="UTF-8"):
Jakub Josef60cc9d22017-01-18 12:02:14 +010062 """
63 Jenkins SMTP server config state method
64
65 :param name: configuration name
66 :param host: SMTP host
67 :param username: SMTP username
68 :param password: SMTP password
69 :param reply_to: sent emails ReplyTo header (optional)
70 :param port: SMTP port (optional, default 25)
71 :param ssl: use SSL for SMTP (optional, default False)
72 :param charset: SMTP charset (optional, default UTF-8)
73 :returns: salt-specified state dict
74 """
75 test = __opts__['test'] # noqa
76 ret = {
77 'name': name,
78 'changes': {},
79 'result': False,
80 'comment': '',
81 }
82 result = False
83 if test:
84 status = "SUCCESS"
85 ret['changes'][name] = status
86 ret['comment'] = 'Jenkins SMTP config %s %s' % (name, status.lower())
87 else:
88 call_result = __salt__['jenkins_common.call_groovy_script'](
Adam Tengler70763e02017-08-21 16:50:32 +000089 set_smtp_groovy, {"username": username, "password": password, "host": host,
Jakub Josef60cc9d22017-01-18 12:02:14 +010090 "reply_to_exists": "true" if reply_to else "false",
91 "reply_to": reply_to,
92 "port": port if port else 25,
93 "ssl": "true" if ssl else "false",
94 "charset": charset if charset else "UTF-8"})
Adam Tengler70763e02017-08-21 16:50:32 +000095 if call_result["code"] == 200 and call_result["msg"] in [
96 "SUCCESS", "EXISTS"]:
Jakub Josef60cc9d22017-01-18 12:02:14 +010097 status = call_result["msg"]
98 if status == "SUCCESS":
99 ret['changes'][name] = status
Adam Tengler70763e02017-08-21 16:50:32 +0000100 ret['comment'] = 'Jenkins smtp config %s %s' % (
101 name, status.lower())
Jakub Josef60cc9d22017-01-18 12:02:14 +0100102 result = True
103 else:
104 status = 'FAILED'
105 logger.error(
106 "Jenkins smtp API call failure: %s", call_result["msg"])
107 ret['comment'] = 'Jenkins smtp API call failure: %s' % (call_result[
Adam Tengler70763e02017-08-21 16:50:32 +0000108 "msg"])
Jakub Josef60cc9d22017-01-18 12:02:14 +0100109 ret['result'] = None if test else result
110 return ret
Jakub Josefdfb288c2017-04-27 17:29:00 +0200111
112
113def admin_email(name, email):
114 """
115 Jenkins Admin user email config state method
116
117 :param name: jenkins admin email
118 :returns: salt-specified state dict
119 """
120 test = __opts__['test'] # noqa
121 ret = {
122 'name': name,
123 'changes': {},
124 'result': False,
125 'comment': '',
126 }
127 result = False
128 if test:
129 status = "SUCCESS"
130 ret['changes'][name] = status
Adam Tengler70763e02017-08-21 16:50:32 +0000131 ret['comment'] = 'Jenkins admin email config %s %s' % (
132 name, status.lower())
Jakub Josefdfb288c2017-04-27 17:29:00 +0200133 else:
134 call_result = __salt__['jenkins_common.call_groovy_script'](
Jakub Josefa0811532017-05-16 18:00:56 +0200135 set_admin_email_groovy, {"email": email})
Adam Tengler70763e02017-08-21 16:50:32 +0000136 if call_result["code"] == 200 and call_result["msg"] in [
137 "SUCCESS", "EXISTS"]:
Jakub Josefdfb288c2017-04-27 17:29:00 +0200138 status = call_result["msg"]
139 if status == "SUCCESS":
140 ret['changes'][name] = status
Adam Tengler70763e02017-08-21 16:50:32 +0000141 ret['comment'] = 'Jenkins admin email config %s %s' % (
142 name, status.lower())
Jakub Josefdfb288c2017-04-27 17:29:00 +0200143 result = True
144 else:
145 status = 'FAILED'
146 logger.error(
147 "Jenkins admin email API call failure: %s", call_result["msg"])
148 ret['comment'] = 'Jenkins admin email API call failure: %s' % (call_result[
149 "msg"])
150 ret['result'] = None if test else result
151 return ret