Permalink
Browse files

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

  • Loading branch information...
1 parent 381eb9a commit db1e5b5ea43bb8e7718aa2b36a6c1c170f84c2a4 @raphink raphink committed Sep 10, 2012
Showing with 109 additions and 22 deletions.
  1. +1 −2 files/lenses/postfix_transport.aug
  2. +56 −0 files/lenses/postfix_virtual.aug
  3. +42 −0 files/lenses/test_postfix_virtual.aug
  4. +10 −20 manifests/virtual.pp
@@ -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
@@ -0,0 +1,56 @@
+(*
+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
@@ -0,0 +1,42 @@
+(*
+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" }
+ }
View
@@ -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 @@
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': {

0 comments on commit db1e5b5

Please sign in to comment.