# # # bundle agent install_mailserver(param_cfg) { vars: "default_cfg" data => '{ "pam_auth":true, "vimb_auth":false, "imap":true, "submission":true, "smtp":true, "pop3":false, "sieve":false, "ssl":false, "opendkim":false, "myhostname":"$(sys.host)", "myorigin":"$myhostname", "mydestination":"$myhostname, localhost", "mail_location" : "maildir:~/Maildir:LAYOUT=maildir++:INBOX=~/Maildir/.INBOX:CONTROL=~/Mail/control:INDEX=~/Mail/index", "vmail_location" : "maildir:~/Maildir:LAYOUT=maildir++:INBOX=~/Maildir/.INBOX:CONTROL=~/Mail/control:INDEX=~/Mail/index", }'; "cfg" data => mergedata(@(default_cfg),@(param_cfg)); "dovecot_protos" string => string_mustache ( '"lmtp"{{#cfg.imap}},"imap"{{/cfg.imap}}{{#cfg.pop3}},"pop3"{{/cfg.pop3}}{{#cfg.sieve}},"sieve"{{/cfg.sieve}}', bundlestate("$(this.bundle)") ); "imaps_port" string => ifelse(strcmp("$(cfg[ssl])","true"),"993","0"); "pop3s_port" string => ifelse(strcmp("$(cfg[ssl])","true"),"995","0"); "dbs" string => string_mustache(' "userdbs":[ {{#fg.vimb_auth}} { "driver":"sql", "args":"$(dovecot_vimbadmin_sql.cfg_file)" }, {{/cfg.vimb_auth}} {{#cfg.pam_auth}} { "driver":"passwd", "args":"" }, {{/cfg.pam_auth}} ], "passdbs":[ {{#cfg.vimb_auth}} { "driver":"sql", "args":"$(dovecot_vimbadmin_sql.cfg_file)" } , {{/cfg.vimb_auth}} {{#cfg.pam_auth}} { "driver":"pam", "args":"dovecot" }, {{/cfg.pam_auth}} ],', bundlestate("$(this.bundle)")); "dovecot_cfg" data => '{ "protocols":[$(dovecot_protos)], "ssl":$(cfg[ssl]), $(dbs) "services":{ "imap-login":{ "raw":" inet_listener imap { port = 143 } inet_listener imaps { port = $(imaps_port) ssl = yes } " } , "pop3-login":{ "raw":" inet_listener pop3 { port = 110 } inet_listener pop3s { port = $(pop3s_port) ssl = yes } " } , "auth":{ "raw":" unix_listener $(postfix.queue_dir)/private/auth { user = postfix group = postfix mode = 0666 } " } , "lmtp":{ "raw":" unix_listener $(postfix.queue_dir)/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } " } } }'; "postfix_cfg" data => '{ "non_smtpd_milters":[ "unix:$(postfix.queue_dir)/private/opendkim" ] , "services" : [ { "name":"submission" "comment": "Submission service" "enable":$(cfg[submission]), "type":"inet", "private":"n", "unpriv":"-", "chroot":"n", "wakeup":"-", "maxproc":"-", "command":"smtpd", "args":[ "{ -o smtpd_sender_restrictions = permit_sasl_authenticated reject }", ], } , { "name":"smtp", "comment": "SMTP service", "enable":$(cfg[smtp]), "type":"inet", "private":"n", "unpriv":"-", "chroot":"n", "wakeup":"-", "maxproc":"-", "command":"smtpd", "args":[ "{ -o smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination }" "{ -o smtpd_client_restrictions = permit_mynetworks reject }", "{ -o smtpd_relay_restrictions = permit_mynetworks reject }", "{ -o smtpd_sender_restrictions = permit_mynetworks }" ] } ] , "main_raw":" myhostname=$(cfg[myhostname]) mydestination=$(cfg[mydestination]) myorigin=$(cfg[myorigin]) " , "master_raw":"" } '; methods: "any" usebundle => install_postfix_pkgs; "any" usebundle => install_dovecot_pkgs; "any" usebundle => dovecot(@(dovecot_cfg)); "any" usebundle => postfix(@(postfix_cfg)); reports: # "DCP: $(dovecot_protos)"; # "DBS: $(dbs)"; }