Forum: CFEngine Help
Subject: Re: Using dist for random selections
Author: sauer
Link to topic: https://cfengine.com/forum/read.php?3,24500,24503#msg-24503
You can use "50" and "50.0", but the class that gets set is not canonified, and
the period screws up parsing because it's treated like a boolean "and". :) For
example, this:
classes:
"dtest" dist => {"50", "50.0"};
commands:
"/bin/grep ^dtest_ $(sys.workdir)/state/allclasses.txt";
results in this:
sauer@midnight:~$ ./test.cf
Q: ".../bin/grep ^dtes": dtest_50
I: Last 1 quoted lines were generated by promiser "/bin/grep ^dtest_
/home/sauer/.cfagent/state/allclasses.txt"
sauer@midnight:~$ ./test.cf
Q: ".../bin/grep ^dtes": dtest_50.0
I: Last 1 quoted lines were generated by promiser "/bin/grep ^dtest_
/home/sauer/.cfagent/state/allclasses.txt"
So, that's a bug (in 3.2.1, anyway). But it looks like the two are
equivalently favored in my short testing (exactly 300 out of 600 runs), so you
could use "dtest&!dtest_50" or possibly set another class using classmatch for
the 50.0 one. The same concept works for, say, 25. Here's that example, and
an example of using classmatch to work around the bug. :)
sauer@midnight:~$ cat ./test.cf
#!/usr/local/sbin/cf-agent -Kf
body common control { bundlesequence => { "a" }; }
bundle agent a {
classes:
"dtest" dist => {"25", "25.0", "25.00", "25.000"};
"dtest_25_0" expression => classmatch("dtest_25\.0");
"dtest_25_00" expression => classmatch("dtest_25\.00");
"dtest_25_000" expression => classmatch("dtest_25\.000");
reports:
dtest_25:: "Have dtest_25";
dtest_25_0:: "Have dtest_25.0";
dtest_25_00:: "Have dtest_25.00";
dtest_25_000:: "Have dtest_25.000";
}
sauer@midnight:~$ for I in $(seq 1 10); do ./test.cf; done
R: Have dtest_25.000
R: Have dtest_25.00
R: Have dtest_25.0
R: Have dtest_25.00
R: Have dtest_25.00
R: Have dtest_25.0
R: Have dtest_25.0
R: Have dtest_25.0
R: Have dtest_25.00
R: Have dtest_25.000
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine