On 04/13/2012 10:16 AM, Bas van der Vlies wrote:
I am using the new template functionality in 3.3.0 and using a default set of 
variables and can override them. But my set of
variables are list and strings. For strings it is easy but what about lists?

Here is an example of what i am trying to accomplish. cfg[ldap_servers] is a 
slist and want to override the default value. In my
real world i have more slists variables.
{{{
body common control
{
bundlesequence => { "test" };

inputs => { "cfengine_stdlib.cf" };
}

bundle agent template(params)
{
vars:
any::
# An array of configuration parameters used in template files
#
"cfg[ldap_servers]" slist => { "cua.irc.sara.nl", "ldap.cua.sara.nl" },
policy => "overridable";

"cfg[ldap_base]" string => "dc=hpcv,dc=sara,dc=nl",
policy => "overridable";
"cfg[ldap_user]" string => "ou=Users,dc=hpcv,dc=sara,dc=nl";
"cfg[ldap_group]" string => "ou=Groups,dc=hpcv,dc=sara,dc=nl";
"cfg[ldap_netgroup]" string => "ou-Netgroups,dc=hpcv,dc=sara,dc=nl";
"cfg[cacert_file]" string => "/etc/ssl/certs/ca-certificates.crt";


# Copy configuration parameters passed, into a local array
"param_keys" slist => getindices("$(params)");
"cfg[$(param_keys)]" string => "$($(params)[$(param_keys)])",
policy => "overridable";

reports:
debian::
"bas params array $(param_keys)";
"bas string $(cfg[ldap_base])";
"bas string $(cfg[ldap_user])";
"bas list $(cfg[ldap_servers])";
}


bundle agent test
{

vars:
any::
"varray[ldap_servers]" slist => { "A", "B", "C" };
"varray[ldap_base]" string => "jaap";

methods:

"template" usebundle => template("test.varray");
}



I can insert a list in array with the aid of the '@' operator.  This only works 
for variable list but not for
an associative array variablelist, see below:
{{{

            "local_list"             slist   => { "bas", "sil" };
            "cfg[ldap_servers]"      slist   => { "cua.irc.sara.nl", 
"ldap.cua.sara.nl" },
                policy => "overridable";


            "cfg[$(param_keys)]" slist => { @(cfg[ldap_servers]) },
                policy => "overridable";

            #"cfg[$(param_keys)]" slist => { @(local_list) },
            #    policy => "overridable";
}}}

It works for @(local_list) but for @(cfg[ldap_servers]) i get parsing errors:
{{{cf3> ./template.cf:32,45: syntax error, near token '@'
cf3> ./cfengine_stdlib.cf:1,2: syntax error, near token '('
cf3> ./cfengine_stdlib.cf:1,5: syntax error, near token 'cfg'
cf3> ./cfengine_stdlib.cf:1,6: syntax error, near token '['
cf3> ./cfengine_stdlib.cf:1,18: syntax error, near token 'ldap_servers'
cf3> ./cfengine_stdlib.cf:1,19: syntax error, near token ']'
cf3> ./cfengine_stdlib.cf:1,20: syntax error, near token ')'
cf3> ./cfengine_stdlib.cf:1,22: syntax error, near token '}'
cf3> ./cfengine_stdlib.cf:1,23: syntax error, near token ','
cf3> ./cfengine_stdlib.cf:2,22: syntax error, near token 'policy'
cf3> ./cfengine_stdlib.cf:2,25: syntax
}}}

How can i insert the cfg[ldap_servers] into a slist variable?




--
********************************************************************
*  Bas van der Vlies                    e-mail: b...@sara.nl       *
*  SARA - Academic Computing Services   Amsterdam, The Netherlands *
********************************************************************

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to