Add a cookbook to configure the backup server
[chef.git] / cookbooks / backup / files / default / expire-backups
1 #!/usr/bin/perl
2
3 # DO NOT EDIT - This file is being maintained by Chef
4
5 use strict;
6 use warnings;
7
8 use Date::Calc qw(Today Add_Delta_Days Add_Delta_YMD Day_of_Week);
9 use Getopt::Long;
10
11 my $days = 0;
12 my $weeks = 0;
13 my $months = 0;
14
15 GetOptions("days=i" => \$days, "weeks=i" => \$weeks, "months=i" => \$months);
16
17 my $dir = shift;
18 my $prefix = shift;
19 my @dates;
20
21 for my $day (0 .. $days - 1)
22 {
23     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_Days(Today(), $day)));
24 }
25
26 for my $week (0 .. $weeks - 1)
27 {
28     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_Days(Monday(), $week * 7)));
29 }
30
31 for my $month (0 .. $months - 1)
32 {
33     push(@dates, sprintf("%04d-%02d-%02d", Subtract_Delta_YMD(First_of_Month(), 0, $month, 0)));
34 }
35
36 my $dates = join("|", @dates);
37 my $match = qr/^${prefix}-\d{4}-\d{2}-\d{2}\./;
38 my $keep = qr/^${prefix}-(?:${dates})\./;
39
40 opendir(DIR, "$dir") || die "Can't open ${dir}: $!";
41
42 while (my $file = readdir(DIR))
43 {
44 #    print "Expiring $file\n" if $file =~ $match && $file !~ $keep;
45     unlink("${dir}/${file}") if $file =~ $match && $file !~ $keep;
46 }
47
48 closedir(DIR);
49
50 exit 0;
51
52 sub Monday
53 {
54     my @today = Today();
55
56     return Subtract_Delta_Days(@today, Day_of_Week(@today) - 1);
57 }
58
59 sub First_of_Month
60 {
61     my($year,$month,$day) = Today();
62
63     return($year,$month,1);
64 }
65
66 sub Subtract_Delta_Days
67 {
68     my $year = shift;
69     my $month = shift;
70     my $day = shift;
71     my $days = shift;
72
73     return Add_Delta_Days($year, $month, $day, -$days);
74 }
75
76 sub Subtract_Delta_YMD
77 {
78     my $year = shift;
79     my $month = shift;
80     my $day = shift;
81     my $years = shift;
82     my $months = shift;
83     my $days = shift;
84
85     return Add_Delta_YMD($year, $month, $day, -$years, -$months, -$days);
86 }