Prototype: regline(regex, filename)

Return type: boolean

Description: Returns whether the anchored regular expression regex matches a line in file filename.

Note that regex must match an entire line of the file in order to give a true result.

Arguments:

  • regex: regular expression - Regular expression - in the range: .*
  • filename: string - Filename to search - in the range: .*

Examples:

This example shows a way to determine if IPV4 forwarding is enabled or not.

code
bundle agent main
{
  vars:

    linux::

      "file" string => "/proc/sys/net/ipv4/ip_forward";
      "reg_enabled" string => "^1$";
      "reg_disabled" string => "^0$";

  classes:

    linux::

      "ipv4_forwarding_enabled" -> { "SecOps" }
        expression => regline( $(reg_enabled) , $(file) ),
        comment => "We want to know if ip forwarding is enabled because it is a
                    potential security issue.";

      "ipv4_forwarding_disabled" -> { "SecOps" }
        expression => regline( $(reg_disabled) , $(file) );

  reports:

    ipv4_forwarding_enabled::
      "I found that IPv4 forwarding is enabled!";

    ipv4_forwarding_disabled::
      "I found that IPv4 forwarding is disabled.";
}
code
R: I found that IPv4 forwarding is disabled.

For edit_line applications it may be useful to set a class for detecting the presence of a string that does not exactly match one being inserted. For example:

code
bundle edit_line upgrade_cfexecd
{
  classes:

    # Check there is not already a crontab line, not identical to
    # the one proposed below...

    "exec_fix"
      not => regline(".*cf-execd.*","$(edit.filename)"),
      scope => "bundle"; # Unless you need the class outside of the bundle you
                         # should always scope it to the bundle. This can
                         # prevent issues when the bundle is used multiple
                         # times, and the classes promise is expected to be
                         # re-evaluated. If the class is namespace scoped the
                         # class will be available to other bundles and persist
                         # until it is explicitly canceled or until the end of
                         # the agent run.

  insert_lines:

    exec_fix::

     "0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/cfengine/bin/cf-execd -F";

  reports:

    exec_fix::

     "Added a 5 minute schedule to crontabs";
}

See also: regcmp(), strcmp()