diff options
Diffstat (limited to 'tools/sync-rpi-config.py')
-rw-r--r-- | tools/sync-rpi-config.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/sync-rpi-config.py b/tools/sync-rpi-config.py new file mode 100644 index 0000000..9496c70 --- /dev/null +++ b/tools/sync-rpi-config.py @@ -0,0 +1,76 @@ +import ConfigParser, os, getopt, sys, config + +ini = ConfigParser.ConfigParser() + +# Parse parameters +def get_opts(argv): + try: + opts, args = getopt.getopt(argv,"ha:c:d:l",["conf=","action=","device=","list-devices"]) + except getopt.GetoptError: + print 'sync-rpi-config: -a <push/pull> -c <conf file> -d <device>' + sys.exit(2) + for opt, arg in opts: + if opt == '-h': + return usage() + sys.exit() + elif opt in ("-l", "--list-devices"): + print "You have configured these devices: " + list_devices() + sys.exit() + elif opt in ("-a", "--action"): + config.action = arg + elif opt in ("-c", "--conf"): + config.configfile = arg + elif opt in ("-d", "--device"): + config.device = arg + +# Check parameters for errors +def check_opts(): + if not config.action: + print "Error: No action has been specified." + return usage() + sys.exit(2) + if not config.action == "pull" or config.action == "push": + print "Error: Action \"" + config.action + "\" is invalid." + return usage() + sys.exit(2) + if not config.device: + print "Error: No device has been specified." + return usage() + sys.exit(2) + if config.device: + load_config(config.configfile) + if not ini.has_section(config.device): + print "Error: Device \"" + config.device + "\" not configured. Add it to\"" + config.configfile + "." + sys.exit(2) + +# Load provided config file or use default +def load_config(configfile): + if not configfile: + config.configfile = "/etc/sync-rpi.conf" + try: + ini.read([config.configfile]) + except: + sys.exit(2) + +# Check if configuration file is sane +def check_config(configfile): + options_config = ['repo', 'repo_path', 'rpi1', 'rpi2', 'rpi3' ] + options_device = ['type'] + load_config(config.configfile) + for option in options_config: + if not ini.has_option('config', option): + print "Option " + option + " not set in config" + break + +# List all devices defined in config.configfile +def list_devices(): + load_config(config.configfile) + return " ".join(ini.sections()[1:]) + +def usage(): + print """Usage: sync-rpi-config -a ACTION -d DEVICE [ -c [FILE] ] [ -l ] + Options + -a, --action ACTION can be either pull or push. You are pushing config from you workstation to device or pulling it back. + -d, --device DEVICE is set in configuration file. It is the machine you wish to push config to or pull from. + -c, --conf Path to configuration file. + -l, --list-devices List all devices defined in current configuration file.""" |