Don't mess vars and classes and, perhaps, read the Cfengine reference
more thoroughly. Brief rules are:
1. Variables can be accessed outside a bundle by bundle name, e.g.
$(bundle_name.variable_name)
2. Lists cannot be accessed outside a bundle directly and should be
reinstated locally, e.g.
vars:
"local_list" slist => { @(outer.list) };
3. Classes only become global being defined either in common bundles
or in compound bodies, e.g.
bundle common foo
{
classes:
"global_class" or => { "any" };
}
bundle agent bar
{
files:
"/tmp/foo"
create => "true",
classes => if_repaired("foo_done");
}
# defined in cfengine_stdlib.cf
body classes if_repaired(x)
{
promise_repaired => { "$(x) };
}
2010/11/16 Gusto <[email protected]>:
> Hi Folks,
>
> It would seem that if you have one item in a slist it negates the vars.
> "master_test" string => "/var/cfmasterfiles/cf310dev/test/";
> "master_server" string => "tester.server.com";
>
> Idea was to add more servers as they where defined.
>
> Any thoughts?
>
> Regards,
> Gusto
>
> On Tue, Nov 16, 2010 at 12:11 PM, Gusto <[email protected]> wrote:
>> Hi Folks,
>>
>> I am seeing this behavior on the the 3.1.0 release, where if I define
>> in a bundle some variables I can not use them later on in the same
>> bundle. The normal order should be vars then later the files right?
>> This might have been discussed on another thread that I missed --
>> tried to follow as many as possible. Has anyone seen this issue, or a
>> solution?
>>
>> Any pointer are greatly appreciated
>> Best regards,
>> Gusto
>>
>>
>> Details:
>> OS: Centos 5.5 x86_64
>> Cfengine: gnu build in RPM version 3.1.0 final tar file.
>> Use Case: I define in a agent bundle under vars the paths and server
>> strings/string lists for the paths and servers. This could be
>> something like your update.cf or just your failsafe.cf. When I run the
>> bundle does not see them. I had used this for my 3.0.5p1 configs (rpms
>> built on same server just release changed). During the beta I thought
>> this might have been the issue Neil spotted (
>> https://cfengine.com/bugtracker/view.php?id=334 ).
>>
>> I took a copy of the unit_server_copy_remote.cf and added the vars to
>> show what I see.
>>
>> NOTE: tester.server.com is defined as my network cf3 server. To
>> simplify this host is also acting as the server so there is no key
>> exchange complications.
>> ##### ---------------------- Sample from the unit_test modified to
>> show issue ---------------------------
>> body common control
>> {
>> bundlesequence => {
>> "testbundle"
>> };
>> }
>>
>> ############################################
>> bundle agent testbundle
>> {
>>
>> vars:
>> linux::
>> "master_test" string => "/var/cfmasterfiles/cf310dev/test/";
>> "master_server" slist => { "tester.server.com" };
>>
>> classes:
>> "testdir" expression => isdir("/tmp/testcf310");
>>
>> files:
>> testdir::
>> "/tmp/testcf310/somesample.txt"
>> perms => system,
>> copy_from =>
>> mycopy("$(master_server)/somesample.txt","$(master_server)"), #Does
>> not show all vars expanded.
>> #copy_from =>
>> mycopy("$(master_server)/somesample.txt","tester.server.com"), #Does
>> not show all vars expanded.
>> #copy_from =>
>> mycopy("/var/cfmasterfiles/cf310dev/test/somesample.txt","tester.server.com"),
>> #only way to get a copy moving.
>> depth_search => recurse("inf"),
>> classes => repaired("got_somesample");
>>
>> reports:
>> testdir::
>> "The test dir is there and we have that class";
>>
>> got_somesample::
>> "Got the sample file";
>> }
>>
>> ############################################
>> body perms system
>> {
>> mode => "0444";
>> }
>> #########################################################
>> body depth_search recurse(d)
>> {
>> depth => "$(d)";
>> }
>>
>> #########################################################
>> body classes repaired(class)
>> {
>> promise_repaired => { "$(class)" };
>> }
>>
>> #########################################################
>> body copy_from mycopy(from,server)
>> {
>> source => "$(from)";
>> #portnumber => "6789";
>> servers => { "$(server)" , "failover1" };
>> copy_backup => "true"; #/false/timestamp
>> stealth => "true"; #/on/false/off
>> preserve => "true";
>> linkcopy_patterns => { ".*fish.*" };
>> copylink_patterns => { "non-local.*"};
>> xdev => "true"; # /on/false/off
>> compare => "mtime"; #
>> ctime/mtime/checksum/sum/byte/binary/any
>> link_type => "absolute"; # /symbolic/relative/hard etc
>> type_check => "true";
>> force_update => "false";
>> force_ipv4 => "false";
>> copy_size => irange("0","50000");
>> trustkey => "true";
>> encrypt => "true";
>> verify => "true";
>> #purge => "false";
>> purge => "true";
>> #findertype => "MacOSX";
>> }
>> ##### --------------------- Sample End ---------------------------
>>
>> Running in debug 1 I see this:
>>
>> Matched syntatically correct bundle (lval,rval) item = (perms) to its rval
>> Constraint syntax ok, but definition of body is elsewhere perms=s
>> Prepending scalar to rval-list [system]
>> CopyRvalItem(s)
>> Appending Constraint: perms => system
>> Recorded LVAL copy_from
>> Found function identifier mycopy
>> Start FnCall mycopy args level 1
>> Appending scalar to rval-list [ $(master_server)/somesample.txt]
>> CopyRvalItem(s)
>> Appending scalar to rval-list [$(master_server)]
>> CopyRvalItem(s)
>> End args level 1
>> Installing Function Call mycopy
>> Installed mycopy( $(master_server)/somesample.txt,$(master_server),)
>> om,)
>>
>> Running the server binary manually in foreground and with verbose I
>> also only see this connection when I don't use variables.
>>
> _______________________________________________
> Help-cfengine mailing list
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
>
--
SY, Seva Gluschenko.
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine