From a6f3a6a3fdf7854458e248896841010a3eecfb41 Mon Sep 17 00:00:00 2001 From: Andriy Popovych Date: Thu, 31 Mar 2016 14:45:24 +0300 Subject: [PATCH] Add ability for role to conflict with all roles To support conflict of some node role with other roles '*' symbol is used. This patch provides fix in validation for such situation. Change-Id: If0123dbb05df0eddb071527990417ebafe300c93 Related Bug: #1547590 --- fuel_plugin_builder/tests/test_validator_v3.py | 18 ++++++++++++++++++ fuel_plugin_builder/validators/schemas/v3.py | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fuel_plugin_builder/tests/test_validator_v3.py b/fuel_plugin_builder/tests/test_validator_v3.py index 9d2294d..a825999 100644 --- a/fuel_plugin_builder/tests/test_validator_v3.py +++ b/fuel_plugin_builder/tests/test_validator_v3.py @@ -549,6 +549,24 @@ class TestValidatorV3(BaseValidator): utils_mock, mock_data, err_msg, self.validator.check_node_roles_schema) + @mock.patch('fuel_plugin_builder.validators.base.utils') + def test_check_node_role_conflicts(self, utils_mock): + utils_mock.parse_yaml.return_value = { + 'plugin_name': { + 'name': 'test_plugin', + 'description': 'test plugin', + 'conflicts': '*'}} + + self.validator.check_node_roles_schema() + + utils_mock.parse_yaml.return_value = { + 'plugin_name': { + 'name': 'test_plugin', + 'description': 'test plugin', + 'conflicts': ['some_role']}} + + self.validator.check_node_roles_schema() + @mock.patch('fuel_plugin_builder.validators.base.utils') def test_check_valid_volumes_roles_mapping_name(self, utils_mock): utils_mock.parse_yaml.return_value = { diff --git a/fuel_plugin_builder/validators/schemas/v3.py b/fuel_plugin_builder/validators/schemas/v3.py index 81e3374..d79411d 100644 --- a/fuel_plugin_builder/validators/schemas/v3.py +++ b/fuel_plugin_builder/validators/schemas/v3.py @@ -326,7 +326,10 @@ class SchemaV3(SchemaV2): 'type': 'string', 'description': ('Short description of role' ' functionality')}, - 'conflicts': self.list_of_strings, + 'conflicts': { + 'oneOf': [ + self.list_of_strings, + {'type': 'string', 'enum': ['*']}]}, 'has_primary': { 'type': 'boolean', 'description': ('During orchestration this role'