Remove commandline arguments, run solely on manifest file

This commit is contained in:
Anders Ingemann 2013-06-09 15:50:00 +02:00
parent e63e2cca0c
commit ef343016f0
6 changed files with 29 additions and 36 deletions

View file

@ -1,6 +1,6 @@
class BootstrapInformation(object):
def __init__(self, manifest=None, args=None):
def __init__(self, manifest=None, debug=False):
self.manifest = manifest
self.args = args
self.debug = debug

View file

@ -1,4 +1,3 @@
from providers import providers
def main():
@ -6,20 +5,20 @@ def main():
parser = ArgumentParser(description='Bootstrap Debian for the cloud.')
parser.add_argument('--debug', action='store_true',
help='Print debugging information')
parser.add_argument('manifest', help='Manifest file to use for bootstrapping', metavar='MANIFEST')
parser.set_defaults(func=run)
subparsers = parser.add_subparsers(title='providers', description='supported providers', dest='provider')
for provider in providers.values():
provider.init_subparser(subparsers)
args = parser.parse_args()
args.func(args)
def run(args):
provider = providers[args.provider]
manifest = provider.Manifest(args.manifest)
from manifest import load_manifest
from manifest import get_provider
data = load_manifest(args.manifest)
provider = get_provider(data)
manifest = provider.Manifest(args.manifest, data)
manifest.validate()
manifest.load_plugins()
@ -27,5 +26,5 @@ def run(args):
tasklist.plugins(manifest)
from common import BootstrapInformation
bootstrap_info = BootstrapInformation(manifest, args)
bootstrap_info = BootstrapInformation(manifest=manifest, debug=args.debug)
tasklist.run(bootstrap_info)

View file

@ -1,15 +1,25 @@
import json
def load_manifest(path):
import json
return json.load(open(path))
def get_provider(data):
provider = __import__('providers.%s' % data['provider'], fromlist=['providers'])
return provider
class Manifest(object):
def __init__(self, path):
def __init__(self, path, data):
self.path = path
self.parse(json.load(open(self.path)))
self.parse(data)
def parse(self, data):
self.volume = data['volume']
self.system = data['system']
self.plugins = data['plugins']
self.provider = data['provider']
self.volume = data['volume']
self.system = data['system']
self.plugins = data['plugins']
def validate(self):
pass

View file

@ -1,4 +0,0 @@
import ec2
providers = {'ec2': ec2}

View file

@ -1,13 +1,6 @@
from manifest import Manifest
def init_subparser(subparsers):
sub = subparsers.add_parser('ec2', help='Bootstrap Debian for EC2')
sub.add_argument('--access-key', help='AWS Access Key', metavar='ID')
sub.add_argument('--secret-key', help='AWS Secret Key', metavar='KEY')
sub.add_argument('manifest', help='Manifest file to use for bootstrapping', metavar='MANIFEST')
def tasklist(manifest):
from common import TaskList
import packages

View file

@ -4,14 +4,11 @@ from common import Task
class GetCredentials(Task):
def run(self, info):
super(GetCredentials, self).run(info)
info.ec2_credentials = self.get_ec2_credentials(info.args, info.manifest)
info.ec2_credentials = self.get_ec2_credentials(info.manifest)
def get_ec2_credentials(self, args, manifest):
def get_ec2_credentials(self, manifest):
from os import getenv
# args override manifest override environment
if(args.access_key and args.secret_key):
return {'access_key': args.access_key,
'secret_key': args.secret_key}
# manifest overrides environment
if(manifest.credentials['access-key'] and manifest.credentials['secret-key']):
return {'access_key': manifest.credentials['access-key'],
'secret_key': manifest.credentials['secret-key']}
@ -19,8 +16,6 @@ class GetCredentials(Task):
return {'access_key': getenv('EC2_ACCESS_KEY'),
'secret_key': getenv('EC2_SECRET_KEY')}
if(bool(args.access_key) != bool(args.secret_key)):
raise RuntimeError('Both the access key and secret key must be specified as arguments.')
if(bool(manifest.credentials['access-key']) != bool(manifest.credentials['secret-key'])):
raise RuntimeError('Both the access key and secret key must be specified in the manifest.')
if(bool(getenv('EC2_ACCESS_KEY')) != bool(getenv('EC2_SECRET_KEY'))):