CFEngine 3 :: dynamic bundle parameters
By cyril on Wednesday 30 January 2013, 09:57 - CFEngine - Permalink
Edit : use list __@()__ as parameters
body common control { bundlesequence => { "test_vars", test("$(test_vars.params)"), }; } bundle common test_vars { vars: # declare "conflist" slist => { "show", "action" }; "paramlist" slist => maplist("$(this.bundle).$(this)", "conflist"); "params" string => join(",", "paramlist"); # define "$(conflist)[version]" string => "$(conflist)_0.1"; "show[other]" string => "other_value"; } bundle agent test(params) { vars: "str" string => "$(params)"; "paramlist" slist => splitstring("$(str)",",", "10"); "bundle[$(paramlist)]" string => lastnode("$(paramlist)", "\."); services: "function_$(bundle[$(paramlist)])" service_policy => "start", service_method => bundle_handler("$(paramlist)"); } body service_method bundle_handler(s) { service_bundle => $(this.promiser)("$(s)"); } bundle agent function_show(a) { vars: "index" slist => getindices("$(a)"); reports: cfengine_3:: "$(this.bundle) :: $(index) = $($(a)[$(index)])"; } bundle agent function_action(a) { reports: cfengine_3:: "$(this.bundle) :: version = $($(a)[version])"; }
In this example, the bundle test_vars declare and define test parameters and test bundle use services promise type to call function bundle with the function specific parameters
# cf-agent -f ./test_dynparam.cf R: function_show :: other = other_value R: function_show :: version = show_0.1 R: function_action :: version = action_0.1