<div dir="ltr">I can't say I'm a big fan of the oneline (pre|post)rotate hooks (I prefer to split them into 'line' nodes) but at least it works now.<br><br><div class="gmail_quote">On Wed, Jul 23, 2008 at 4:16 PM,  <<a href="mailto:raphink@gmail.com">raphink@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"># HG changeset patch<br>
# User <a href="mailto:rpinson@lab64.echo-net.net">rpinson@lab64.echo-net.net</a><br>
# Date 1216822552 -7200<br>
# Node ID af5cf155aa832b7e0e048926c6818b2b9499a0db<br>
# Parent  8f1909e6885c5f1ac7007b22a28f7f9a8559b873<br>
Add logrotate and associated test<br>
<br>
diff -r 8f1909e6885c -r af5cf155aa83 lenses/logrotate.aug<br>
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000<br>
+++ b/lenses/logrotate.aug      Wed Jul 23 16:15:52 2008 +0200<br>
@@ -0,0 +1,95 @@<br>
+(* Logrotate module for Augeas                *)<br>
+(* Author: Raphael Pinson <<a href="mailto:raphink@gmail.com">raphink@gmail.com</a>> *)<br>
+(*                                            *)<br>
+(* Supported :                                *)<br>
+(*   - defaults                               *)<br>
+(*   - rules                                  *)<br>
+(*   - (pre|post)rotate entries               *)<br>
+(*                                            *)<br>
+(* Todo :                                     *)<br>
+(*                                            *)<br>
+<br>
+module Logrotate =<br>
+   autoload xfm<br>
+<br>
+   let sep_spc = Util.del_ws_spc<br>
+   let eol = Util.del_str "\n"<br>
+   let num = /[0-9]+/<br>
+   let word = /[^,# \n\t{}]+/<br>
+<br>
+<br>
+   (* define comments and empty lines *)<br>
+   let comment (indent:string) = [ label "comment" . del /[ \t]*/ indent . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . eol ]<br>
+   let empty   = [ del /[ \t]*\n/ "" ]<br>
+<br>
+<br>
+   (* Useful functions *)<br>
+<br>
+   let select_to_eol (kw:string) (select:regexp) (indent:string) = [ del /[ \t]*/ indent . label kw . store select . eol ]<br>
+   let value_to_eol (kw:string) (value:regexp) (indent:string )  = [ del /[ \t]*/ indent . key kw . sep_spc . store value . eol ]<br>
+   let flag_to_eol (kw:string) (indent:string)                   = [ del /[ \t]*/ indent . key kw . eol ]<br>
+<br>
+<br>
+   (* Defaults *)<br>
+<br>
+   let create (indent:string ) = [ del /[ \t]*/ indent . key "create" .<br>
+                       ( sep_spc . [ label "mode" . store num ] . sep_spc .<br>
+                      [ label "owner" . store word ] . sep_spc .<br>
+                      [ label "group" . store word ])?<br>
+                   . eol ]<br>
+<br>
+   let attrs (indent:string) = select_to_eol "schedule" /(daily|weekly|monthly)/ indent<br>
+                | value_to_eol "rotate" num indent<br>
+               | create indent<br>
+               | flag_to_eol "nocreate" indent<br>
+               | value_to_eol "include" word indent<br>
+               | select_to_eol "missingok" /(no)?missingok/ indent<br>
+               | select_to_eol "compress" /(no)?compress/ indent<br>
+               | select_to_eol "delaycompress" /(no)?delaycompress/ indent<br>
+               | select_to_eol "ifempty" /(not)?ifempty/ indent<br>
+               | flag_to_eol "sharedscripts" indent<br>
+               | value_to_eol "size" word indent<br>
+               | value_to_eol "tabooext" word indent<br>
+               | value_to_eol "olddir" word indent<br>
+               | flag_to_eol "noolddir" indent<br>
+               | value_to_eol "mail" word indent<br>
+               | flag_to_eol "mailfirst" indent<br>
+               | flag_to_eol "maillast" indent<br>
+               | flag_to_eol "nomail" indent<br>
+               | value_to_eol "errors" word indent<br>
+               | value_to_eol "extension" word indent<br>
+<br>
+<br>
+   (* Define hooks *)<br>
+<br>
+<br>
+   let hook_lines = store ( ( /.*/ . "\n") - /[ \t]*endscript[ \t]*\n/ )*<br>
+<br>
+   let hook_func (func_type:string) = [<br>
+       del /[ \t]*/ "\t" . key func_type . eol .<br>
+       hook_lines .<br>
+       del /[ \t]*endscript\n/ "\tendscript\n" ]<br>
+<br>
+   let hooks = hook_func "postrotate"<br>
+             | hook_func "prerotate"<br>
+<br>
+   (* Define rule *)<br>
+<br>
+   let body = Util.del_str "{\n"<br>
+                       . ( comment "\t" | attrs "\t" | hooks | empty )*<br>
+                       . Util.del_str "}\n"<br>
+<br>
+   let rule =<br>
+     [ label "rule" .<br>
+         [ label "file" . store word ] .<br>
+        [ del /[ \t]+/ " " . label "file" . store word ]* .<br>
+        del /[ \t\n]*/ " " . body ]<br>
+<br>
+   let lns = ( comment "" | empty | attrs "" | rule )*<br>
+<br>
+   let filter = incl "/etc/logrotate.d/*"<br>
+              . incl "/etc/logrotate.conf"<br>
+             . Util.stdexcl<br>
+<br>
+   let xfm = transform lns filter<br>
+<br>
diff -r 8f1909e6885c -r af5cf155aa83 lenses/tests/test_logrotate.aug<br>
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000<br>
+++ b/lenses/tests/test_logrotate.aug   Wed Jul 23 16:15:52 2008 +0200<br>
@@ -0,0 +1,126 @@<br>
+module Test_logrotate =<br>
+<br>
+   let conf = "# see man logrotate for details<br>
+# rotate log files weekly<br>
+weekly<br>
+<br>
+# keep 4 weeks worth of backlogs<br>
+rotate 4<br>
+<br>
+# create new (empty) log files after rotating old ones<br>
+create<br>
+<br>
+# uncomment this if you want your log files compressed<br>
+#compress<br>
+<br>
+# packages drop log rotation information into this directory<br>
+include /etc/logrotate.d<br>
+<br>
+# no packages own wtmp, or btmp -- we'll rotate them here<br>
+/var/log/wtmp<br>
+{<br>
+    missingok<br>
+    monthly<br>
+    create 0664 root utmp<br>
+    rotate 1<br>
+}<br>
+<br>
+/var/log/btmp /var/log/btmp* {<br>
+    missingok<br>
+    # ftpd doesn't handle SIGHUP properly<br>
+    monthly<br>
+    create 0664 root utmp<br>
+    rotate 1<br>
+}<br>
+/var/log/vsftpd.log {<br>
+    # ftpd doesn't handle SIGHUP properly<br>
+    nocompress<br>
+    missingok<br>
+    notifempty<br>
+    rotate 4<br>
+    weekly<br>
+}<br>
+<br>
+/var/log/apache2/*.log {<br>
+        weekly<br>
+        missingok<br>
+        rotate 52<br>
+        compress<br>
+        delaycompress<br>
+        notifempty<br>
+        create 640 root adm<br>
+        sharedscripts<br>
+        prerotate<br>
+                if [ -f /var/run/apache2.pid ]; then<br>
+                        /etc/init.d/apache2 restart > /dev/null<br>
+                fi<br>
+        endscript<br>
+}<br>
+"<br>
+<br>
+   test Logrotate.lns get conf =<br>
+      { "comment" = "see man logrotate for details" }<br>
+      { "comment" = "rotate log files weekly" }<br>
+      { "schedule" = "weekly" }<br>
+      {}<br>
+      { "comment" = "keep 4 weeks worth of backlogs" }<br>
+      { "rotate"   = "4" }<br>
+      {}<br>
+      { "comment" = "create new (empty) log files after rotating old ones" }<br>
+      { "create" }<br>
+      {}<br>
+      { "comment" = "uncomment this if you want your log files compressed" }<br>
+      { "comment" = "compress" }<br>
+      {}<br>
+      { "comment" = "packages drop log rotation information into this directory" }<br>
+      { "include" = "/etc/logrotate.d" }<br>
+      {}<br>
+      { "comment" = "no packages own wtmp, or btmp -- we'll rotate them here" }<br>
+      { "rule"<br>
+           { "file"      = "/var/log/wtmp" }<br>
+           { "missingok" = "missingok" }<br>
+           { "schedule"  = "monthly" }<br>
+           { "create"<br>
+                { "mode"  = "0664" }<br>
+                { "owner" = "root" }<br>
+                { "group" = "utmp" } }<br>
+           { "rotate" = "1" } }<br>
+      {}<br>
+      { "rule"<br>
+           { "file"      = "/var/log/btmp" }<br>
+          { "file"      = "/var/log/btmp*" }<br>
+           { "missingok" = "missingok" }<br>
+          { "comment"   = "ftpd doesn't handle SIGHUP properly" }<br>
+           { "schedule"  = "monthly" }<br>
+           { "create"<br>
+                { "mode"  = "0664" }<br>
+                { "owner" = "root" }<br>
+                { "group" = "utmp" } }<br>
+           { "rotate" = "1" } }<br>
+      { "rule"<br>
+           { "file"      = "/var/log/vsftpd.log" }<br>
+           { "comment"   = "ftpd doesn't handle SIGHUP properly" }<br>
+           { "compress"  = "nocompress" }<br>
+           { "missingok" = "missingok" }<br>
+           { "ifempty"   = "notifempty" }<br>
+           { "rotate"    = "4" }<br>
+           { "schedule"  = "weekly" } }<br>
+      {}<br>
+      { "rule"<br>
+           { "file"          = "/var/log/apache2/*.log" }<br>
+           { "schedule"      = "weekly" }<br>
+           { "missingok"     = "missingok" }<br>
+           { "rotate"        = "52" }<br>
+           { "compress"      = "compress" }<br>
+           { "delaycompress" = "delaycompress" }<br>
+           { "ifempty"       = "notifempty" }<br>
+           { "create"<br>
+                { "mode"  = "640"  }<br>
+                { "owner" = "root" }<br>
+                { "group" = "adm"  } }<br>
+           { "sharedscripts" }<br>
+           { "prerotate" = "                if [ -f /var/run/apache2.pid ]; then<br>
+                        /etc/init.d/apache2 restart > /dev/null<br>
+                fi<br>
+" } }<br>
+<br>
<br>
_______________________________________________<br>
augeas-devel mailing list<br>
<a href="mailto:augeas-devel@redhat.com">augeas-devel@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/augeas-devel" target="_blank">https://www.redhat.com/mailman/listinfo/augeas-devel</a><br>
</blockquote></div><br></div>