Or is it me? The attached cfengine script and data file has some interesting results.
1. When I use an explicit path to the config file in the ReadArray, it seems to work pretty well as expected. However, thats a bit unwieldy so I tried it with a variable instead: this seems to break things horribly. The attached script is 'teh broken' version. Heres what cfrun -- -K -DTestingArray produces: cfengine:cfserver: Executing script /bin/echo $(testarray[one])...(timeout=0,uid=-1,gid=-1) cfengine:cfserver:/bin/echo $(tes: sh: line 1: testarray[one]: command not found cfengine:cfserver: Finished script /bin/echo $(testarray[one]) cfengine:cfserver: Executing script /bin/echo $(testarray[one])...(timeout=0,uid=-1,gid=-1) cfengine:cfserver:/bin/echo $(tes: sh: line 1: testarray[one]: command not found cfengine:cfserver: Finished script /bin/echo $(testarray[one]) cfengine:cfserver: ReadArray(/scratch/cfengine/masterfiles/hosts/cfserver/config/testdata,textkey,",","#",100) cfengine:cfserver: $(testarray[one]) cfengine:cfserver: $(testitem) So it looks as if, with the $() variable for an input file, ReadArray just returns itself as a return string, as I see from the output of the 'alerts', specifically where the alert spits out the entire 'ReadArray' line. When I use an explicit path in the ReadArray it spits out '$(testarray)' at that point which, I presume, is 'correct' for a defined assoc array variable? 2. Iteration within array items doesn't seem to work, ie this: control: testlist = ( "one:two" ) testarray = ( A(one,1) A(two,2) ) shellcommands: "$(echo) $(testarray[$(testlist1)])" gives a cfengine syntax error: cf:cfengine::/var/lib/cfengine2/inputs/testing.cf:30: Non identifier character (:) in variable identifier (testarray[one:two]) It seems that one can't use list iteration as an array key even in a location which normally supports iteration? My thoughts on these issues are that cfengine could do with a decent test suite and specifically some regression testing.
control:
TestingArray::
echo = ( "/bin/echo" )
actionsequence = ( shellcommands )
conffile = (
"/scratch/cfengine/masterfiles/hosts/cfserver/config/testdata" )
# testarray = ( ReadArray($(conffile),textkey,",","#",100) )
testarray = ( A(one,1) A(two,2) )
testlist = ( "one:two" )
# This is how the reference guides small and incomplete example uses
assoc arrays:
testitem = ( "$(testarray[one])" )
shellcommands:
TestingArray::
# All of these should echo '1'?
"$(echo) $(testarray[one])"
# produces: '1'
"$(echo) $(testitem)"
# produces: '1'
# should echo '1' and then '2' but in fact produces a cfengine syntax
error
# on parsing:
# "$(echo) $(testarray[$(testlist)])"
# cf:cfengine::/var/lib/cfengine2/inputs/testing.cf:30: Non identifier
character (:) in variable identifier (testarray[one:two])
alerts:
TestingArray::
"$(testarray)"
# produces: $(testarray)
"$(testarray[one])"
# produces: '1'
"$(testitem)"
# produces: '1'
one,1 two,2
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Help-cfengine mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-cfengine
