Hi Sil,

The syntax for an array and a list is not the same, hence the problem. 
The @ is only for list, to pass an array, you only pass its name (with 
the context) as a parameter, and then you use its name to get the 
values, as in the following code.

bundle agent pip_example
{
      vars:
          any::
              #
              # Define the packages to install/delete
              #
              "pkgadd[yolk]"  string  =>  "0.4.3";

      methods:
          "any" usebundle =>  pip_install_pkg("pip_example.pkgadd");

}

### pip_lib.cf ###
bundle agent pip_install_pkg(pkgs_array)
{
      vars:
          any::
              "pip_install" slist =>  getindices("$(pkgs_array)");

Regards
Nicolas

On 30/03/2012 17:57, Sil Westerveld wrote:
> Hello,
>
> We're trying to pass an array as an argument to a bundle. However, it
> doesn't work like expected.
>
> The relevant code-snippets (in the files promises.cf and pip_lib.cf) are:
>
>
>
> ### promises.cf ###
> body common control
> {
>       bundlesequence =>  { pip_example };
>
>       inputs =>  {
>           "cfengine_stdlib.cf",
>           "pip_lib.cf",
>       };
> }
>
> bundle agent pip_example
> {
>       vars:
>           any::
>               #
>               # Define the packages to install/delete
>               #
>               "pkgadd[yolk]"  string  =>  "0.4.3";
>
>       methods:
>           "any" usebundle =>  pip_install_pkg(@(pip_example.pkgadd)));
>
> }
>
>
>
>
>
>
> ### pip_lib.cf ###
> bundle agent pip_install_pkg(pkgs_array)
> {
>       vars:
>           any::
>               "pip_install" slist =>  getindices("@(pkgs_array)");
>
>
>
> When we run the code, the following 'error' is printed in the (verbose)
> output:
> {{{
> cf3>        * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> cf3>        BUNDLE pip_install_pkg( {'@(pip_example.pkgadd)'} )
> cf3>        * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> cf3>
> cf3>  Initiate variable convergence...
> cf3>      ? Augment scope pip_install_pkg with pkgs_array (s)
> cf3>   !! List parameter "pip_example.pkgadd" not found while
> constructing scope "pip_install_pkg" - use @(scope.variable) in calling
> reference
> }}}
>
>
>
>
>
> We're using CFEngine Core 3.4.0a1.0530a8f.
>
> If we use the same syntax to pass a list, it goes well.
>
> Can anyone tell me if it's possible to pass arrays, and how it has to be
> done?
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to