Improve messages for validation
Change-Id: Icce40f843e97ffff11c6f7e26438e94d7fed247b Closes-bug: #1283289
This commit is contained in:
parent
4ab4a449df
commit
0ce861f72c
@ -13,6 +13,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import collections
|
||||||
import operator
|
import operator
|
||||||
|
|
||||||
import novaclient.exceptions as nova_ex
|
import novaclient.exceptions as nova_ex
|
||||||
@ -49,6 +50,17 @@ def _get_plugin_configs(plugin_name, hadoop_version, scope=None):
|
|||||||
return pl_confs
|
return pl_confs
|
||||||
|
|
||||||
|
|
||||||
|
def _check_duplicates(lst, message):
|
||||||
|
invalid = []
|
||||||
|
lst = collections.Counter(lst)
|
||||||
|
for (key, value) in lst.iteritems():
|
||||||
|
if value > 1:
|
||||||
|
invalid.append(key)
|
||||||
|
|
||||||
|
if len(invalid) > 0:
|
||||||
|
raise ex.InvalidDataException(message % invalid)
|
||||||
|
|
||||||
|
|
||||||
# Common validation checks
|
# Common validation checks
|
||||||
|
|
||||||
def check_plugin_name_exists(name):
|
def check_plugin_name_exists(name):
|
||||||
@ -181,25 +193,30 @@ def check_floatingip_pool_exists(ng_name, pool_id):
|
|||||||
|
|
||||||
|
|
||||||
def check_node_processes(plugin_name, version, node_processes):
|
def check_node_processes(plugin_name, version, node_processes):
|
||||||
if len(set(node_processes)) != len(node_processes):
|
_check_duplicates(node_processes, _("Duplicates in node processes have "
|
||||||
raise ex.InvalidDataException(
|
"been detected: %s"))
|
||||||
_("Duplicates in node processes have been detected"))
|
|
||||||
plugin_processes = []
|
plugin_processes = []
|
||||||
for process in plugin_base.PLUGINS.get_plugin(
|
for process in plugin_base.PLUGINS.get_plugin(
|
||||||
plugin_name).get_node_processes(version).values():
|
plugin_name).get_node_processes(version).values():
|
||||||
plugin_processes += process
|
plugin_processes += process
|
||||||
|
plugin_processes = set(plugin_processes)
|
||||||
|
|
||||||
if not set(node_processes).issubset(set(plugin_processes)):
|
invalid_processes = []
|
||||||
|
for node_process in node_processes:
|
||||||
|
if node_process not in plugin_processes:
|
||||||
|
invalid_processes.append(node_process)
|
||||||
|
|
||||||
|
if len(invalid_processes) > 0:
|
||||||
raise ex.InvalidReferenceException(
|
raise ex.InvalidReferenceException(
|
||||||
_("Plugin supports the following node procesess: %s")
|
_("Plugin doesn't support the following node processes: %s")
|
||||||
% sorted(plugin_processes))
|
% sorted(invalid_processes))
|
||||||
|
|
||||||
|
|
||||||
def check_duplicates_node_groups_names(node_groups):
|
def check_duplicates_node_groups_names(node_groups):
|
||||||
ng_names = [ng['name'] for ng in node_groups]
|
ng_names = [ng['name'] for ng in node_groups]
|
||||||
if len(set(ng_names)) < len(node_groups):
|
_check_duplicates(
|
||||||
raise ex.InvalidDataException(
|
ng_names, _("Duplicates in node group names are detected: %s"))
|
||||||
_("Duplicates in node group names are detected"))
|
|
||||||
|
|
||||||
|
|
||||||
def check_availability_zone_exist(az):
|
def check_availability_zone_exist(az):
|
||||||
|
@ -37,6 +37,8 @@ class TestScalingValidation(u.ValidationTestCase):
|
|||||||
super(TestScalingValidation, self).setUp()
|
super(TestScalingValidation, self).setUp()
|
||||||
api.plugin_base.setup_plugins()
|
api.plugin_base.setup_plugins()
|
||||||
self._create_object_fun = mock.Mock()
|
self._create_object_fun = mock.Mock()
|
||||||
|
self.duplicates_detected = ("Duplicates in node group names are"
|
||||||
|
" detected: ['a']")
|
||||||
|
|
||||||
@mock.patch('sahara.service.api.get_cluster')
|
@mock.patch('sahara.service.api.get_cluster')
|
||||||
@mock.patch('sahara.plugins.base.PluginManager.get_plugin')
|
@mock.patch('sahara.plugins.base.PluginManager.get_plugin')
|
||||||
@ -101,8 +103,7 @@ class TestScalingValidation(u.ValidationTestCase):
|
|||||||
]})
|
]})
|
||||||
self._assert_check_scaling(
|
self._assert_check_scaling(
|
||||||
data=data, cluster=cluster,
|
data=data, cluster=cluster,
|
||||||
expected_message='Duplicates in node '
|
expected_message=self.duplicates_detected,
|
||||||
'group names are detected',
|
|
||||||
expected_exception=ex.InvalidDataException)
|
expected_exception=ex.InvalidDataException)
|
||||||
|
|
||||||
@mock.patch("sahara.service.api.OPS")
|
@mock.patch("sahara.service.api.OPS")
|
||||||
@ -128,8 +129,7 @@ class TestScalingValidation(u.ValidationTestCase):
|
|||||||
}
|
}
|
||||||
self._assert_check_scaling(
|
self._assert_check_scaling(
|
||||||
data=data, cluster=cluster,
|
data=data, cluster=cluster,
|
||||||
expected_message='Duplicates in node '
|
expected_message=self.duplicates_detected,
|
||||||
'group names are detected',
|
|
||||||
expected_exception=ex.InvalidDataException)
|
expected_exception=ex.InvalidDataException)
|
||||||
data = {
|
data = {
|
||||||
'add_node_groups': [
|
'add_node_groups': [
|
||||||
|
@ -101,9 +101,8 @@ class TestNGTemplateCreateValidation(u.ValidationTestCase):
|
|||||||
'node_processes': ['wrong_process']
|
'node_processes': ['wrong_process']
|
||||||
},
|
},
|
||||||
bad_req_i=(1, 'INVALID_REFERENCE',
|
bad_req_i=(1, 'INVALID_REFERENCE',
|
||||||
"Plugin supports the following node procesess: ["
|
"Plugin doesn't support the following node processes: "
|
||||||
"'datanode', 'hiveserver', 'jobtracker', 'namenode', "
|
"['wrong_process']")
|
||||||
"'oozie', 'secondarynamenode', 'tasktracker']")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_ng_template_create_v_right(self):
|
def test_ng_template_create_v_right(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user