Hi, Werner & MarkSorry to reply this mail late. I just find time to do this job, and to test cfengine, I must set up a new test environment and bootstrap a new cfengine config, that's not easy.
By checking Mark's svn commit (r524): http://svn.iu.hio.no/viewvc/trunk/src/nameinfo.c?root=Cfengine-2&r1=498&r2=524&pathrev=524Now I'm quite sure there's a new bug invoked which caused CFengine can only detect one interface's address.
In function GetInterfaceInfo (nameinfo.c), Mark added a first_address var which been set to true at start:
int fd,len,i,j,first_address = true;There's no other assignment to set this variable to true again but a chance to set it false:
if (first_address) { first_address = false; strcpy(ip,inet_ntoa(sin->sin_addr));snprintf(name,CF_MAXVARSIZE-1,"ipv4[%s]",CanonifyName(ifp->ifr_name));
AddMacroValue(CONTEXTID,name,ip);So this IF block can only run exactly ONCE, which caused global.ipv4[ethX] got only one interface's address, which depends the interfaces order on linux. For most cases, eth0 appear before eth1, so global.ipv4[eth0] is good but global.ipv4[eth1] cannot expand to any address because it didn't exist in cfengine's nameinfo list.
For a quick fix, I attach a new patch which can be put into Debian package's debian/patches directory, or merge into cfengine trunk. I test it, and works for me. Please review it.
Thanks, Chun Tian (binghe)
"Chun Tian (binghe)" <[EMAIL PROTECTED]> writes:I have this "editfiles" class definition: editfiles: { /etc/default/snmpd ReplaceFirst "^SNMPDOPTS.*$" With "SNMPDOPTS='-Lsd -Lf /dev/null - u snmp -I -smux -p /var/run/snmpd.pid ${global.ipv4[eth0]}:1185 $ {global.ipv4[eth1]}'" }I found one of ${global.ipv4[eth0]} and ${global.ipv4[eth1]} cannot beexpanded into right value, which depends my interfaces order on server.I haven't had time to test this myself, but this worked as intended before we applied the patch from upstream? - Werner
060_first_address
Description: Binary data