mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
Remove commandline arguments, run solely on manifest file
This commit is contained in:
parent
e63e2cca0c
commit
ef343016f0
6 changed files with 29 additions and 36 deletions
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
class BootstrapInformation(object):
|
class BootstrapInformation(object):
|
||||||
def __init__(self, manifest=None, args=None):
|
def __init__(self, manifest=None, debug=False):
|
||||||
self.manifest = manifest
|
self.manifest = manifest
|
||||||
self.args = args
|
self.debug = debug
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from providers import providers
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -6,20 +5,20 @@ def main():
|
||||||
parser = ArgumentParser(description='Bootstrap Debian for the cloud.')
|
parser = ArgumentParser(description='Bootstrap Debian for the cloud.')
|
||||||
parser.add_argument('--debug', action='store_true',
|
parser.add_argument('--debug', action='store_true',
|
||||||
help='Print debugging information')
|
help='Print debugging information')
|
||||||
|
parser.add_argument('manifest', help='Manifest file to use for bootstrapping', metavar='MANIFEST')
|
||||||
parser.set_defaults(func=run)
|
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 = parser.parse_args()
|
||||||
args.func(args)
|
args.func(args)
|
||||||
|
|
||||||
|
|
||||||
def run(args):
|
def run(args):
|
||||||
provider = providers[args.provider]
|
from manifest import load_manifest
|
||||||
manifest = provider.Manifest(args.manifest)
|
from manifest import get_provider
|
||||||
|
data = load_manifest(args.manifest)
|
||||||
|
provider = get_provider(data)
|
||||||
|
|
||||||
|
manifest = provider.Manifest(args.manifest, data)
|
||||||
manifest.validate()
|
manifest.validate()
|
||||||
manifest.load_plugins()
|
manifest.load_plugins()
|
||||||
|
|
||||||
|
@ -27,5 +26,5 @@ def run(args):
|
||||||
tasklist.plugins(manifest)
|
tasklist.plugins(manifest)
|
||||||
|
|
||||||
from common import BootstrapInformation
|
from common import BootstrapInformation
|
||||||
bootstrap_info = BootstrapInformation(manifest, args)
|
bootstrap_info = BootstrapInformation(manifest=manifest, debug=args.debug)
|
||||||
tasklist.run(bootstrap_info)
|
tasklist.run(bootstrap_info)
|
||||||
|
|
|
@ -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):
|
class Manifest(object):
|
||||||
def __init__(self, path):
|
def __init__(self, path, data):
|
||||||
self.path = path
|
self.path = path
|
||||||
self.parse(json.load(open(self.path)))
|
self.parse(data)
|
||||||
|
|
||||||
def parse(self, data):
|
def parse(self, data):
|
||||||
self.volume = data['volume']
|
self.provider = data['provider']
|
||||||
self.system = data['system']
|
self.volume = data['volume']
|
||||||
self.plugins = data['plugins']
|
self.system = data['system']
|
||||||
|
self.plugins = data['plugins']
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
import ec2
|
|
||||||
|
|
||||||
|
|
||||||
providers = {'ec2': ec2}
|
|
|
@ -1,13 +1,6 @@
|
||||||
from manifest import Manifest
|
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):
|
def tasklist(manifest):
|
||||||
from common import TaskList
|
from common import TaskList
|
||||||
import packages
|
import packages
|
||||||
|
|
|
@ -4,14 +4,11 @@ from common import Task
|
||||||
class GetCredentials(Task):
|
class GetCredentials(Task):
|
||||||
def run(self, info):
|
def run(self, info):
|
||||||
super(GetCredentials, self).run(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
|
from os import getenv
|
||||||
# args override manifest override environment
|
# manifest overrides environment
|
||||||
if(args.access_key and args.secret_key):
|
|
||||||
return {'access_key': args.access_key,
|
|
||||||
'secret_key': args.secret_key}
|
|
||||||
if(manifest.credentials['access-key'] and manifest.credentials['secret-key']):
|
if(manifest.credentials['access-key'] and manifest.credentials['secret-key']):
|
||||||
return {'access_key': manifest.credentials['access-key'],
|
return {'access_key': manifest.credentials['access-key'],
|
||||||
'secret_key': manifest.credentials['secret-key']}
|
'secret_key': manifest.credentials['secret-key']}
|
||||||
|
@ -19,8 +16,6 @@ class GetCredentials(Task):
|
||||||
return {'access_key': getenv('EC2_ACCESS_KEY'),
|
return {'access_key': getenv('EC2_ACCESS_KEY'),
|
||||||
'secret_key': getenv('EC2_SECRET_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'])):
|
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.')
|
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'))):
|
if(bool(getenv('EC2_ACCESS_KEY')) != bool(getenv('EC2_SECRET_KEY'))):
|
||||||
|
|
Loading…
Add table
Reference in a new issue