Skip to content

Commit

Permalink
Merge pull request #378 from mekanix/feature/provider
Browse files Browse the repository at this point in the history
Make provider based on type
  • Loading branch information
mekanix committed Jan 24, 2019
2 parents 511e564 + 9d314b3 commit faa0469
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 11 deletions.
9 changes: 6 additions & 3 deletions onelove/api/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ def get(self):
def post(self):
"""Create provider"""
schema = ProviderSchema()
provider, errors = schema.load(current_app.api.payload)
if errors:
return errors, 409
try:
provider, errors = schema.load(current_app.api.payload)
if errors:
return errors, 409
except ValueError:
return {'message': 'Invalid provider type'}, 409
provider.save()
response, errors = schema.dump(provider)
if errors:
Expand Down
1 change: 0 additions & 1 deletion onelove/api/provision.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,3 @@ def get(self, provision_id):
if errors:
abort(409, errors)
return data

13 changes: 6 additions & 7 deletions onelove/api/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from ..models.auth import User
from ..models.cluster import Cluster
from ..models.parsing import TokenModel
from ..models.provider import HostSSH, Provider, ProviderSSH
from ..models.provider import HostSSH, providers
from ..models.provision import Option, Provision, ProvisionOptions
from ..models.service import Application, Service

Expand Down Expand Up @@ -142,14 +142,13 @@ class ProviderSchema(BaseSchema):

@post_load
def make_object(self, data):
real_data = dict(data)
del real_data['type']
if data['type'] == 'SSH':
return ProviderSSH(**real_data)
raise ValueError('No such provider type {}'.format(data['type']))
Provider = providers.get(data['type'], None)
if Provider is None:
raise ValueError('No such provider type {}'.format(data['type']))
del data['type']
return Provider(**data)

class Meta:
model = Provider
name = 'Provider'


Expand Down
5 changes: 5 additions & 0 deletions onelove/models/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,8 @@ def update(self, hostname, new_ip=None, new_hostname=None):

def hosts_by_tag(self, tags=[]):
return list(filter(lambda host: host.has_tags(tags), self.hosts))


providers = {}
for provider in [ProviderSSH]:
providers[provider.type] = provider

0 comments on commit faa0469

Please sign in to comment.