def _get_qdevice_heuristics_options_validators( allow_empty_values=False, force_options=False ): allow_extra_values = validate.allow_extra_values( report_codes.FORCE_OPTIONS, force_options ) validators = { "mode": validate.value_in( "mode", ("off", "on", "sync"), **allow_extra_values ), "interval": validate.value_positive_integer( "interval", **allow_extra_values ), "sync_timeout": validate.value_positive_integer( "sync_timeout", **allow_extra_values ), "timeout": validate.value_positive_integer( "timeout", **allow_extra_values ), } if not allow_empty_values: # make sure to return a list even in python3 so we can call append # on it return list(validators.values()) return [ validate.value_empty_or_valid(option_name, validator) for option_name, validator in validators.items() ]
def _get_qdevice_model_net_options_validators(node_ids, allow_empty_values=False, force_options=False): allow_extra_values = validate.allow_extra_values( report_codes.FORCE_OPTIONS, force_options) validators = { "connect_timeout": validate.value_integer_in_range("connect_timeout", 1000, 2 * 60 * 1000, **allow_extra_values), "force_ip_version": validate.value_in("force_ip_version", ("0", "4", "6"), **allow_extra_values), "port": validate.value_port_number("port", **allow_extra_values), "tie_breaker": validate.value_in("tie_breaker", ["lowest", "highest"] + node_ids, **allow_extra_values), } if not allow_empty_values: return ([ validate.value_not_empty("host", "a qdevice host address"), _validate_qdevice_net_algorithm(**allow_extra_values) ] + # explicitely convert to a list for python 3 list(validators.values())) return ([ validate.value_not_empty("host", "a qdevice host address"), _validate_qdevice_net_algorithm(**allow_extra_values) ] + [ validate.value_empty_or_valid(option_name, validator) for option_name, validator in validators.items() ])
def add_quorum_device( model, model_options, generic_options, heuristics_options, node_ids, force_model=False, force_options=False ): """ Validate adding a quorum device string model -- quorum device model dict model_options -- model specific options dict generic_options -- generic quorum device options dict heuristics_options -- heuristics options list node_ids -- list of existing node ids bool force_model -- continue even if the model is not valid bool force_options -- turn forceable errors into warnings """ report_items = [] model_validators = { "net": lambda: _qdevice_add_model_net_options( model_options, node_ids, force_options ), } if model in model_validators: report_items += model_validators[model]() else: report_items += validate.run_collection_of_option_validators( {"model": model}, [ validate.value_in( "model", list(model_validators.keys()), **validate.allow_extra_values( report_codes.FORCE_QDEVICE_MODEL, force_model ) ) ] ) return ( report_items + _qdevice_add_generic_options(generic_options, force_options) + _qdevice_add_heuristics_options(heuristics_options, force_options) )