CFEngine: new classesmatching() function
Get an slist of defined classes matching a given unanchored regular expression.
Example reproduced below:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
body common control
{
bundlesequence => { run };
}
bundle agent run
{
vars:
"c" slist => classesmatching(".*");
reports:
cfengine::
"Classes matching = $(c)";
}
|
Will output all classes matching “.*” pattern, so all of them:
1
2
3
4
5
6
7
8
9
10
11
|
Running full policy integrity checks
R: Classes matching = Sunday
R: Classes matching = compiled_on_linux_gnu
R: Classes matching = cpu_high_normal
R: Classes matching = cfengine_3_5_0b2
R: Classes matching = linux_2_6_32_358_el6_x86_64
R: Classes matching = ssh_in_high
R: Classes matching = 192_168_2_104
R: Classes matching = ipv4_192_168_2_104
R: Classes matching = redhat
(...)
|
In addition to handle custom classes, it may be used to spot abnormal node behavior thanks to classes defined by cf-monitord.
The following example is dumb and will report any level above normality, but “normality” is very system specific, and the regular expression must be modified accordingly to avoid noise.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
body common control
{
bundlesequence => { foo };
}
bundle agent foo
{
vars:
"anomalies" slist => classesmatching("dev1|dev2|anomaly");
reports:
cfengine::
"Possible anomaly: $(anomalies)";
}
|
Output:
1
2
3
|
Running full policy integrity checks
R: Possible anomaly: cpu_high_dev1
R: Possible anomaly: cpu0_high_dev1
|