Skip to content

Instantly share code, notes, and snippets.

@tjormola
Created November 17, 2015 12:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tjormola/09e959572302b066ab17 to your computer and use it in GitHub Desktop.
Save tjormola/09e959572302b066ab17 to your computer and use it in GitHub Desktop.
body agent control
{
ifelapsed => 0;
}
bundle agent main
{
vars:
"data_template" data => parsejson('[
{
"key1":"",
"key2":"default2",
"key3":"default3",
"key4":"",
},
{
"key1":"",
"key2":"2nd default2",
"key3":"2nd default3",
"key4":"",
"xtra_default_key":"value",
}
]');
"data_override" data => parsejson('[
{
"key1":"override1",
},
{
"key2":"2nd override2",
"key4":"foobar",
"override_new_key":"foobar",
}
]');
"data_should_be_result" data => parsejson('[
{
"key1":"override1",
"key2":"default2",
"key3":"default3",
"key4":"",
},
{
"key1":"",
"key2":"2nd override2",
"key3":"2nd default3",
"key4":"foobar",
"override_new_key":"foobar",
"xtra_default_key":"value",
}
]');
"s1" string => format("%S", "data_template");
"s2" string => format("%S", "data_override");
"s3" string => format("%S", "data_should_be_result");
"s4" string => format("%S", "combine_data.data_result"),
depends_on => { "run_test" },
handle => "result_ready";
"s5" string => format("%S", "combine_data2.data_result"),
depends_on => { "run_test2" },
handle => "result_ready2";
methods:
"test" usebundle => combine_data(@(data_template), @(data_override)),
handle => "run_test";
"test2" usebundle => combine_data2(@(data_template), @(data_override)),
handle => "run_test2";
reports:
"LEFT $(s1)";
"RIGHT $(s2)";
"EXPECTED $(s3)";
"RESULT1 $(s4)" depends_on => { "result_ready" };
"RESULT2 $(s5)" depends_on => { "result_ready2" };
}
bundle agent combine_data(data_left, data_right)
{
classes:
"_data_size_ok" expression => strcmp(length("_i"), length("_i_right"));
vars:
any::
"_i" slist => getindices("data_left");
"_i_right" slist => getindices("data_right");
_data_size_ok::
"_data_left_item_$(_i)" data => mergedata("data_left[$(_i)]");
"_data_right_item_$(_i)" data => mergedata("data_right[$(_i)]");
"_data_combined_item_$(_i)" data => mergedata("_data_left_item_$(_i)", "_data_right_item_$(_i)");
"_data_combined_json_string_item_$(_i)" string => format("%S", "_data_combined_item_$(_i)");
"_data_combined_json_list[$(_i)]" string => "$(_data_combined_json_string_item_$(_i))";
"_data_combined_json_values" slist => getvalues("_data_combined_json_list");
"data_result" data => parsejson(format("[%s]", join(",", "_data_combined_json_values")));
}
bundle agent combine_data2(data_left, data_right)
{
vars:
"data_result" data => mergedata("data_left", "data_right");
}
@tjormola
Copy link
Author

(14:34:15)(tj@ganga)(~)$ cf-agent /tmp/combine_data.cf 
R: LEFT     [{"key1":"","key2":"default2","key3":"default3","key4":""},{"key1":"","key2":"2nd default2","key3":"2nd default3","key4":"","xtra_default_key":"value"}]
R: RIGHT    [{"key1":"override1"},{"key2":"2nd override2","key4":"foobar","override_new_key":"foobar"}]
R: EXPECTED [{"key1":"override1","key2":"default2","key3":"default3","key4":""},{"key1":"","key2":"2nd override2","key3":"2nd default3","key4":"foobar","override_new_key":"foobar","xtra_default_key":"value"}]
R: RESULT1  [{"key1":"override1","key2":"default2","key3":"default3","key4":""},{"key1":"","key2":"2nd override2","key3":"2nd default3","key4":"foobar","override_new_key":"foobar","xtra_default_key":"value"}]
R: RESULT2  [{"key1":"","key2":"default2","key3":"default3","key4":""},{"key1":"","key2":"2nd default2","key3":"2nd default3","key4":"","xtra_default_key":"value"},{"key1":"override1"},{"key2":"2nd override2","key4":"foobar","override_new_key":"foobar"}]
(14:34:19)(tj@ganga)(~)$ cf-agent --version
CFEngine Core 3.8.0b1
(14:34:21)(tj@ganga)(~)$ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment