[CentOS] Problem with definition of slist in CFEngine

Fri Jul 27 08:05:48 UTC 2018
Meikel <meikel at fn.de>

Hi folks and Paul.

 > Is there any chance that some elements of your info_list become larger
 > than 4K size limit cfengine places on scalar variables?

Mayne the 4K limit ist not the problem here. I did some "shortcutting" 
and added one more "undefined" variable aaa.bbb.ccc:

# cat ./info.cf
bundle agent info
{
   vars:
     any::
       "info_list" slist => {
         "aaa.bbb.ccc ................ = $(aaa.bbb.ccc)",
         "includes.dir ............... = $(includes.dir)",
         "sys.arch ................... = $(sys.arch)",
         "sys.bindir ................. = $(sys.bindir)",
         "... 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";
       "r5: aaa.bbb.ccc ................ = $(aaa.bbb.ccc)";

}

Variables aaa.bbb.ccc and includes.dir are not defined and do not cause 
any problems:

# cf-agent -IK --file ./info.cf --bundlesequence info
     info: Using command line specified bundlesequence
R: r1: aaa.bbb.ccc ................ = $(aaa.bbb.ccc)
R: r1: includes.dir ............... = $(includes.dir)
R: r1: sys.arch ................... = x86_64
R: r1: sys.bindir ................. = /var/cfengine/bin
R: r1: ... BEGIN big shit ...............
R: r1: ... END big shit ...............
R: r4: holleri di dudeldoe
R: r5: aaa.bbb.ccc ................ = $(aaa.bbb.ccc)

Adding sys.inet6 leads to the problem:

# cat ./info.cf
bundle agent info
{
   vars:
     any::
       "info_list" slist => {
         "aaa.bbb.ccc ................ = $(aaa.bbb.ccc)",
         "includes.dir ............... = $(includes.dir)",
         "sys.arch ................... = $(sys.arch)",
         "sys.bindir ................. = $(sys.bindir)",
         "... 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";
       "r5: aaa.bbb.ccc ................ = $(aaa.bbb.ccc)";

}

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

Why is "r5:" shown but not "r2:" and "r3:"? Why isn't it possible to get 
the reports "r2:" and "r3:"? There is something special with variables 
sys.inet6 and sys.interfaces_data in my opinion.

Regards,

Meikel

Am 26.07.2018 um 22:01 schrieb Paul Heinlein:
> On Thu, 26 Jul 2018, Meikel wrote:
> 
>> 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:").
> 
> Two related questions:
> 
> Is there any chance that some elements of your info_list become larger 
> than 4K size limit cfengine places on scalar variables?
> 
> Similarly, I wonder if the 4K size limit comes into play when a list is 
> interpolated into a string, as in your r1 report. I'm merely 
> speculating; I don't know one way or the other.
> 
> 
> Plus, I've never tried defining a slist with a comma after the final 
> element. I assume that works for you, but I'll just note it for the record.
>