Skip to content

Commit

Permalink
Merge pull request #250 from Mirantis/provcheck
Browse files Browse the repository at this point in the history
Check Provisioner state before saving and provisioning new Cluster
  • Loading branch information
Adam Tengler authored Mar 15, 2018
2 parents ff8113d + 8bd8b47 commit bf284ef
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 0 deletions.
24 changes: 24 additions & 0 deletions kqueen/blueprints/api/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,30 @@ def fake_provision(self, *args, **kwargs):

assert response.status_code == 500

@pytest.mark.parametrize('provisioner_state', [
config.get('PROVISIONER_UNKNOWN_STATE'),
config.get('PROVISIONER_ERROR_STATE')
])
def test_provision_failed_with_unhealthy_provisioner(self, provisioner, user, provisioner_state):
provisioner.state = provisioner_state
provisioner.save(check_status=False)
user.save()

post_data = {
'name': 'Testing cluster',
'provisioner': 'Provisioner:{}'.format(provisioner.id),
'owner': 'User:{}'.format(user.id)
}

response = self.client.post(
url_for('api.cluster_create'),
data=json.dumps(post_data),
headers=self.auth_header,
content_type='application/json',
)

assert response.status_code == 500

def test_return_400_missing_json(self):
response = self.client.post(
url_for('api.cluster_create'),
Expand Down
7 changes: 7 additions & 0 deletions kqueen/blueprints/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,13 @@ def get_content(self, *args, **kwargs):
class CreateCluster(CreateView):
object_class = Cluster

def save_object(self):
if self.obj.provisioner.state != config.get('PROVISIONER_OK_STATE'):
msg = 'Cannot create cluster with malfunctioning Provisioner'
logger.error('Provisioning failed: {}'.format(msg))
abort(500, description=msg)
return super().save_object()

def after_save(self):
# start provisioning
prov_status, prov_msg = self.obj.engine.provision()
Expand Down
1 change: 1 addition & 0 deletions kqueen/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def cluster():
engine='kqueen.engines.ManualEngine',
owner=_user
)
prov.state = config.get('PROVISIONER_OK_STATE')
prov.save(check_status=False)

create_kwargs = {
Expand Down
3 changes: 3 additions & 0 deletions kqueen/engines/test_manual.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .manual import ManualEngine
from flask import url_for
from kqueen.config import current_config
from kqueen.conftest import auth_header
from kqueen.conftest import user
from kqueen.models import Cluster
Expand All @@ -9,6 +10,7 @@
import pytest
import yaml

config = current_config()
KUBECONFIG = yaml.load(open('kubeconfig_localhost', 'r').read())
CLUSTER_METADATA = {
'minion_count': 10,
Expand All @@ -33,6 +35,7 @@ def setup(self):
}

prov = Provisioner(_user.namespace, **create_kwargs_provisioner)
prov.state = config.get('PROVISIONER_OK_STATE')
prov.save(check_status=False)

self.create_kwargs_cluster = {
Expand Down

0 comments on commit bf284ef

Please sign in to comment.