Rules are not limited to simple comparison statements. You have access to a few functions and a comprehensive number of operators.
Operators¶
We have talked about the equality =
comparison operator so far, but as you can see from the list below, you have access to all common operators from mathematical and boolean expressions.
Arithmetic operators
Operator | What it does |
---|---|
+ |
Addition operator |
- |
Subtraction operator |
* |
Multiplication operator |
/ |
Division operator |
% |
Modulo operator |
^^ |
Exponent operator |
Boolean operators
Operator | What it does |
---|---|
|| |
Or operator |
&& |
And operator |
! |
Not operator |
Comparison operators
Operator | What it does |
---|---|
= |
Compares for equality |
< |
Compares for less than |
> |
Compares for greater than |
<= |
Compares for less than or equal to |
>= |
Compares for greater than or equal to |
Lookup operators
Operator | What it does |
---|---|
{m} |
Retrieves the snapshot data for snapshot id m |
List operators
Operator | What it does |
---|---|
m[] |
Retrieves the complete list from m |
m[n] |
Retrieves the n 'th item from the list m |
m['n'='o'] |
Retrieves the item that matches predicate n equals o from the list m |
Dictionnary operators
Operator | What it does |
---|---|
m.n |
Retrieves the property n from the dictionnary m |
Functions¶
Functions work just like any other programming language, use the identifier and pass the parameters inside of parentheses and they will yield something.
Data control
Operator | What it does |
---|---|
exists(n) |
Ensures that n does not resolve to None |
Data aggregation
Operator | What it does |
---|---|
count(n) |
Counts the number of items in n |
Mixing operators and functions¶
You can create very complex expressions with what you have seen so far. There is almost no limit to what you can do with the rules engine. Here are a few complex examples:
Compare that the dnsServers of two different snapshots
{2}.properties.dhcpOptions.dnsServers[] = {3}.properties.dhcpOptions.dnsServers[]
Ensure you have at least 4 DNS servers defined
count({2}.properties.dhcpOptions.dnsServers[]) + count({3}.properties.dhcpOptions.dnsServers[]) = 4
The only limit is your imagination and the data that you have on hand.