I'd like some input on method usage.
>From the documentation it seems methods are expected to be entirely
self-contained. I haven't seen any examples of using methods relating to
other promises. I think bundles that can be used like this provide an
easy way to share configurations.
Two bundles are attached in check_http.cf.
check_http_content searches the content of a page for an expected string
and define a class if its found.
check_http_status is a similar bundle that checks the status returned
from a web-server.
An example of how they could be used.
bundle agent main {
methods:
"any" usebundle => check_http_content("www.google.com", "80",
"/", "google_has_something_new", "New!");
reports:
google_has_something_new::
"There is something new at google!";
}
example output from a run.
cf3> .........................................................
cf3> Promise handle:
cf3> Promise made by: There is something new at google!
cf3> .........................................................
cf3>
cf3> Report: There is something new at google!
cf3> R: There is something new at google!
This all seems to work fine for me. I am looking for some comments on
the general approach and some criticism of the bundles themselves. I
think that I need to change the check_http_status to accept a string for
"expected" status codes instead of hard coding only 200 in.
Is thee some native cfengine function that I could use in
check_http_content so as not to rely on curl being available?
--
Nick Anderson <[email protected]>
# Example Usage
# "any" usebundle => check_http_status("www.cmdln.org", "80",
"/","cmdln_org_http_status_ok");
# "any" usebundle => check_http_content("www.cmdln.org", "80",
"/","cmdln_org_http_content_ok", "a sysadmin blog");
bundle agent check_http_status(host,port,path,success_class) {
# Defines $(success_class) if check is successful
vars:
"status_ok"
comment => "HTTP Return code 200 is expected for OK status.",
handle => "var_status_ok_in_bundle_agent_check_http_status",
string => ".*200 OK.*\n.*";
"request"
comment => "String to send to http server",
handle => "var_request_in_bundle_agent_check_http_status",
string => "GET $(path) HTTP/1.1 $(const.r)$(const.n)Host:
$(host)$(const.r)$(const.n)$(const.r)$(const.n)";
!http_status_ok::
"retrieved_status"
comment => "HTTP Status response from $(host):$(port)
$(request)",
handle =>
"var_retrieved_status_in_bundle_agent_check_http_status",
string => readtcp("$(host)", "$(port)", "$(request)", 20);
classes:
"http_status_ok"
comment => "define class if $(status_ok) matches
$(retrieved_status)",
handle =>
"class_http_status_ok_in_bundle_agent_check_http_status",
expression => regcmp("$(status_ok)", "$(retrieved_status)");
commands:
http_status_ok::
"/bin/true"
comment => "Define specific global class if http status OK.
This can be useful for job control.",
classes => if_repaired("$(success_class)");
reports:
http_status_ok::
"Got $(retrieved_status) from $(host):$(port)$(path)";
!http_status_ok::
"Got $(retrieved_status) from $(host):$(port)$(path)";
}
bundle agent check_http_content (host, port, path, success_class,
expected_content) {
# Defines $(success_class) if check is successful
vars:
"retrieved_content"
string => readfile(
"/tmp/file_retrieved_content_in_bundle_agent_check_http_content_$(host)_$(success_class)"
, "8000" );
classes:
"found_expected_content"
comment => "Look for expected content in retrieved page",
handle =>
"class_found_expected_content_in_bundle_agent_check_http_content",
expression => regcmp(".*$(expected_content).*",
"$(retrieved_content)");
packages:
ubuntu|debian::
"curl"
comment => "Make sure curl is installed, its needed for this
test",
package_policy => "add",
package_method => apt;
redhat::
"curl"
comment => "Make sure curl is installed, its needed for this
test",
package_policy => "add",
package_method => yum;
commands:
found_expected_content::
"/bin/true"
comment => "Define specific global class if expected content is
found. This can be useful for job control.",
classes => if_repaired("$(success_class)");
!(found_expected_content|content_retrieved)::
"/usr/bin/curl"
comment => "Page content to parse",
args => "--silent http://$(host):$(port)$(path) -o
/tmp/file_retrieved_content_in_bundle_agent_check_http_content_$(host)_$(success_class)",
classes => if_repaired("content_retrieved");
reports:
found_expected_content::
"Found expected content '$(expected_content)' in
http://$(host):$(port)$(path) $(retrieved_content)";
}
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine