Commit db1e5b5e authored by Raphaël Pinson's avatar Raphaël Pinson
Browse files

Add postfix_virtual.aug and test, use it in postfix::virtual

parent 381eb9ad
......@@ -17,7 +17,7 @@ About: Configuration files
This lens applies to /etc/postfix/transport. See <filter>.
About: Examples
The <Test_Transport> file contains various examples and tests.
The <Test_Postfix_Transport> file contains various examples and tests.
*)
module Postfix_Transport =
......@@ -47,6 +47,5 @@ let lns = (Util.empty | Util.comment | record)*
(* Variable: filter *)
let filter = incl "/etc/postfix/transport"
. incl "/etc/postfix/virtual"
let xfm = transform lns filter
(*
Module: Postfix_Virtual
Parses /etc/postfix/virtual
Author: Raphael Pinson <raphael.pinson@camptocamp.com>
About: Reference
This lens tries to keep as close as possible to `man 5 virtual` where possible.
About: License
This file is licenced under the LGPL v2+, like the rest of Augeas.
About: Lens Usage
To be documented
About: Configuration files
This lens applies to /etc/postfix/virtual. See <filter>.
About: Examples
The <Test_Postfix_Virtual> file contains various examples and tests.
*)
module Postfix_Virtual =
autoload xfm
(* Variable: space_or_eol_re *)
let space_or_eol_re = /([ \t]*\n)?[ \t]+/
(* View: space_or_eol *)
let space_or_eol (sep:regexp) (default:string) =
del (space_or_eol_re? . sep . space_or_eol_re?) default
(* View: word *)
let word = store /[A-Za-z0-9@\*.-]+/
(* View: comma *)
let comma = space_or_eol "," ", "
(* View: destination *)
let destination = [ label "destination" . word ]
(* View: record *)
let record =
let destinations = Build.opt_list destination comma
in [ label "pattern" . word
. space_or_eol Rx.space " " . destinations
. Util.eol ]
(* View: lns *)
let lns = (Util.empty | Util.comment | record)*
(* Variable: filter *)
let filter = incl "/etc/postfix/virtual"
let xfm = transform lns filter
(*
Module: Test_Postfix_Virtual
Provides unit tests and examples for the <Postfix_Virtual> lens.
*)
module Test_Postfix_Virtual =
(* View: conf *)
let conf = "# a comment
virtual-alias.domain anything
postmaster@virtual-alias.domain postmaster
user1@virtual-alias.domain address1
user2@virtual-alias.domain
address2,
address3
root robert.oot@domain.com
@example.net root,postmaster
"
(* Test: Postfix_Virtual.lns *)
test Postfix_Virtual.lns get conf =
{ "#comment" = "a comment" }
{ "pattern" = "virtual-alias.domain"
{ "destination" = "anything" }
}
{ "pattern" = "postmaster@virtual-alias.domain"
{ "destination" = "postmaster" }
}
{ "pattern" = "user1@virtual-alias.domain"
{ "destination" = "address1" }
}
{ "pattern" = "user2@virtual-alias.domain"
{ "destination" = "address2" }
{ "destination" = "address3" }
}
{ "pattern" = "root"
{ "destination" = "robert.oot@domain.com" }
}
{ "pattern" = "@example.net"
{ "destination" = "root" }
{ "destination" = "postmaster" }
}
......@@ -19,15 +19,15 @@
#
# include postfix
#
# postfix::hash { "/etc/postfix/transport":
# postfix::hash { "/etc/postfix/virtual":
# ensure => present,
# }
# postfix::config { "transport_maps":
# value => "hash:/etc/postfix/transport"
# postfix::config { "virtual_alias_maps":
# value => "hash:/etc/postfix/virtual"
# }
# postfix::transport { "mailman.example.com":
# postfix::virtual { "user@example.com":
# ensure => present,
# destination => "mailman",
# destination => "root",
# }
# }
#
......@@ -41,21 +41,11 @@ define postfix::virtual (
case $ensure {
'present': {
if ($nexthop) {
$changes = [
"set pattern[. = '${name}'] '${name}'",
"set pattern[. = '${name}']/transport '${destination}'",
# TODO: support nexthop
"set pattern[. = '${name}']/nexthop '${nexthop}'",
]
} else {
$changes = [
"set pattern[. = '${name}'] '${name}'",
"set pattern[. = '${name}']/transport '${destination}'",
# TODO: support nexthop
"clear pattern[. = '${name}']/nexthop",
]
}
$changes = [
"set pattern[. = '${name}'] '${name}'",
# TODO: support more than one destination
"set pattern[. = '${name}']/destination '${destination}'",
]
}
'absent': {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment