bootstrap-vz/base/main.py

59 lines
1.9 KiB
Python
Raw Normal View History

import logging
log = logging.getLogger(__name__)
2013-05-16 08:00:28 +02:00
def main():
import os
2013-06-09 20:29:54 +02:00
args = get_args()
# Require root privileges, except when doing a dry-run where they aren't needed
if os.geteuid() != 0 and not args.dry_run:
raise Exception('This program requires root privileges.')
import log
2013-06-23 22:30:41 +02:00
logfile = log.get_logfile_path(args.manifest)
log.setup_logger(logfile=logfile, debug=args.debug)
2013-06-09 20:29:54 +02:00
run(args)
2013-06-26 20:14:37 +02:00
2013-06-09 20:29:54 +02:00
def get_args():
2013-05-16 08:00:28 +02:00
from argparse import ArgumentParser
parser = ArgumentParser(description='Bootstrap Debian for the cloud.')
parser.add_argument('--debug', action='store_true',
help='Print debugging information')
parser.add_argument('--pause-on-error', action='store_true',
help='Pause on error, before rollback')
2013-10-27 18:37:43 +01:00
parser.add_argument('--dry-run', action='store_true',
help='Dont\'t actually run the tasks')
parser.add_argument('manifest', help='Manifest file to use for bootstrapping', metavar='MANIFEST')
2013-06-09 20:29:54 +02:00
return parser.parse_args()
2013-05-16 08:00:28 +02:00
def run(args):
from manifest import Manifest
manifest = Manifest(args.manifest)
2013-05-16 08:00:28 +02:00
2013-06-09 16:23:08 +02:00
from tasklist import TaskList
tasklist = TaskList()
tasklist.load('resolve_tasks', manifest)
2013-05-16 08:00:28 +02:00
2013-06-09 16:15:23 +02:00
from bootstrapinfo import BootstrapInformation
bootstrap_info = BootstrapInformation(manifest=manifest, debug=args.debug)
try:
2013-10-27 18:37:43 +01:00
tasklist.run(info=bootstrap_info, dry_run=args.dry_run)
log.info('Successfully completed bootstrapping')
2013-06-30 20:06:49 +02:00
except (Exception, KeyboardInterrupt) as e:
log.exception(e)
if args.pause_on_error:
raw_input('Press Enter to commence rollback')
log.error('Rolling back')
rollback_tasklist = TaskList()
def counter_task(task, counter):
if task in tasklist.tasks_completed and counter not in tasklist.tasks_completed:
rollback_tasklist.tasks.add(counter)
rollback_tasklist.load('resolve_rollback_tasks', manifest, counter_task)
2013-10-27 18:37:43 +01:00
rollback_tasklist.run(info=bootstrap_info, dry_run=args.dry_run)
log.info('Successfully completed rollback')