Add hadoop_version validation to sahara resources
Change-Id: I55cc3f049a78528143cb8eb6a3cfbf297806a2ac
This commit is contained in:
parent
87e8b11d0b
commit
15ac7bec2d
@ -52,6 +52,17 @@ class SaharaClientPlugin(client_plugin.ClientPlugin):
|
|||||||
client = sahara_client.Client('1.1', **args)
|
client = sahara_client.Client('1.1', **args)
|
||||||
return client
|
return client
|
||||||
|
|
||||||
|
def validate_hadoop_version(self, plugin_name, hadoop_version):
|
||||||
|
plugin = self.client().plugins.get(plugin_name)
|
||||||
|
allowed_versions = plugin.versions
|
||||||
|
if hadoop_version not in allowed_versions:
|
||||||
|
msg = (_("Requested plugin '%(plugin)s' doesn\'t support version "
|
||||||
|
"'%(version)s'. Allowed versions are %(allowed)s") %
|
||||||
|
{'plugin': plugin_name,
|
||||||
|
'version': hadoop_version,
|
||||||
|
'allowed': ', '.join(allowed_versions)})
|
||||||
|
raise exception.StackValidationFailed(message=msg)
|
||||||
|
|
||||||
def is_not_found(self, ex):
|
def is_not_found(self, ex):
|
||||||
return (isinstance(ex, sahara_base.APIException) and
|
return (isinstance(ex, sahara_base.APIException) and
|
||||||
ex.error_code == 404)
|
ex.error_code == 404)
|
||||||
|
@ -221,6 +221,11 @@ class SaharaCluster(resource.Resource):
|
|||||||
) % self.MANAGEMENT_NETWORK
|
) % self.MANAGEMENT_NETWORK
|
||||||
raise exception.StackValidationFailed(message=msg)
|
raise exception.StackValidationFailed(message=msg)
|
||||||
|
|
||||||
|
self.client_plugin().validate_hadoop_version(
|
||||||
|
self.properties[self.PLUGIN_NAME],
|
||||||
|
self.properties[self.HADOOP_VERSION]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def resource_mapping():
|
def resource_mapping():
|
||||||
return {
|
return {
|
||||||
|
@ -265,6 +265,11 @@ class SaharaNodeGroupTemplate(resource.Resource):
|
|||||||
message=ex.message)
|
message=ex.message)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
self.client_plugin().validate_hadoop_version(
|
||||||
|
self.properties[self.PLUGIN_NAME],
|
||||||
|
self.properties[self.HADOOP_VERSION]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SaharaClusterTemplate(resource.Resource):
|
class SaharaClusterTemplate(resource.Resource):
|
||||||
|
|
||||||
@ -422,6 +427,11 @@ class SaharaClusterTemplate(resource.Resource):
|
|||||||
) % self.MANAGEMENT_NETWORK
|
) % self.MANAGEMENT_NETWORK
|
||||||
raise exception.StackValidationFailed(message=msg)
|
raise exception.StackValidationFailed(message=msg)
|
||||||
|
|
||||||
|
self.client_plugin().validate_hadoop_version(
|
||||||
|
self.properties[self.PLUGIN_NAME],
|
||||||
|
self.properties[self.HADOOP_VERSION]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def resource_mapping():
|
def resource_mapping():
|
||||||
return {
|
return {
|
||||||
|
@ -135,6 +135,25 @@ class SaharaUtilsTests(common.HeatTestCase):
|
|||||||
calls = [mock.call(plugin_name), mock.call('noplugin')]
|
calls = [mock.call(plugin_name), mock.call('noplugin')]
|
||||||
self.sahara_client.plugins.get.assert_has_calls(calls)
|
self.sahara_client.plugins.get.assert_has_calls(calls)
|
||||||
|
|
||||||
|
def test_validate_hadoop_version(self):
|
||||||
|
"""Tests the validate_hadoop_version function."""
|
||||||
|
versions = ['1.2.1', '2.6.0', '2.7.1']
|
||||||
|
plugin_name = 'vanilla'
|
||||||
|
self.my_plugin.name = plugin_name
|
||||||
|
self.my_plugin.versions = versions
|
||||||
|
|
||||||
|
self.sahara_client.plugins.get.return_value = self.my_plugin
|
||||||
|
self.assertIsNone(self.sahara_plugin.validate_hadoop_version(
|
||||||
|
plugin_name, '2.6.0'))
|
||||||
|
ex = self.assertRaises(exception.StackValidationFailed,
|
||||||
|
self.sahara_plugin.validate_hadoop_version,
|
||||||
|
plugin_name, '1.2.3')
|
||||||
|
self.assertEqual("Requested plugin 'vanilla' doesn't support version "
|
||||||
|
"'1.2.3'. Allowed versions are 1.2.1, 2.6.0, 2.7.1",
|
||||||
|
six.text_type(ex))
|
||||||
|
calls = [mock.call(plugin_name), mock.call(plugin_name)]
|
||||||
|
self.sahara_client.plugins.get.assert_has_calls(calls)
|
||||||
|
|
||||||
|
|
||||||
class ImageConstraintTest(common.HeatTestCase):
|
class ImageConstraintTest(common.HeatTestCase):
|
||||||
|
|
||||||
|
@ -68,6 +68,8 @@ class SaharaClusterTest(common.HeatTestCase):
|
|||||||
self.sahara_mock = mock.MagicMock()
|
self.sahara_mock = mock.MagicMock()
|
||||||
self.patchobject(sahara.SaharaClientPlugin, '_create'
|
self.patchobject(sahara.SaharaClientPlugin, '_create'
|
||||||
).return_value = self.sahara_mock
|
).return_value = self.sahara_mock
|
||||||
|
self.patchobject(sahara.SaharaClientPlugin, 'validate_hadoop_version'
|
||||||
|
).return_value = None
|
||||||
self.cl_mgr = self.sahara_mock.clusters
|
self.cl_mgr = self.sahara_mock.clusters
|
||||||
self.fake_cl = FakeCluster()
|
self.fake_cl = FakeCluster()
|
||||||
|
|
||||||
|
@ -114,6 +114,8 @@ class SaharaNodeGroupTemplateTest(common.HeatTestCase):
|
|||||||
self.ngt_mgr = sahara_mock.node_group_templates
|
self.ngt_mgr = sahara_mock.node_group_templates
|
||||||
self.patchobject(sahara.SaharaClientPlugin,
|
self.patchobject(sahara.SaharaClientPlugin,
|
||||||
'_create').return_value = sahara_mock
|
'_create').return_value = sahara_mock
|
||||||
|
self.patchobject(sahara.SaharaClientPlugin, 'validate_hadoop_version'
|
||||||
|
).return_value = None
|
||||||
self.fake_ngt = FakeNodeGroupTemplate()
|
self.fake_ngt = FakeNodeGroupTemplate()
|
||||||
|
|
||||||
self.t = template_format.parse(node_group_template)
|
self.t = template_format.parse(node_group_template)
|
||||||
@ -256,6 +258,8 @@ class SaharaClusterTemplateTest(common.HeatTestCase):
|
|||||||
self.ct_mgr = sahara_mock.cluster_templates
|
self.ct_mgr = sahara_mock.cluster_templates
|
||||||
self.patchobject(sahara.SaharaClientPlugin,
|
self.patchobject(sahara.SaharaClientPlugin,
|
||||||
'_create').return_value = sahara_mock
|
'_create').return_value = sahara_mock
|
||||||
|
self.patchobject(sahara.SaharaClientPlugin, 'validate_hadoop_version'
|
||||||
|
).return_value = None
|
||||||
self.fake_ct = FakeClusterTemplate()
|
self.fake_ct = FakeClusterTemplate()
|
||||||
|
|
||||||
self.t = template_format.parse(cluster_template)
|
self.t = template_format.parse(cluster_template)
|
||||||
|
Loading…
Reference in New Issue
Block a user