Colin Watson has proposed merging ~cjwatson/launchpad-layers:mail-configure into launchpad-layers:main.
Commit message: Configure outbound email if send_email is true Requested reviews: Launchpad code reviewers (launchpad-reviewers) Related bugs: Bug #2017136 in launchpad-layers: "No email received after changing the OpenPGP key" https://bugs.launchpad.net/launchpad-layers/+bug/2017136 For more details, see: https://code.launchpad.net/~cjwatson/launchpad-layers/+git/launchpad-layers/+merge/441577 Most of Launchpad's email is sent using immediate delivery, which uses `smtplib` directly; but some, such as email sent by garbo jobs, instead queues it up until the end of the transaction. The latter mode wasn't configured properly on production, so outgoing email ended up in a default "stub" mailer which sent everything to root@localhost. Add configuration to send queued production email to localhost:25 as well. Individual charms must call `configure_email` to install `mail-configure.zcml` in the appropriate configuration directory, or remove it if `send_email` is false. See also https://code.launchpad.net/~cjwatson/lp-production-configs/production-smtp-mailer/+merge/411555 in our old private configs branch. -- Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad-layers:mail-configure into launchpad-layers:main.
diff --git a/launchpad-base/config.yaml b/launchpad-base/config.yaml index 3fa13a5..14feeca 100644 --- a/launchpad-base/config.yaml +++ b/launchpad-base/config.yaml @@ -219,6 +219,13 @@ options: type: string description: Username to use with RabbitMQ. default: test + send_email: + type: boolean + description: > + Is this service allowed to send email? (Email is always sent via a + mail transport agent running on localhost; deploy a postfix-relay + subordinate charm to handle this.) + default: false session_cookie_name: type: string description: The ID of the cookie used to store the session token. diff --git a/launchpad-base/lib/charms/launchpad/base.py b/launchpad-base/lib/charms/launchpad/base.py index fbdf2fd..7768c9b 100644 --- a/launchpad-base/lib/charms/launchpad/base.py +++ b/launchpad-base/lib/charms/launchpad/base.py @@ -136,6 +136,25 @@ def lazr_config_files(): ] +def configure_email(config, directory_name): + mail_configure_path = config_file_path( + f"{directory_name}/mail-configure.zcml" + ) + if config["send_email"]: + hookenv.log("Writing email configuration.") + templating.render( + "mail-configure.zcml", + mail_configure_path, + config, + owner="root", + group=base.user(), + perms=0o444, + ) + elif os.path.exists(mail_configure_path): + hookenv.log("Removing email configuration.") + os.unlink(mail_configure_path) + + def configure_rsync(config, template, name): hookenv.log("Writing rsync configuration.") rsync_path = os.path.join("/etc/rsync-juju.d", name) diff --git a/launchpad-base/templates/launchpad-base-lazr.conf b/launchpad-base/templates/launchpad-base-lazr.conf index 71c456e..b9707cb 100644 --- a/launchpad-base/templates/launchpad-base-lazr.conf +++ b/launchpad-base/templates/launchpad-base-lazr.conf @@ -57,6 +57,9 @@ oops_prefix: {{ oops_prefix }} [gpghandler] upload_keys: {{ gpg_upload_keys }} +[immediate_mail] +{{- opt("send_email", send_email) }} + [launchpad] bugs_domain: bugs.{{ domain }} {{- opt("bzr_imports_root_url", bzr_imports_root_url) }} diff --git a/launchpad-base/templates/mail-configure.zcml b/launchpad-base/templates/mail-configure.zcml new file mode 100644 index 0000000..380a530 --- /dev/null +++ b/launchpad-base/templates/mail-configure.zcml @@ -0,0 +1,8 @@ +<configure + xmlns="http://namespaces.zope.org/zope" + xmlns:mail="http://namespaces.zope.org/mail" + i18n_domain="zope"> + <mail:smtpMailer name="localhost" hostname="localhost" port="25" /> + <mail:directDelivery permission="zope.SendMail" mailer="localhost" /> +</configure> +
_______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : launchpad-reviewers@lists.launchpad.net Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp