Fixed OrchestratorInfo handlers for LCM
The LCM serializers should be used for all releases that are LCM ready. Also the plugin hooks was removed in LCM and the hooks can not be retrieved. The tasks graph API can be used to get information about tasks from plugins. DocImpact Closes-Bug: 1569778 Change-Id: I037f79c5b4f51dd40bf05d7a00bde9a38c4b4454
This commit is contained in:
parent
05be83199a
commit
87fe57d055
|
@ -153,6 +153,10 @@ class DefaultProvisioningInfo(DefaultOrchestratorInfo):
|
|||
class DefaultDeploymentInfo(DefaultOrchestratorInfo):
|
||||
|
||||
def _serialize(self, cluster, nodes):
|
||||
if objects.Release.is_lcm_supported(cluster.release):
|
||||
return deployment_serializers.serialize_for_lcm(
|
||||
cluster, nodes, ignore_customized=True
|
||||
)
|
||||
graph = orchestrator_graph.AstuteGraph(cluster)
|
||||
return deployment_serializers.serialize(
|
||||
graph, cluster, nodes, ignore_customized=True)
|
||||
|
@ -164,6 +168,10 @@ class DefaultDeploymentInfo(DefaultOrchestratorInfo):
|
|||
class DefaultPrePluginsHooksInfo(DefaultOrchestratorInfo):
|
||||
|
||||
def _serialize(self, cluster, nodes):
|
||||
if objects.Release.is_lcm_supported(cluster.release):
|
||||
raise self.http(
|
||||
405, msg="The plugin hooks are not supported anymore."
|
||||
)
|
||||
graph = orchestrator_graph.AstuteGraph(cluster)
|
||||
return pre_deployment_serialize(graph, cluster, nodes)
|
||||
|
||||
|
@ -174,6 +182,10 @@ class DefaultPrePluginsHooksInfo(DefaultOrchestratorInfo):
|
|||
class DefaultPostPluginsHooksInfo(DefaultOrchestratorInfo):
|
||||
|
||||
def _serialize(self, cluster, nodes):
|
||||
if objects.Release.is_lcm_supported(cluster.release):
|
||||
raise self.http(
|
||||
405, msg="The plugin hooks are not supported anymore."
|
||||
)
|
||||
graph = orchestrator_graph.AstuteGraph(cluster)
|
||||
return post_deployment_serialize(graph, cluster, nodes)
|
||||
|
||||
|
|
|
@ -66,14 +66,33 @@ class TestDefaultOrchestratorInfoHandlers(BaseIntegrationTest):
|
|||
self.assertTrue(self.cluster.is_customized)
|
||||
self.datadiff(get_info(), facts)
|
||||
|
||||
def test_default_deployment_handler(self):
|
||||
def check_default_deployment_handler(self, release_version):
|
||||
self.env.create(
|
||||
nodes_kwargs=[
|
||||
{'roles': ['controller'], 'pending_addition': True},
|
||||
{'roles': ['compute'], 'pending_addition': True},
|
||||
{'roles': ['cinder'], 'pending_addition': True}],
|
||||
release_kwargs={
|
||||
'version': release_version,
|
||||
'operating_system': consts.RELEASE_OS.ubuntu
|
||||
}
|
||||
)
|
||||
cluster = self.env.clusters[-1]
|
||||
resp = self.app.get(
|
||||
reverse('DefaultDeploymentInfo',
|
||||
kwargs={'cluster_id': self.cluster.id}),
|
||||
kwargs={'cluster_id': cluster.id}),
|
||||
headers=self.default_headers)
|
||||
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(3, len(resp.json_body))
|
||||
# for lcm the deployment info will contain master node too
|
||||
# and we check only that nodes are included to result
|
||||
expected_node_uids = {n.uid for n in cluster.nodes}
|
||||
actual_node_uids = {n['uid'] for n in resp.json_body}
|
||||
self.assertTrue(expected_node_uids.issubset(actual_node_uids))
|
||||
|
||||
def test_default_deployment_handler(self):
|
||||
for release_ver in ('newton-10.0', 'mitaka-9.0', 'liberty-8.0'):
|
||||
self.check_default_deployment_handler(release_ver)
|
||||
|
||||
def test_default_provisioning_handler(self):
|
||||
resp = self.app.get(
|
||||
|
|
|
@ -18,6 +18,7 @@ import mock
|
|||
from oslo_serialization import jsonutils
|
||||
import yaml
|
||||
|
||||
from nailgun import consts
|
||||
from nailgun import objects
|
||||
from nailgun.plugins import adapters
|
||||
from nailgun.test import base
|
||||
|
@ -91,14 +92,18 @@ class BasePluginTest(base.BaseIntegrationTest):
|
|||
resp = self.app.get(
|
||||
base.reverse('DefaultPrePluginsHooksInfo',
|
||||
{'cluster_id': cluster.id}),
|
||||
headers=self.default_headers)
|
||||
headers=self.default_headers,
|
||||
expect_errors=True
|
||||
)
|
||||
return resp
|
||||
|
||||
def get_post_hooks(self, cluster):
|
||||
resp = self.app.get(
|
||||
base.reverse('DefaultPostPluginsHooksInfo',
|
||||
{'cluster_id': cluster.id}),
|
||||
headers=self.default_headers)
|
||||
headers=self.default_headers,
|
||||
expect_errors=True
|
||||
)
|
||||
return resp
|
||||
|
||||
def sync_plugins(self, params=None, expect_errors=False):
|
||||
|
@ -360,7 +365,8 @@ class TestPrePostHooks(BasePluginTest):
|
|||
objects.Plugin.get_by_uid(resp.json['id']))
|
||||
self.cluster = self.create_cluster([
|
||||
{'roles': ['controller'], 'pending_addition': True},
|
||||
{'roles': ['compute'], 'pending_addition': True}])
|
||||
{'roles': ['compute'], 'pending_addition': True}]
|
||||
)
|
||||
objects.Cluster.prepare_for_deployment(self.cluster)
|
||||
|
||||
self.enable_plugin(
|
||||
|
@ -371,8 +377,10 @@ class TestPrePostHooks(BasePluginTest):
|
|||
self._requests_mock.stop()
|
||||
super(TestPrePostHooks, self).tearDown()
|
||||
|
||||
def test_generate_pre_hooks(self):
|
||||
tasks = self.get_pre_hooks(self.cluster).json
|
||||
def test_generate_pre_hooks_for_legacy_env(self):
|
||||
resp = self.get_pre_hooks(self.cluster)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
tasks = resp.json
|
||||
plugins_tasks = [t for t in tasks if t.get('diagnostic_name')]
|
||||
upload_file = [t for t in plugins_tasks if t['type'] == 'upload_file']
|
||||
rsync = [t for t in plugins_tasks if t['type'] == 'sync']
|
||||
|
@ -390,8 +398,10 @@ class TestPrePostHooks(BasePluginTest):
|
|||
if u'apt-get update' in t['parameters']['cmd']]
|
||||
self.assertEqual(len(apt_update), 1)
|
||||
|
||||
def test_generate_post_hooks(self):
|
||||
tasks = self.get_post_hooks(self.cluster).json
|
||||
def test_generate_post_hooks_for_legacy_env(self):
|
||||
resp = self.get_post_hooks(self.cluster)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
tasks = resp.json
|
||||
self.assertEqual(len(tasks), 1)
|
||||
task = tasks[0]
|
||||
controller_id = [n.uid for n in self.cluster.nodes
|
||||
|
@ -399,6 +409,22 @@ class TestPrePostHooks(BasePluginTest):
|
|||
self.assertEqual(controller_id, task['uids'])
|
||||
self.assertEqual(task['diagnostic_name'], self.plugin.full_name)
|
||||
|
||||
def test_generate_hooks_is_not_supported_since_90(self):
|
||||
self.env.create(
|
||||
nodes_kwargs=[
|
||||
{'roles': ['controller'], 'pending_addition': True},
|
||||
{'roles': ['compute'], 'pending_addition': True},
|
||||
{'roles': ['cinder'], 'pending_addition': True}],
|
||||
release_kwargs={
|
||||
'version': 'mitaka-9.0',
|
||||
'operating_system': consts.RELEASE_OS.ubuntu
|
||||
}
|
||||
)
|
||||
resp = self.get_pre_hooks(self.env.clusters[-1])
|
||||
self.assertEqual(405, resp.status_code)
|
||||
resp = self.get_post_hooks(self.env.clusters[-1])
|
||||
self.assertEqual(405, resp.status_code)
|
||||
|
||||
|
||||
class TestPluginValidation(BasePluginTest):
|
||||
|
||||
|
|
Loading…
Reference in New Issue