2013-06-26 23:40:42 +02:00
|
|
|
import logging
|
|
|
|
log = logging.getLogger(__name__)
|
2013-05-16 08:00:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
def main():
|
2013-06-23 22:30:41 +02:00
|
|
|
import log
|
2013-06-09 20:29:54 +02:00
|
|
|
args = get_args()
|
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')
|
2013-09-14 23:29:12 +02:00
|
|
|
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')
|
2013-06-09 15:50:00 +02:00
|
|
|
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):
|
2013-06-09 15:50:00 +02:00
|
|
|
from manifest import load_manifest
|
2013-06-23 12:00:17 +02:00
|
|
|
(provider, manifest) = load_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()
|
2013-06-23 15:26:08 +02:00
|
|
|
provider.tasks(tasklist, manifest)
|
|
|
|
for plugin in manifest.loaded_plugins:
|
|
|
|
plugin.tasks(tasklist, manifest)
|
2013-05-16 08:00:28 +02:00
|
|
|
|
2013-06-09 16:15:23 +02:00
|
|
|
from bootstrapinfo import BootstrapInformation
|
2013-06-09 15:50:00 +02:00
|
|
|
bootstrap_info = BootstrapInformation(manifest=manifest, debug=args.debug)
|
2013-06-26 23:40:42 +02:00
|
|
|
|
|
|
|
try:
|
2013-10-27 18:37:43 +01:00
|
|
|
tasklist.run(info=bootstrap_info, dry_run=args.dry_run)
|
2013-07-07 21:03:25 +02:00
|
|
|
log.info('Successfully completed bootstrapping')
|
2013-06-30 20:06:49 +02:00
|
|
|
except (Exception, KeyboardInterrupt) as e:
|
2013-06-26 23:40:42 +02:00
|
|
|
log.exception(e)
|
2013-09-14 23:29:12 +02:00
|
|
|
if args.pause_on_error:
|
|
|
|
raw_input("Press Enter to commence rollback")
|
2013-06-26 23:40:42 +02:00
|
|
|
log.error('Rolling back')
|
|
|
|
rollback_tasklist = TaskList()
|
|
|
|
provider.rollback_tasks(rollback_tasklist, tasklist.tasks_completed, manifest)
|
|
|
|
for plugin in manifest.loaded_plugins:
|
|
|
|
rollback_tasks = getattr(plugin, 'rollback_tasks', None)
|
|
|
|
if callable(rollback_tasks):
|
|
|
|
plugin.rollback_tasks(rollback_tasklist, tasklist.tasks_completed, manifest)
|
2013-10-27 18:37:43 +01:00
|
|
|
rollback_tasklist.run(info=bootstrap_info, dry_run=args.dry_run)
|
2013-06-26 23:40:42 +02:00
|
|
|
log.info('Successfully completed rollback')
|