1
from collections import OrderedDict
5
from quickstart.envs.fields import (
16
def __new__(cls, name, bases, attrs):
17
env_class = super(_EnvMeta, cls).__new__(cls, name, bases, attrs)
19
predicate = lambda value: isinstance(value, Field)
20
for name, field in inspect.getmembers(env_class, predicate=predicate):
23
env_class._fields = sorted(
24
fields, key=operator.attrgetter('_position'))
28
class BaseEnv(object):
30
__metaclass__ = _EnvMeta
32
fields_excluded_from_dict = ('name', 'is_default')
34
provider = ProviderField()
37
'the environment name to use with Juju (can be an arbitrary value)',
39
admin_secret = AutoGeneratedField(
41
'the password that will be used to authenticate to the environment '
42
'(it will be automatically generated if not provided)')
43
is_default = BoolField('default', 'make this the default environment')
45
def __init__(self, **kwargs):
46
for key, value in kwargs.items():
47
setattr(self, key, value)
48
self.provider = self.provider_type
51
return '<{}: {}>'.format(self.__class__.__name__, self.name)
54
return '{} (type: {})'.format(self.name, self.provider)
58
for field in self._fields:
59
yield field, getattr(self, field.name)
63
(field.dest, value) for field, value in self.fields
64
if field.name not in self.fields_excluded_from_dict
68
class LocalEnv(BaseEnv):
70
provider_type = 'local'
74
class Ec2Env(BaseEnv):
78
access_key = StringField('access key', 'the AWS access key', required=True)
79
secret_key = StringField('secret key', 'the AWS secret key', required=True)
80
control_bucket = AutoGeneratedField(
82
'the control bucket to use with AWS '
83
'(it will be automatically generated if not provided)')
84
is_default = BoolField('default', 'make this the default environment')
87
class Environments(OrderedDict):
89
def set_default_env(name):