<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>