a77242d55a14df5b610324da43bce7dab3df59db
[matthijs/projects/backupninja.git] / src / backupninja
1 #!/usr/bin/python
2 # -*- mode: python; sh-basic-offset: 4; indent-tabs-mode: nil; -*-
3 # vim: set filetype=python sw=4 sts=4 expandtab autoindent:
4 #
5 #    Backupninja python reimplementation, based on original backupninja program
6 #    by riseup.net.
7 #    Copyright (C) 2010  Matthijs Kooijman <matthijs@stdin.nl>
8 #
9 #    This program is free software; you can redistribute it and/or modify
10 #    it under the terms of the GNU General Public License as published by
11 #    the Free Software Foundation; either version 2 of the License, or
12 #    (at your option) any later version.
13 #
14 #    This program is distributed in the hope that it will be useful,
15 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
16 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 #    GNU General Public License for more details.
18 #
19 #    You should have received a copy of the GNU General Public License along
20 #    with this program; if not, write to the Free Software Foundation, Inc.,
21 #    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22
23 """ Check for scheduled backupninja actions and run them when needed """
24
25 import optparse
26 import logging
27 import sys
28
29 from backupninja.log import setup_logging
30 from backupninja import config
31 from backupninja import action
32
33 log = logging.getLogger()
34
35 def make_option_parser():
36     description = """%prog checks for scheduled actions and runs them when needed."""
37     parser = optparse.OptionParser(description=description)
38     parser.add_option( "-c", "--confdir"
39                      , help="Load configuration from CONFIG_DIR "
40                             "instead of '%default'. When "
41                             "the --conffile or --actionsdir options "
42                             "specify relative paths, they are taken "
43                             "relative to this directory."
44                      , default="/etc/backupninja"
45                      , dest="config_dir"
46                      , metavar="CONFIG_DIR")
47     parser.add_option( "-f", "--conffile"
48                      , help="Load the main configuration from FILE instead "
49                             "of '%default'. If FILE is a relative path, it "
50                             "is interpreted relative to CONFIG_DIR."
51                      , default='backupninja.conf'
52                      , dest="global_config"
53                      , metavar="FILE")
54     parser.add_option( "-a", "--actionsdir"
55                      , help="Load action configurations from ACTIONS_DIR "
56                             "instead of '%default'. If ACTIONS_DIR is a "
57                             "relative path, it is interpreted relative to "
58                             "CONFIG_DIR."
59                      , default="actions"
60                      , dest="actions_dir"
61                      , metavar="ACTIONS_DIR")
62     return parser
63  
64 def main(argv):
65     # Parse options (Note that this exits in case of --help or an
66     # invalid commandline)
67     parser = make_option_parser()
68     (options, args) = parser.parse_args(argv)
69
70     # Setup logging
71     setup_logging(options)
72
73     # Load config file
74     global_conf = config.get_global_config(options)
75     if global_conf is None:
76         # Error was already logged
77         return 1
78
79     # Process command
80     action.run_all_actions(options, global_conf)
81
82     return 0
83
84 if __name__ == '__main__':
85     sys.exit(main(sys.argv))