Using properties in Wildfly-CLI scripts for if/else Logic

Viewed 2374

In the Wildfly CLI-scripts it is possible to test for existence of a resource and execute some conditional logic:

if (outcome != success) of /subsystem=datasources/xa-data-source=MY_DATASOURCE:read-resource  
// now do something  

When you run the cli, you can provide properties that are available in your scripts like this:

$JBOSS_HOME/bin/jboss-cli.sh --file=my.cli --properties=my.properties  

I would like to introduce some conditional logic based on these properties to do some conditional configuration.

One example is that to configure a mail-server, sometimes the mail-server requires a username and a password and in other cases it allows anonymous access. When setting up the mail-server config i would like to be able to have conditional logic like this

if MAILSERVER_USERNAME is defined //confiure mailserver with username password else // configure mailserver without attributes username/password

The only thing that I can see that is possible is if I already have added a system-property setting to my standalone-full.xml, i can query it like this:

if (outcome != success) of /system-property=foo:read-resource  
 // now do something  

I would like to do something simuilar based on the properties passed in from my.properties.

Is this possible?

Thanks,

Daniel

1 Answers

The properties you pass through --properties can't be used in every context, which makes testing their existence bothersome :

[standalone@localhost] :resolve-expression(expression=$myProperty)
Unrecognized variable myProperty
[standalone@localhost] :resolve-expression(expression=${myProperty})
{
    "outcome" => "failed",
    "failure-description" => "WFLYCTL0211: Cannot resolve expression '${myProperty}'",
    "rolled-back" => true
}

You can however solve that problem by using the set command in your cli script :

[standalone@localhost] set myProperty=${myProperty}
[standalone@localhost] :resolve-expression(expression=$myProperty)
{
    "outcome" => "success",
    "result" => "myValue"
}

You can then use the outcome of the resolve-expression command to test for the existence of your property :

[standalone@localhost] if (outcome == success) of :resolve-expression(expression=$myProperty)
[standalone@localhost] echo success ! myProperty is set ( $myProperty )
[standalone@localhost] end-if
success ! myProperty is set ( myValue )

If your property isn't defined, trying to resolve it with resolve-expression will raise an error :

[standalone@localhost] set myProperty=${notMyProperty}
[standalone@localhost] :resolve-expression(expression=$myProperty)
{
    "outcome" => "failed",
    "failure-description" => "WFLYCTL0211: Cannot resolve expression '${notMyProperty}'",
    "rolled-back" => true
}
Related