[CentOS] Problem with definition of slist in CFEngine

Meikel meikel at fn.de
Thu Jul 26 15:11:28 UTC 2018


Hey folks,

I have a problem with the definition of a variable of type slist in 
CFEngine on

# uname -a ; cat /etc/redhat-release
Linux policyhub.example.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 
21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
CentOS Linux release 7.4.1708 (Core)

I'm not sure if its valid to ask CFEngine questions on this mailing 
list, but as far as I'm running on CentOS I hope that it is okay.

I'm logged in as user

# id
uid=0(root) gid=0(root) Gruppen=0(root) 
Kontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

and working on directory

# pwd
/var/cfengine/inputs

with software

# cf-agent -V
CFEngine Core 3.10.2

and the configuration file

# cat ./info.cf
bundle agent info
{
   vars:
     any::
       "info_list" slist => {
         "includes.dir ............... = $(includes.dir)",
         "sys.arch ................... = $(sys.arch)",
         "sys.bindir ................. = $(sys.bindir)",
         "sys.cdate .................. = $(sys.cdate)",
         "sys.cf_promises ............ = $(sys.cf_promises)",
         "sys.cf_version ............. = $(sys.cf_version)",
         "sys.cf_version_major ....... = $(sys.cf_version_major)",
         "sys.cf_version_minor ....... = $(sys.cf_version_minor)",
         "sys.cf_version_patch ....... = $(sys.cf_version_patch)",
         "sys.class .................. = $(sys.class)",
         "sys.cpus ................... = $(sys.cpus)",
         "sys.crontab ................ = $(sys.crontab)",
         "sys.date ................... = $(sys.date)",
         "sys.doc_root ............... = $(sys.doc_root)",
         "sys.domain ................. = $(sys.domain)",
         "sys.enterprise_version ..... = $(sys.enterprise_version)",
         "sys.expires ................ = $(sys.expires)",
         "sys.exports ................ = $(sys.exports)",
         "sys.failsafe_policy_path ... = $(sys.failsafe_policy_path)",
         "sys.flavor ................. = $(sys.flavor)",
         "sys.flavour ................ = $(sys.flavour)",
         "sys.fqhost ................. = $(sys.fqhost)",
         "sys.fstab .................. = $(sys.fstab)",
         "sys.hardware_addresses ..... = $(sys.hardware_addresses)",
         "sys.host ................... = $(sys.host)",
         "sys.inet ................... = $(sys.inet)",
         "sys.inputdir ............... = $(sys.inputdir)",
         "sys.interface .............. = $(sys.interface)",
         "sys.interfaces ............. = $(sys.interfaces)",
         "sys.interfaces_flags ....... = $(sys.interfaces_flags)",
         "sys.ip_addresses ........... = $(sys.ip_addresses)",
         "sys.ip2iface ............... = $(sys.ip2iface)",
         "sys.ipv4 ................... = $(sys.ipv4)",
         "sys.key_digest ............. = $(sys.key_digest)",
         "sys.last_policy_update ..... = $(sys.last_policy_update)",
         "sys.libdir ................. = $(sys.libdir)",
         "sys.local_libdir ........... = $(sys.local_libdir)",
         "sys.logdir ................. = $(sys.logdir)",
         "sys.license_owner .......... = $(sys.license_owner)",
         "sys.licenses_granted ....... = $(sys.licenses_granted)",
         "sys.long_arch .............. = $(sys.long_arch)",
         "sys.maildir ................ = $(sys.maildir)",
         "sys.masterdir .............. = $(sys.masterdir)",
         "sys.os ..................... = $(sys.os)",
         "sys.ostype ................. = $(sys.ostype)",
         "sys.piddir ................. = $(sys.piddir)",
         "sys.policy_hub ............. = $(sys.policy_hub)",
         "sys.policy_hub_port ........ = $(sys.policy_hub_port)",
         "sys.release ................ = $(sys.release)",
         "sys.resolv ................. = $(sys.resolv)",
         "sys.statedir ............... = $(sys.statedir)",
         "sys.sysday ................. = $(sys.sysday)",
         "sys.systime ................ = $(sys.systime)",
         "sys.update_policy_path ..... = $(sys.update_policy_path)",
         "sys.uptime ................. = $(sys.uptime)",
         "sys.user_data .............. = $(sys.user_data)",
         "sys.uqhost ................. = $(sys.uqhost)",
         "sys.version ................ = $(sys.version)",
         "sys.windir ................. = $(sys.windir)",
         "sys.winprogdir ............. = $(sys.winprogdir)",
         "sys.winprogdir86 ........... = $(sys.winprogdir86)",
         "sys.winsysdir .............. = $(sys.winsysdir)",
         "sys.workdir ................ = $(sys.workdir)",
         "... BEGIN big shit ...............",
#        "sys.inet6 .................. = $(sys.inet6)",
#        "sys.interfaces_data ........ = $(sys.interfaces_data)",
         "... END big shit ...............",
       };

   reports:
     any::
       "r1: $(info.info_list)";
       "r2: sys.inet6 .................. = $(sys.inet6)";
       "r3: sys.interfaces_data ........ = $(sys.interfaces_data)";
       "r4: holleri di dudeldoe";

}

The service cfengine3.service is inactive at the moment:

# systemctl is-active cfengine3.service
inactive

I have a problem with the definition of the stringlist/slist 
"info_list". In some cases it becomes some kind of "undefined" or at 
least I'm not able to print it out in a report (in "r1:"). In the 
configuration file above I marked some lines with "BEGIN/END big shit". 
Between the BEGIN/END I commented out two lines. If I "run" with that 
configuration file I see the reports "r1:" and "r4:" but not "r2:" and 
"r3:". It's not clear to me why I don't see reports "r2:" and "r3:", but 
I'm interested in the value of $(info.info_list)" in "r1:", I only have 
"r2:" and "r3:" here to maybe help to localize the problem which is 
described later. Definition of "info_list" works fine for now:

# cf-agent -IK --file ./info.cf --bundlesequence info
     info: Using command line specified bundlesequence
R: r1: includes.dir ............... = $(includes.dir)
R: r1: sys.arch ................... = x86_64
R: r1: sys.bindir ................. = /var/cfengine/bin
R: r1: sys.cdate .................. = Thu_Jul_26_16_09_20_2018
R: r1: sys.cf_promises ............ = "/var/cfengine/bin/cf-promises"
R: r1: sys.cf_version ............. = 3.10.2
R: r1: sys.cf_version_major ....... = 3
R: r1: sys.cf_version_minor ....... = 10
R: r1: sys.cf_version_patch ....... = 2
R: r1: sys.class .................. = linux
R: r1: sys.cpus ................... = 1
R: r1: sys.crontab ................ = /var/spool/cron/root
R: r1: sys.date ................... = Thu Jul 26 16:09:20 2018
R: r1: sys.doc_root ............... = /var/www/html
R: r1: sys.domain ................. = example.com
R: r1: sys.enterprise_version ..... = $(sys.enterprise_version)
R: r1: sys.expires ................ = $(sys.expires)
R: r1: sys.exports ................ = /etc/exports
R: r1: sys.failsafe_policy_path ... = /var/cfengine/inputs/failsafe.cf
R: r1: sys.flavor ................. = centos_7
R: r1: sys.flavour ................ = centos_7
R: r1: sys.fqhost ................. = policyhub.example.com
R: r1: sys.fstab .................. = /etc/fstab
R: r1: sys.hardware_addresses ..... = aa:aa:aa:aa:aa:aa
R: r1: sys.host ................... = policyhub.example.com
R: r1: sys.inet ................... = 37.187.93.254
R: r1: sys.inputdir ............... = /var/cfengine/inputs
R: r1: sys.interface .............. = eth0
R: r1: sys.interfaces ............. = eth0
R: r1: sys.interfaces_flags ....... = $(sys.interfaces_flags)
R: r1: sys.ip_addresses ........... = 11.22.33.44
R: r1: sys.ip2iface ............... = $(sys.ip2iface)
R: r1: sys.ipv4 ................... = 11.22.33.44
R: r1: sys.key_digest ............. = MD5=12345678123456781234567812345678
R: r1: sys.last_policy_update ..... = Thu Jul 26 14:45:33 2018
R: r1: sys.libdir ................. = /var/cfengine/inputs/lib
R: r1: sys.local_libdir ........... = lib
R: r1: sys.logdir ................. = /var/cfengine
R: r1: sys.license_owner .......... = $(sys.license_owner)
R: r1: sys.licenses_granted ....... = $(sys.licenses_granted)
R: r1: sys.long_arch .............. = 
linux_x86_64_3_10_0_693_el7_x86_64__1_SMP_Tue_Aug_22_21_09_27_UTC_2017
R: r1: sys.maildir ................ = /var/spool/mail
R: r1: sys.masterdir .............. = /var/cfengine/masterfiles
R: r1: sys.os ..................... = linux
R: r1: sys.ostype ................. = linux_x86_64
R: r1: sys.piddir ................. = /var/cfengine
R: r1: sys.policy_hub ............. = 11.22.33.44
R: r1: sys.policy_hub_port ........ = 5308
R: r1: sys.release ................ = 3.10.0-693.el7.x86_64
R: r1: sys.resolv ................. = /etc/resolv.conf
R: r1: sys.statedir ............... = /var/cfengine/state
R: r1: sys.sysday ................. = 17738
R: r1: sys.systime ................ = 1532614160
R: r1: sys.update_policy_path ..... = /var/cfengine/inputs/update.cf
R: r1: sys.uptime ................. = 14209
R: r1: sys.user_data .............. = 0
R: r1: sys.uqhost ................. = policyhub
R: r1: sys.version ................ = #1 SMP Tue Aug 22 21:09:27 UTC 2017
R: r1: sys.windir ................. = $(sys.windir)
R: r1: sys.winprogdir ............. = $(sys.winprogdir)
R: r1: sys.winprogdir86 ........... = $(sys.winprogdir86)
R: r1: sys.winsysdir .............. = $(sys.winsysdir)
R: r1: sys.workdir ................ = /var/cfengine
R: r1: ... BEGIN big shit ...............
R: r1: ... END big shit ...............
R: r4: holleri di dudeldoe

"r2:" and "r3:" are missing, but thats not a problem for me. Now I 
comment in one of those two lines, in this case th first one:

# cat ./info.cf
bundle agent info
{
   vars:
     any::
       "info_list" slist => {
         "includes.dir ............... = $(includes.dir)",
         "sys.arch ................... = $(sys.arch)",
         "sys.bindir ................. = $(sys.bindir)",
         "sys.cdate .................. = $(sys.cdate)",
         "sys.cf_promises ............ = $(sys.cf_promises)",
         "sys.cf_version ............. = $(sys.cf_version)",
         "sys.cf_version_major ....... = $(sys.cf_version_major)",
         "sys.cf_version_minor ....... = $(sys.cf_version_minor)",
         "sys.cf_version_patch ....... = $(sys.cf_version_patch)",
         "sys.class .................. = $(sys.class)",
         "sys.cpus ................... = $(sys.cpus)",
         "sys.crontab ................ = $(sys.crontab)",
         "sys.date ................... = $(sys.date)",
         "sys.doc_root ............... = $(sys.doc_root)",
         "sys.domain ................. = $(sys.domain)",
         "sys.enterprise_version ..... = $(sys.enterprise_version)",
         "sys.expires ................ = $(sys.expires)",
         "sys.exports ................ = $(sys.exports)",
         "sys.failsafe_policy_path ... = $(sys.failsafe_policy_path)",
         "sys.flavor ................. = $(sys.flavor)",
         "sys.flavour ................ = $(sys.flavour)",
         "sys.fqhost ................. = $(sys.fqhost)",
         "sys.fstab .................. = $(sys.fstab)",
         "sys.hardware_addresses ..... = $(sys.hardware_addresses)",
         "sys.host ................... = $(sys.host)",
         "sys.inet ................... = $(sys.inet)",
         "sys.inputdir ............... = $(sys.inputdir)",
         "sys.interface .............. = $(sys.interface)",
         "sys.interfaces ............. = $(sys.interfaces)",
         "sys.interfaces_flags ....... = $(sys.interfaces_flags)",
         "sys.ip_addresses ........... = $(sys.ip_addresses)",
         "sys.ip2iface ............... = $(sys.ip2iface)",
         "sys.ipv4 ................... = $(sys.ipv4)",
         "sys.key_digest ............. = $(sys.key_digest)",
         "sys.last_policy_update ..... = $(sys.last_policy_update)",
         "sys.libdir ................. = $(sys.libdir)",
         "sys.local_libdir ........... = $(sys.local_libdir)",
         "sys.logdir ................. = $(sys.logdir)",
         "sys.license_owner .......... = $(sys.license_owner)",
         "sys.licenses_granted ....... = $(sys.licenses_granted)",
         "sys.long_arch .............. = $(sys.long_arch)",
         "sys.maildir ................ = $(sys.maildir)",
         "sys.masterdir .............. = $(sys.masterdir)",
         "sys.os ..................... = $(sys.os)",
         "sys.ostype ................. = $(sys.ostype)",
         "sys.piddir ................. = $(sys.piddir)",
         "sys.policy_hub ............. = $(sys.policy_hub)",
         "sys.policy_hub_port ........ = $(sys.policy_hub_port)",
         "sys.release ................ = $(sys.release)",
         "sys.resolv ................. = $(sys.resolv)",
         "sys.statedir ............... = $(sys.statedir)",
         "sys.sysday ................. = $(sys.sysday)",
         "sys.systime ................ = $(sys.systime)",
         "sys.update_policy_path ..... = $(sys.update_policy_path)",
         "sys.uptime ................. = $(sys.uptime)",
         "sys.user_data .............. = $(sys.user_data)",
         "sys.uqhost ................. = $(sys.uqhost)",
         "sys.version ................ = $(sys.version)",
         "sys.windir ................. = $(sys.windir)",
         "sys.winprogdir ............. = $(sys.winprogdir)",
         "sys.winprogdir86 ........... = $(sys.winprogdir86)",
         "sys.winsysdir .............. = $(sys.winsysdir)",
         "sys.workdir ................ = $(sys.workdir)",
         "... BEGIN big shit ...............",
         "sys.inet6 .................. = $(sys.inet6)",
#        "sys.interfaces_data ........ = $(sys.interfaces_data)",
         "... END big shit ...............",
       };

   reports:
     any::
       "r1: $(info.info_list)";
       "r2: sys.inet6 .................. = $(sys.inet6)";
       "r3: sys.interfaces_data ........ = $(sys.interfaces_data)";
       "r4: holleri di dudeldoe";

}

I "run" again with that configuration file and in report "r1:" I can see 
that now the stringlist/slist "info_list" seems to be undefined and 
report "r1:" is empty and reports "r2:" and "r3:" are still missing:

# cf-agent -IK --file ./info.cf --bundlesequence info
     info: Using command line specified bundlesequence
R: r1: $(info.info_list)
R: r4: holleri di dudeldoe

My problem ist NOT that the reports "r2:" and "r3:" are not printed, my 
problem ist, that in some cases the slist is undefined. I'm using that 
slist to collect some system info and then printing out the report and 
it would NOT be a problem if some system informations were missing but 
it IS a problem that in some cases the whole slist becomes undefined and 
in that situation I receive a completly empty report "r1: ".

I would like to understand what circumstances lead to the slist be 
undefined and how I can prevent this.

Thanks in advance.

Regards, Meikel



More information about the CentOS mailing list