[ClusterLabs] Antw: Re: Where is the syntax for parameter types?

Ulrich Windl Ulrich.Windl at rz.uni-regensburg.de
Wed Oct 16 05:31:58 EDT 2019


>>> Oyvind Albrigtsen <oalbrigt at redhat.com> schrieb am 16.10.2019 um 11:02 in
Nachricht <20191016090219.z5jz4tnd5hxi7xpf at redhat.com>:
> On 16/10/19 10:53 +0200, Ulrich Windl wrote:
>>Hi!
>>
>>I just discovered an interesting problem with my own RA that allows a
boolean 
> parameter:
>>Where is the exact syntax for "boolean" defined, and who's responsible for 
> checking it? The RA or (e.g.) crm?
>>The concrete problem is that my RA expected the boolean parameter to be 
> either '0' or '1', but crm shell was happy with the value "true".
>>So where is the document describing the parameter types' syntax, and who is

> responsible for checking that? RA's validate‑all?
> This is done by the validate‑all action for the RA.
> 
> Sounds like the agent should use "ocf_is_true" instead of checking
> against a specific value.

In addition to what I had said before (doesn't help the user when enetring),
the function is like this:
ocf_is_true() {
        case "$1" in
        yes|true|1|YES|TRUE|True|ja|on|ON) true ;;
        *)      false ;;
        esac
}

Probably the Spanish and French envy Germans now ;-)
(their "yes" isn't included)

So it seems:
The management tools do not "normalize" Boolean values, but keep them "as is",
and they don't verify those. Id' still prefer some concrete syntax, so that a
Boolean is either true, false or an error.
The implementation treats everything not "true" as "false" which is basically
a wrong implementation:

If you have ocf_is_decimal() returning true if the syntax is a decimal number,
the corresponding function for Boolean is not ocf_is_true(), but
ocf_is_boolean(), returning flase if the value is not Boolean (not if the value
isn't "true").

This isn't a well-designed library of functions.

So if you add an ocf_is_false() (which is NOT !ocf_is_true()), you could
write
if ! ocf_is_false $val && ! ocf_is_true $val
then
	error "$val is not a Boolean value"
fi

Or:
ocf_is_boolean()
{
   ocf_is_false "$1" || ocf_is_true "$1"
}

Regards,
Ulrich

> 
> Feel free to create a pull request or issue on
> https://github.com/ClusterLabs/resource‑agents.
> 
> 
> Oyvind
>>
>>Regards,
>>Ulrich
>>
>>
>>_______________________________________________
>>Manage your subscription:
>>https://lists.clusterlabs.org/mailman/listinfo/users 
>>
>>ClusterLabs home: https://www.clusterlabs.org/ 
> _______________________________________________
> Manage your subscription:
> https://lists.clusterlabs.org/mailman/listinfo/users 
> 
> ClusterLabs home: https://www.clusterlabs.org/ 





More information about the Users mailing list