#+begin_src cfengine3
body common control
{
  bundlesequence => { run };
}

bundle agent run
{
  vars:
    "todo" slist => { "call_1,a,b", "call_2,x,y", "call_2,p,q" };

  methods:
    "call" usebundle => unpack($(todo));
}

bundle agent unpack(list)
{
  vars:
    "split" slist => splitstring($(list), ",", "100");
    "method" string => nth("split", "0");
    "param1" string => nth("split", "1");
    "param2" string => nth("split", "2");

  methods:
    "relay" usebundle => $(method)($(param1), $(param2));
}

bundle agent call_1(p1, p2)
{
  reports:
    "$(this.bundle): called with parameters $(p1) and $(p2)";
}

bundle agent call_2(p1, p2)
{
  reports:
    "$(this.bundle): called with parameters $(p1) and $(p2)";
}

#+end_src
