Hi!
This is one more example about change behavior in preevaluate stage(compared versions 3.7 and 3.10):
With this code:
unit_test_merged.cf:
#####################################
body common control
{
bundlesequence => { "test_merged" };
}
bundle agent test_merged
{
vars:
"a" string => "string a";
"b" string => "string b";
"vars1[a]" string => "$(a)";
"vars1[b]" string => "$(b)";
methods:
"run_low_test_merged" usebundle => test_merged_low;
}
bundle agent test_merged_low
{
vars:
"c" string => "string c";
"vars1[c]" string => "$(c)";
"merged_data_vars" data => mergedata('{ "vars1": vars1 }');
"merged_data_vars_str" string => storejson(merged_data_vars);
reports:
"$(this.bundle) : merged_data_vars_str : $(merged_data_vars_str)";
}
---
I see in 3.7.3 (expected behavior):
[root@]# cf-agent -I -K -f
unit_test_merged.cf R: test_merged_low : merged_data_vars_str : {
"vars1": {
"c": "string c"
}
}
In 3.10 release:
[root@]$ cf-agent -I -K -f
unit_test_merged.cf R: test_merged_low : merged_data_vars_str : {
"vars1": {
"a": "string a",
"b": "string b",
"c": "string c"
}
}
So, we can see "foreign" variables vars1[a] and vars1[b] from upper bundle.
This is a piece of debug log:
verbose: ----------------------------------------------------------------
verbose: Loading policy
verbose: ----------------------------------------------------------------
debug: Hashed policy file /var/cfengine/inputs/
unit_test_merged.cf to {checksum}MD5=a792a4d12dec7bfb510809808f3dc7f3
debug: Loading policy file /var/cfengine/inputs/
unit_test_merged.cf verbose: BEGIN parsing file: /var/cfengine/inputs/
unit_test_merged.cf verbose: END parsing file: /var/cfengine/inputs/
unit_test_merged.cf debug: Resolving classes and variables in 'bundle agent test_merged'
{skip}
debug: DeRefCopyPromise(): promiser:'merged_data_vars_str'
debug: DeRefCopyPromise(): copying constraint: 'string'
debug: Evaluating function: storejson("merged_data_vars")
debug: storejson: from data container merged_data_vars, got JSON data '{
"vars1": {
"a": "string a",
"b": "string b",
"c": "string c"
}
}'
debug: Evaluating vars promise: merged_data_vars_str
debug: Initiate control variable convergence for scope 'control_common'
verbose: Running full policy integrity checks
verbose: ----------------------------------------------------------------
Can we hope for fixing it sometime in future?
---
Igor