Merge "Add Deployment Info handlers"

This commit is contained in:
Jenkins 2016-04-05 17:18:24 +00:00 committed by Gerrit Code Review
commit 0ffa8ef34d
3 changed files with 146 additions and 0 deletions

View File

@ -56,3 +56,34 @@ class TransactionCollectionHandler(CollectionHandler):
)
else:
return self.collection.to_json()
class BaseTransactionDataHandler(TransactionHandler):
get_data = None
@content
def GET(self, transaction_id):
""":returns: Collection of JSONized DeploymentInfo objects.
:http: * 200 (OK)
* 404 (cluster not found in db)
"""
transaction = self.get_object_or_404(objects.Transaction,
transaction_id)
return self.get_data(transaction)
class TransactionDeploymentInfo(BaseTransactionDataHandler):
get_data = objects.Transaction.get_deployment_info
class TransactionClusterSettings(BaseTransactionDataHandler):
get_data = objects.Transaction.get_cluster_settings
class TransactionNetworkSettings(BaseTransactionDataHandler):
get_data = objects.Transaction.get_network_settings

View File

@ -131,8 +131,12 @@ from nailgun.api.v1.handlers.role import RoleHandler
from nailgun.api.v1.handlers.tasks import TaskCollectionHandler
from nailgun.api.v1.handlers.tasks import TaskHandler
from nailgun.api.v1.handlers.transactions import TransactionClusterSettings
from nailgun.api.v1.handlers.transactions import TransactionCollectionHandler
from nailgun.api.v1.handlers.transactions import TransactionDeploymentInfo
from nailgun.api.v1.handlers.transactions import TransactionHandler
from nailgun.api.v1.handlers.transactions import TransactionNetworkSettings
from nailgun.api.v1.handlers.version import VersionHandler
@ -326,6 +330,12 @@ urls = (
TransactionHandler,
r'/transactions/(?P<transaction_id>\d+)/deployment_history/?$',
DeploymentHistoryCollectionHandler,
r'/transactions/(?P<transaction_id>\d+)/deployment_info/?$',
TransactionDeploymentInfo,
r'/transactions/(?P<transaction_id>\d+)/network_configuration/?$',
TransactionNetworkSettings,
r'/transactions/(?P<transaction_id>\d+)/settings/?$',
TransactionClusterSettings,
r'/plugins/(?P<plugin_id>\d+)/links/?$',
PluginLinkCollectionHandler,

View File

@ -15,6 +15,8 @@
from nailgun import consts
from nailgun.db.sqlalchemy.models import Task
from nailgun import objects
from nailgun.orchestrator import deployment_serializers
from nailgun.test.base import BaseTestCase
from nailgun.utils import reverse
@ -131,3 +133,106 @@ class TestTransactionHandlers(BaseTestCase):
)
self.assertEqual(resp.status_code, 404)
self.assertIsNone(self.db().query(Task).get(task.id))
def test_get_transaction_cluster_attributes(self):
cluster = self.cluster_db
cluster_attrs = objects.Cluster.get_editable_attributes(cluster)
transaction = objects.Transaction.create({
'cluster_id': cluster.id,
'status': consts.TASK_STATUSES.ready,
'name': consts.TASK_NAMES.deployment
})
objects.Transaction.attach_cluster_settings(
transaction, {'editable': cluster_attrs}
)
self.assertIsNotNone(
objects.Transaction.get_cluster_settings(transaction)
)
resp = self.app.get(
reverse(
'TransactionClusterSettings',
kwargs={'transaction_id': transaction.id}),
headers=self.default_headers
)
self.assertEqual(200, resp.status_code)
self.datadiff(cluster_attrs, resp.json_body['editable'])
def test_get_cluster_attributes_fail_not_existed_transaction(self):
resp = self.app.get(
reverse(
'TransactionClusterSettings',
kwargs={'transaction_id': -1}),
headers=self.default_headers,
expect_errors=True
)
self.assertEqual(resp.status_code, 404)
def test_get_transaction_deployment_info(self):
cluster = self.cluster_db
nodes = objects.Cluster.get_nodes_not_for_deletion(cluster)
deployment_node_info = deployment_serializers.serialize_for_lcm(
cluster, nodes
)
deployment_info = {node['uid']: node for node in deployment_node_info}
transaction = objects.Transaction.create({
'cluster_id': cluster.id,
'status': consts.TASK_STATUSES.ready,
'name': consts.TASK_NAMES.deployment
})
objects.Transaction.attach_deployment_info(
transaction, deployment_info
)
self.assertIsNotNone(
objects.Transaction.get_deployment_info(transaction)
)
resp = self.app.get(
reverse(
'TransactionDeploymentInfo',
kwargs={'transaction_id': transaction.id}),
headers=self.default_headers
)
self.assertEqual(200, resp.status_code)
self.datadiff(deployment_info, resp.json_body)
def test_get_deployment_info_fail_not_existed_transaction(self):
resp = self.app.get(
reverse(
'TransactionDeploymentInfo',
kwargs={'transaction_id': -1}),
headers=self.default_headers,
expect_errors=True
)
self.assertEqual(resp.status_code, 404)
def test_get_transaction_network_settings(self):
cluster = self.cluster_db
resp = self.env.neutron_networks_get(cluster.id)
self.assertEqual(200, resp.status_code)
net_attrs = resp.json_body
transaction = objects.Transaction.create({
'cluster_id': cluster.id,
'status': consts.TASK_STATUSES.ready,
'name': consts.TASK_NAMES.deployment
})
objects.Transaction.attach_network_settings(transaction, net_attrs)
self.assertIsNotNone(
objects.Transaction.get_network_settings(transaction)
)
resp = self.app.get(
reverse(
'TransactionNetworkSettings',
kwargs={'transaction_id': transaction.id}),
headers=self.default_headers
)
self.assertEqual(200, resp.status_code)
self.datadiff(net_attrs, resp.json_body)
def test_get_network_settings_fail_not_existed_transaction(self):
resp = self.app.get(
reverse(
'TransactionNetworkSettings',
kwargs={'transaction_id': -1}),
headers=self.default_headers,
expect_errors=True
)
self.assertEqual(resp.status_code, 404)