On Thu, Oct 4, 2012 at 4:19 PM, Mike Svoboda <msvob...@linkedin.com> wrote:
> I'm writing a policy that will test network firewall rules to make sure
> basic pieces of infrastructure work.  Here's an example of something I
> have written in policy.
>
>
> vars:
>   "ntp_service_hosts"           slist   =>  {"box1-linkedin.com",
> "box2-linkedin.com," };
>
> classes:
>   "ntp_udp_failure_$(ntp_service_hosts)"                  not     =>
> returnszero("$(netcat_binary) -u $(ntp_service_hosts) $(udp_port[ntp]) >
> /dev/null 2>&1","useshell");

You could use a commands promise to run netcat.  Then set a class
based on the outcome (exit status).  That would give you a chance to
canonify the class on the RHS.


Reference manual says:
If none of the attributes kept_returncodes, repaired_returncodes, or
failed_returncodes are set, the default is to consider a return code
zero as promise repaired, and nonzero as promise failed.


So look into

kept_returncodes
repaired_returncodes
failed_returncodes

netcat returning 0 could be added to "failed_returncodes", as that's a
deviation from policy that CFEngine cannot repair.

Here is a working example:

{{{

body common control {

  inputs => { "/var/cfengine/inputs/cfengine_stdlib.cf" };

}

bundle agent example {

commands:

   "/bin/true"

      classes => success_is_failure("monkey brains"),
      comment => "probe the firewall to make sure holes are plugged.
probes should *not* succeed!";

reports:
  monkey_brains::
   "DANGER!!!";
}

body classes success_is_failure(x)
{
failed_returncodes => { "0" };
repair_failed => { canonify("$(x)") };
}

}}}


Best,
Aleksey
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to