Skip to content

Commit

Permalink
Compile regexps and parse time intervals.
Browse files Browse the repository at this point in the history
  • Loading branch information
eriknolte committed Nov 19, 2011
1 parent 92c4baa commit b2afc34
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 12 deletions.
75 changes: 74 additions & 1 deletion butter/virtd/main.py
@@ -1,9 +1,12 @@
#!/usr/bin/python2
'''
'''
from .config import load_config
import argparse
import logging
import os
import re
import sys

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -37,11 +40,17 @@ def _sync(args):
'''
print "XXX SYNC",args

def main(argv):
def _parse(argv):
'''
Parse the 'butter virtd' command line.
'''
parser = argparse.ArgumentParser()
parser.add_argument('--config',
dest='configfile',
default='/etc/butter/virtd',
help='An alternative butter virtd '
'config file; default: /etc/butter/virtd')

subparsers = parser.add_subparsers(help='sub-command help')

subparser = subparsers.add_parser('list', help='list virtd objects')
Expand All @@ -65,4 +74,68 @@ def main(argv):
subparser.set_defaults(func=_sync)

args = parser.parse_args(argv[2:])
args.config = load_config(args.configfile)

# Compile the regex patterns
for key in ['image_pattern', 'digest_pattern']:
value = args.config.get(key)
if not value:
value = '.*'
try:
compiled = re.compile(value)
args.config[key] = value
except re.error, ex:
print >> sys.stderr, 'bad regex for {}: {}' \
.format(key, value)
sys.exit(1)

# Convert time to number of seconds
for key in ['sync_interval', 'keep_for']:
value = args.config.get(key)
if not value:
value = '0'
try:
new_value = _time_to_secs(value)
args.config[key] = new_value
except RuntimeError, ex:
print >> sys.stderr, 'invalid number for {}: {}' \
.format(key, value)
sys.exit(1)
return args

def _time_to_secs(time_dict):
'''
Convert a time dictionary into a number of seconds.
The dictionary may contain: day, days, hour, hours, hr, hrs,
minute, minutes, min, mins, second, seconds, sec, and secs for keys
and either a number for a value or a string that converts into a number.
'''
num_secs = 0
for unit, multiplier in [('days', 24 * 60 * 60),
('day', 24 * 60 * 60),
('hours', 60 * 60),
('hour', 60 * 60),
('hrs', 60 * 60),
('hr', 60 * 60),
('minutes', 60),
('minute', 60),
('mins', 60),
('min', 60),
('seconds', 1),
('second', 1),
('secs', 1),
('sec', 1)]:
value = time_dict.get(unit)
if value:
num_secs += float(value) * multiplier
return num_secs

def main(argv):
'''
Execute the 'butter virtd' command.
'''
args = _parse(argv)
if args.func is None:
print >> sys.stderr, 'internal error: func is None'
sys.exit(1)
args.func(args)
31 changes: 20 additions & 11 deletions conf/virtd
Expand Up @@ -5,28 +5,37 @@

##### Logging settings #####
##########################################

# The location of the master log file
#log_file: /var/log/butter/kvmd
#log_file: /var/log/butter/virtd

# The level of messages to send to the log file.
# One of 'info', 'quiet', 'critical', 'error', 'debug', 'warning'.
# Default: 'warning'
#log_level: warning
#

# Logger levels can be used to tweak specific loggers logging levels.
# Imagine you want to have the butter library at the 'warning' level,
# but you still wish to have 'butter.modules' at the 'debug' level:
# log_granular_levels: {
# 'butter': 'warning',
# 'butter.modules': 'debug'
# }
#
#log_granular_levels: {}

# Configuration for the kvm daemon
#images: /srv/vm/images
#pool_size: 5
#keep_old: 2
#interval: 5
#image_source:
#distros: [arch]
#format: raw
##### virtd settings #####
##########################################

image_source: http://192.168.42.150/archlinux/varch

image_dest: /srv/vm/images

image_pattern: archdev_(?P<version>)-\d+.(?P<format>raw|qcow|qcom2|vmdk|vdi)(\.gz)?

digest_pattern: archdev_(?P<version>)-\d+.(?P<digest>sha(\d+)|md5)sum

sync_interval:
days: 1

keep_for:
days: 1

0 comments on commit b2afc34

Please sign in to comment.