Scope of classes in CFE 3.10.2 on CentOS 7

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Hi folks,

I have a question concerning scope of classes in CFEngine 3. I run CFE 3.10.2 on CentOS 7.4.

# cf-agent -V
CFEngine Core 3.10.2

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

I'm logged in as root and located in current working dir /root. I have the following file

# ll ./samples/scope_of_class.cf
-rwx------. 1 root root 720 10. Jul 16:33 ./samples/scope_of_class.cf

with content

----BEGIN----------------------------------
bundle agent scope_of_class()
{

  vars:
    any::
      "web_servers" slist => {
        "ws-1.example.com",
        "ws-2.example.com",
        "webserver.example.com",
      };

  methods:
    any::
"scope_of_class_b1" usebundle => scope_of_class_b1( $(scope_of_class.web_servers) );

}

bundle agent scope_of_class_b1( server )
{

  classes:
    any::
      "is_dir"
        expression => isdir( "/tmp/scope_of_class/$(server)" ),
        scope => "bundle";

  reports:
    is_dir::
      "is_dir is SET";
    !is_dir::
      "is_dir is UNset";
    any::
      "server = $(server)";

}
----END------------------------------------

From my understanding the scope "bundle" is default for a class definition inside a bundle of type agent, but I added the scope to be sure. The definition of class is_dir should depend on directories existing inside /tmp/scope_of_class. I have two subdirectories

# ls -1 /tmp/scope_of_class/
webserver.example.com
ws-1.example.com

but when I run CFE I do NOT get expected behaviour for the definition of class is_dir:

# cf-agent -IK --file ./samples/scope_of_class.cf --bundlesequence scope_of_class
    info: Using command line specified bundlesequence
R: is_dir is SET
R: server = ws-1.example.com
R: is_dir is UNset
R: server = ws-2.example.com
R: server = webserver.example.com

When the bundle scope_of_class_b1 is processed for parameter webserver.example.com I expect is_dir to bet set, but from the report it seems not to be set.

If I change the slist definition to hold "webserver.example.com" as the first entry, then the class is_dir is set correctly:

# grep slist ./samples/scope_of_class.cf -A 4
      "web_servers" slist => {
        "webserver.example.com",
        "ws-1.example.com",
        "ws-2.example.com",
      };
# cf-agent -IK --file ./samples/scope_of_class.cf --bundlesequence scope_of_class
    info: Using command line specified bundlesequence
R: is_dir is SET
R: server = webserver.example.com
R: server = ws-1.example.com
R: is_dir is UNset
R: server = ws-2.example.com

It also works "correct" (or as expected by me) if "ws-2.example.com" is first entry in the slist definition:

# grep slist ./samples/scope_of_class.cf -A 4
      "web_servers" slist => {
        "ws-2.example.com",
        "ws-1.example.com",
        "webserver.example.com",
      };
# cf-agent -IK --file ./samples/scope_of_class.cf --bundlesequence scope_of_class
    info: Using command line specified bundlesequence
R: is_dir is UNset
R: server = ws-2.example.com
R: is_dir is SET
R: server = ws-1.example.com
R: server = webserver.example.com

I do not understand why the ordering inside slist influences how the class is_dir will be defined later by CFE for each processing of scope_of_class_b1.

Some background information: my aim is to create webserver vhost configuration files where I have two variants, one with SSL configuration and one without SSL configuration. Which one to configure depends if the directory with the SSL certificate exists for a given vhost or not. I'll replace the report promise type by a file promise type, which should bring the correct vhost configuration file in place, assumed that I understand how the scope of the class definition works.

Thanks in advance for any help or explanation of that behaviour.

Regards,

Meikel
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos



[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]


  Powered by Linux