Implemented SMTP settings from client side via script api.
diff --git a/_states/jenkins_smtp.py b/_states/jenkins_smtp.py
new file mode 100644
index 0000000..48e19c4
--- /dev/null
+++ b/_states/jenkins_smtp.py
@@ -0,0 +1,75 @@
+import logging
+logger = logging.getLogger(__name__)
+
+set_smtp_groovy = """\
+def desc = Jenkins.getInstance().getDescriptor("hudson.tasks.Mailer")
+if(desc.getSmtpServer().equals("{host}") &&
+ desc.getSmtpAuthUserName().equals("{username}") &&
+ desc.getSmtpAuthPassword().toString().equals("{password}") &&
+ desc.getSmtpPort().equals("{port}") &&
+ desc.getUseSsl() == {ssl} &&
+ desc.getCharset().equals("{charset}") &&
+ (!{reply_to_exists} || desc.getReplyAddress().equals("{reply_to}"))){{
+ print("EXISTS")
+}}else{{
+ desc.setSmtpAuth("{username}", "{password}")
+ desc.setSmtpHost("{host}")
+ desc.setUseSsl({ssl})
+ desc.setSmtpPort("{port}")
+ desc.setCharset("{charset}")
+ if({reply_to_exists}){{
+ desc.setReplyToAddress("{reply_to}")
+ }}
+ desc.save()
+ print("SUCCESS")
+}}
+""" # noqa
+
+def config(name, host, username, password, reply_to=None, port=25, ssl=False, charset="UTF-8"):
+ """
+ Jenkins SMTP server config state method
+
+ :param name: configuration name
+ :param host: SMTP host
+ :param username: SMTP username
+ :param password: SMTP password
+ :param reply_to: sent emails ReplyTo header (optional)
+ :param port: SMTP port (optional, default 25)
+ :param ssl: use SSL for SMTP (optional, default False)
+ :param charset: SMTP charset (optional, default UTF-8)
+ :returns: salt-specified state dict
+ """
+ test = __opts__['test'] # noqa
+ ret = {
+ 'name': name,
+ 'changes': {},
+ 'result': False,
+ 'comment': '',
+ }
+ result = False
+ if test:
+ status = "SUCCESS"
+ ret['changes'][name] = status
+ ret['comment'] = 'Jenkins SMTP config %s %s' % (name, status.lower())
+ else:
+ call_result = __salt__['jenkins_common.call_groovy_script'](
+ set_smtp_groovy, {"username": username, "password": password, "host": host,
+ "reply_to_exists": "true" if reply_to else "false",
+ "reply_to": reply_to,
+ "port": port if port else 25,
+ "ssl": "true" if ssl else "false",
+ "charset": charset if charset else "UTF-8"})
+ if call_result["code"] == 200 and call_result["msg"] in ["SUCCESS", "EXISTS"]:
+ status = call_result["msg"]
+ if status == "SUCCESS":
+ ret['changes'][name] = status
+ ret['comment'] = 'Jenkins smtp config %s %s' % (name, status.lower())
+ result = True
+ else:
+ status = 'FAILED'
+ logger.error(
+ "Jenkins smtp API call failure: %s", call_result["msg"])
+ ret['comment'] = 'Jenkins smtp API call failure: %s' % (call_result[
+ "msg"])
+ ret['result'] = None if test else result
+ return ret