Example #1
0
    def test_everything_optional_is_allowed(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            (optional('z'), 'd'),
            (optional('f'), 'f'),
        )

        result = validate(data, schema, defined_keys=True)
        assert result is None
Example #2
0
    def test_everything_optional_is_allowed(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            (optional('z'), 'd'),
            (optional('f'), 'f'),
        )

        result = validate(data, schema, defined_keys=True)
        assert result is None
Example #3
0
    def test_top_level_cherry_pick_with_optionals_passes(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = cherry_pick((
            ('b', types.string),
            (optional('optional'), types.string))
        )

        assert validate(data, schema) is None
Example #4
0
    def test_top_level_cherry_pick_with_optionals_complains(self):
        data = {'b': 'b', 'optional': 1, 'garbage': 'yes'}
        schema = (('b', types.string), (optional('optional'), types.string))

        with raises(Invalid) as exc:
            validate(data, schema, defined_keys=True)
        error = exc.value.args[0]
        assert '1 did not pass validation against callable: string' in error
Example #5
0
    def test_complain_about_non_alpha_optional_schema(self):
        data = {'a': 'a', 'b': 'b', 'c': 'c'}
        schema = ((optional('b'), 'b'), ('a', 'a'), ('c', 'c'))

        with raises(SchemaError) as exc:
            validate(data, schema)

        error = exc.value.args[0]
        assert "b  schema item is not alphabetically ordered" in error
Example #6
0
 def test_extra_unexpected_items(self):
     optional_schema = (optional(1), 1)
     schema = ('a', Hybrid(validator, optional_schema))
     data = {'a': {'foo': 'bar'}}
     with raises(Invalid) as exc:
         validate(data, schema)
     error = exc.value.args[0]
     assert '-> a  did not match {}' in error
     assert exc.value.reason == 'unexpected extra items'
Example #7
0
 def test_optional_key_raises(self):
     data = {'a': 1, 'b': 3, 'c': 3}
     schema = (('a', 1), (optional('b'), 2), ('c', 3))
     validator = engine.Validator(data, schema)
     with raises(Invalid) as exc:
         validator.validate()
     exc_msg = str(exc.value)
     assert '3 did not match 2' in exc_msg
     assert 'b -> 3' in exc_msg
Example #8
0
 def test_optional_key_raises(self):
     data = {'a': 1, 'b': 3, 'c': 3}
     schema = (('a', 1), (optional('b'), 2), ('c', 3))
     validator = engine.Validator(data, schema)
     with raises(Invalid) as exc:
         validator.validate()
     exc_msg = str(exc.value)
     assert '3 did not match 2' in exc_msg
     assert 'b -> 3' in exc_msg
Example #9
0
 def test_extra_unexpected_items(self):
     optional_schema = (optional(1), 1)
     schema = ('a', Hybrid(validator, optional_schema))
     data = {'a': {'foo': 'bar'}}
     with raises(Invalid) as exc:
         validate(data, schema)
     error = exc.value.args[0]
     assert '-> a did not match {}' in error
     assert exc.value.reason == 'unexpected extra items'
Example #10
0
    def test_optional_is_kept_optional(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            ('d', 'd'),
            (optional('f'), 'f'),
        )

        result = validate(data, schema, defined_keys=True)
        assert result is None
Example #11
0
 def test_extra_unexpected_items(self):
     optional_schema = (optional(1), 1)
     schema = ("a", Hybrid(validator, optional_schema))
     data = {"a": {"foo": "bar"}}
     with raises(Invalid) as exc:
         validate(data, schema)
     error = exc.value.args[0]
     assert "-> a did not match {}" in error
     assert exc.value.reason == "unexpected extra items"
Example #12
0
    def test_complain_about_non_alpha_optional_schema(self):
        data = {'a': 'a', 'b': 'b', 'c': 'c'}
        schema = ((optional('b') ,'b'), ('a', 'a'), ('c', 'c'))

        with raises(SchemaError) as exc:
            validate(data, schema)

        error = exc.value.args[0]
        assert  "b  schema item is not alphabetically ordered" in error
Example #13
0
    def test_optional_is_kept_optional(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            ('d', 'd'),
            (optional('f'), 'f'),
        )

        result = validate(data, schema, defined_keys=True)
        assert result is None
Example #14
0
    def test_top_level_cherry_pick_with_optionals_complains(self):
        data = {'b': 'b', 'optional': 1}
        schema = (cherry_pick(
            ('b', types.string),),
            (optional('optional'), types.string)
        )

        with raises(Invalid) as exc:
            validate(data, schema)
        error = exc.value.args[0]
        assert '1 did not pass validation against callable: string' in error
Example #15
0
    def test_optional_does_not_affect_cherry_picked(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            ('d', 'a'),
            (optional('f'), 'f'),
        )

        with raises(Invalid) as exc:
            validate(data, schema, defined_keys=True)

        error = exc.value.args[0]
        assert  "-> d -> d did not match 'a'" in error
Example #16
0
    def test_optional_does_not_affect_cherry_picked(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = (
            ('d', 'a'),
            (optional('f'), 'f'),
        )

        with raises(Invalid) as exc:
            validate(data, schema, defined_keys=True)

        error = exc.value.args[0]
        assert "-> d -> d did not match 'a'" in error
Example #17
0
    def test_top_level_cherry_pick_with_optionals_passes(self):
        data = {'b': 'b', 'c': 'c', 'd': 'd'}
        schema = cherry_pick(
            (('b', types.string), (optional('optional'), types.string)))

        assert validate(data, schema) is None
Example #18
0
from notario.validators import types
from notario.decorators import optional


def list_of_hosts(value):
    assert isinstance(value, list), "requires format: ['host1', 'host2']"


install_schema = (("hosts", list_of_hosts), (optional("redhat_storage"), types.boolean))

mon_configure_schema = (
    ("fsid", types.string),
    ("host", types.string),
    ("monitor_interface", types.string),
    (optional("monitor_secret"), types.string),
    (optional("redhat_storage"), types.boolean),
)
Example #19
0
from notario.validators import types
from notario.decorators import optional

repo_schema = (
    (optional("distro"), types.string),
    (optional("distro_version"), types.string),
    (optional("needs_update"), types.boolean),
    (optional("ref"), types.string),
    (optional("type"), types.string),
)
Example #20
0
from notario.validators import types
from notario.decorators import optional

repo_schema = (
    (optional("distro"), types.string),
    (optional("distro_version"), types.string),
    (optional("needs_update"), types.boolean),
    (optional("ref"), types.string),
)
Example #21
0
 def test_optional_key_passes(self):
     data = {'a': 1, 'c': 3}
     schema = (('a', 1), (optional('b'), 2), ('c', 3))
     validator = engine.Validator(data, schema)
     assert validator.validate() is None
Example #22
0
 def test_optional_key(self):
     data = {"required": 2, "zoo": 1}
     schema = ((optional("optional"), 1), ("required", 2), ("zoo", 1))
     validate(data, schema)
Example #23
0
from notario.validators import types
from notario.decorators import optional


def list_of_hosts(value):
    assert isinstance(value, list), "requires format: ['host1', 'host2']"


install_schema = (
    ("hosts", list_of_hosts),
    (optional("redhat_storage"), types.boolean),
)
Example #24
0
 def test_optional_key(self):
     data = {'required': 2, 'zoo': 1}
     schema = ((optional('optional'), 1), ('required', 2), ('zoo', 1))
     validate(data, schema)
Example #25
0
 def test_optional_key(self):
     data = {'required': 2, 'zoo': 1}
     schema = ((optional('optional'), 1), ('required', 2), ('zoo', 1))
     validate(data, schema)
Example #26
0
from notario.validators import types
from notario.decorators import optional


def list_of_hosts(value):
    assert isinstance(value, list), "requires format: ['host1', 'host2']"


install_schema = (
    ("hosts", list_of_hosts),
    (optional("redhat_storage"), types.boolean),
)

mon_configure_schema = (
    ("fsid", types.string),
    ("host", types.string),
    ("monitor_interface", types.string),
    (optional("monitor_secret"), types.string),
    (optional("redhat_storage"), types.boolean),
)
Example #27
0
 def test_optional_key_passes(self):
     data = {'a': 1, 'c': 3}
     schema = (('a', 1), (optional('b'), 2), ('c', 3))
     validator = engine.Validator(data, schema)
     assert validator.validate() is None
Example #28
0
    ("cluster_network", types.string),
    ("fsid", types.string),
    ("monitor_address", validate_monitor_options),
    ("monitor_address_block", validate_monitor_options),
    ("monitor_interface", validate_monitor_options),
    ("public_network", types.string),
)

rados_options = (
    ("radosgw_address", validate_rados_options),
    ("radosgw_address_block", validate_rados_options),
    ("radosgw_interface", validate_rados_options),
)

osd_options = (
    (optional("dmcrypt"), types.boolean),
    (optional("osd_auto_discovery"), types.boolean),
    ("osd_scenario", validate_osd_scenarios),
)

collocated_osd_scenario = ("devices", iterables.AllItems(types.string))

non_collocated_osd_scenario = (
    (optional("bluestore_wal_devices"), iterables.AllItems(types.string)),
    (optional("dedicated_devices"), iterables.AllItems(types.string)),
    ("devices", iterables.AllItems(types.string)),
)

lvm_osd_scenario = ("lvm_volumes",
                    iterables.AllItems((
                        (optional('crush_device_class'), types.string),
Example #29
0
    ("cluster_network", types.string),
    ("fsid", types.string),
    ("monitor_address", validate_monitor_options),
    ("monitor_address_block", validate_monitor_options),
    ("monitor_interface", validate_monitor_options),
    ("public_network", types.string),
)

rados_options = (
    ("radosgw_address", validate_rados_options),
    ("radosgw_address_block", validate_rados_options),
    ("radosgw_interface", validate_rados_options),
)

osd_options = (
    (optional("dmcrypt"), validate_dmcrypt_bool_value),
    (optional("osd_auto_discovery"), validate_osd_auto_discovery_bool_value),
    ("osd_scenario", validate_osd_scenarios),
)

collocated_osd_scenario = ("devices", iterables.AllItems(types.string))

non_collocated_osd_scenario = (
    (optional("bluestore_wal_devices"), iterables.AllItems(types.string)),
    (optional("dedicated_devices"), iterables.AllItems(types.string)),
    ("devices", iterables.AllItems(types.string)),
)

lvm_batch_scenario = ("devices", iterables.AllItems(types.string))

lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems((
Example #30
0
    ("cluster_network", types.string),
    ("fsid", types.string),
    ("monitor_address", validate_monitor_options),
    ("monitor_address_block", validate_monitor_options),
    ("monitor_interface", validate_monitor_options),
    ("public_network", types.string),
)

rados_options = (
    ("radosgw_address", validate_rados_options),
    ("radosgw_address_block", validate_rados_options),
    ("radosgw_interface", validate_rados_options),
)

osd_options = (
    (optional("dmcrypt"), validate_dmcrypt_bool_value),
    (optional("osd_auto_discovery"), types.boolean),
)

lvm_batch_scenario = ("devices", iterables.AllItems(types.string))

lvm_filestore_scenario = ("lvm_volumes",
                          iterables.AllItems((
                              (optional('crush_device_class'), types.string),
                              ('data', types.string),
                              (optional('data_vg'), types.string),
                              ('journal', types.string),
                              (optional('journal_vg'), types.string),
                          )))

lvm_bluestore_scenario = ("lvm_volumes",
Example #31
0
    ("cluster_network", types.string),
    ("fsid", types.string),
    ("monitor_address", validate_monitor_options),
    ("monitor_address_block", validate_monitor_options),
    ("monitor_interface", validate_monitor_options),
    ("public_network", types.string),
)

rados_options = (
    ("radosgw_address", validate_rados_options),
    ("radosgw_address_block", validate_rados_options),
    ("radosgw_interface", validate_rados_options),
)

osd_options = (
    (optional("dmcrypt"), validate_dmcrypt_bool_value),
    (optional("osd_auto_discovery"), validate_osd_auto_discovery_bool_value),
    ("osd_scenario", validate_osd_scenarios),
)

collocated_osd_scenario = ("devices", iterables.AllItems(types.string))

non_collocated_osd_scenario = (
    (optional("bluestore_wal_devices"), iterables.AllItems(types.string)),
    (optional("dedicated_devices"), iterables.AllItems(types.string)),
    ("devices", iterables.AllItems(types.string)),
)

lvm_batch_scenario = ("devices", iterables.AllItems(types.string))

lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems((
Example #32
0
 def test_optional_value(self):
     data = {"optional": "", "required": 2}
     schema = (("optional", optional(1)), ("required", 2))
     validate(data, schema)
Example #33
0
 def test_optional_value(self):
     data = {'optional': '', 'required': 2}
     schema = (('optional', optional(1)), ('required', 2))
     validate(data, schema)
Example #34
0
def list_of_monitors(value):
    msg = 'requires format: [{"host": "mon1.host", "interface": "eth1"},{"host": "mon2.host", "address": "10.0.0.1"}]'
    assert isinstance(value, list), msg
    msg = 'address or interface is required for monitor lists: [{"host": "mon1", "interface": "eth1", {"host": "mon2", "address": "10.0.0.1"}]'
    for monitor in value:
        assert isinstance(monitor, dict), msg
        assert "host" in monitor, msg
        try:
            assert "interface" in monitor, msg
        except AssertionError:
            assert "address" in monitor, msg


conf = (
    (optional("global"), types.dictionary),
    (optional("mds"), types.dictionary),
    (optional("mon"), types.dictionary),
    (optional("osd"), types.dictionary),
    (optional("rgw"), types.dictionary),
)

install_schema = (
    ("hosts", list_of_hosts),
    (optional("redhat_storage"), types.boolean),
    (optional("redhat_use_cdn"), types.boolean),
    (optional("verbose"), types.boolean),
)

agent_install_schema = (
    ("hosts", list_of_hosts),
Example #35
0
 def test_optional_value(self):
     data = {'optional': '', 'required': 2}
     schema = (('optional', optional(1)), ('required', 2))
     validate(data, schema)
Example #36
0
def optional(validator):
    from notario import decorators
    msg = "import optional from notario.decorators, not from utils"
    warnings.warn(msg, DeprecationWarning, stacklevel=2)
    return decorators.optional(validator)
Example #37
0
def optional(validator):
    from notario import decorators
    msg = "import optional from notario.decorators, not from utils"
    warnings.warn(msg, DeprecationWarning, stacklevel=2)
    return decorators.optional(validator)
Example #38
0
def list_of_monitors(value):
    msg = 'requires format: [{"host": "mon1.host", "interface": "eth1"},{"host": "mon2.host", "address": "10.0.0.1"}]'
    assert isinstance(value, list), msg
    msg = 'address or interface is required for monitor lists: [{"host": "mon1", "interface": "eth1", {"host": "mon2", "address": "10.0.0.1"}]'
    for monitor in value:
        assert isinstance(monitor, dict), msg
        assert "host" in monitor, msg
        try:
            assert "interface" in monitor, msg
        except AssertionError:
            assert "address" in monitor, msg


conf = (
    (optional("global"), types.dictionary),
    (optional("mds"), types.dictionary),
    (optional("mon"), types.dictionary),
    (optional("osd"), types.dictionary),
    (optional("rgw"), types.dictionary),
)

install_schema = (
    ("hosts", list_of_hosts),
    (optional("redhat_storage"), types.boolean),
    (optional("redhat_use_cdn"), types.boolean),
    (optional("verbose"), types.boolean),
)

agent_install_schema = (
    ("hosts", list_of_hosts),
Example #39
0
CONF = cfg.CONF

LOG = log.getLogger(__name__)

CONDUCTOR_API_OPTS = [
    cfg.StrOpt('server_url', default='', help='Base URL for plans.'),
    cfg.StrOpt('username', default='', help='username for plans.'),
    cfg.StrOpt('password', default='', help='password for plans.'),
    cfg.BoolOpt('basic_auth_secure', default=True, help='auth toggling.'),
]

CONF.register_opts(CONDUCTOR_API_OPTS, group='conductor_api')

CREATE_SCHEMA = (
    (decorators.optional('files'), types.dictionary),
    (decorators.optional('id'), types.string),
    (decorators.optional('limit'), types.integer),
    (decorators.optional('name'), types.string),
    (decorators.optional('num_solution'), types.string),
    ('template', string_or_dict),
    (decorators.optional('template_url'), types.string),
    (decorators.optional('timeout'), types.integer),
)


class PlansBaseController(object):
    """Plans Base Controller - Common Methods"""
    def plan_link(self, plan_id):
        return [{
            "href": "%(url)s/v1/%(endpoint)s/%(id)s" % {
Example #40
0
    ("cluster_network", types.string),
    ("fsid", types.string),
    ("monitor_address", validate_monitor_options),
    ("monitor_address_block", validate_monitor_options),
    ("monitor_interface", validate_monitor_options),
    ("public_network", types.string),
)

rados_options = (
    ("radosgw_address", validate_rados_options),
    ("radosgw_address_block", validate_rados_options),
    ("radosgw_interface", validate_rados_options),
)

osd_options = (
    (optional("dmcrypt"), types.boolean),
    (optional("osd_auto_discovery"), types.boolean),
)

lvm_batch_scenario = ("devices", iterables.AllItems(types.string))

lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems((
    (optional('crush_device_class'), types.string),
    ('data', types.string),
    (optional('data_vg'), types.string),
    ('journal', types.string),
    (optional('journal_vg'), types.string),
)))

lvm_bluestore_scenario = ("lvm_volumes", iterables.AllItems((
    (optional('crush_device_class'), types.string),