Hallo,
ich habe mit der Anleitung aus der Doku angefangen ein Plugin zuschreiben, welches als erst-entwickeltes Plugin prüfen soll, ob ein Pfad vorhanden ist.
In der Dokumentation habe ich jedoch nirgendwo rauslesen können, wie man den zu prüfenden Pfad an den Agent mitgeben kann.
Wenn ich das korrekt aus der Doku rauslese, sind die Serviceparameter um serverseitig mit den Ergebnissen des Agents die Logik für den Status zu bestimmen.
Bin ich gezwungen alle möglichen Pfade hart einzutragen oder kann ich das als Parameter einbauen und in den Agent einbacken?
agent_based:
#!/usr/bin/python
from .agent_based_api.v1 import *
def discover_exists(section):
for path, shouldCrit, exists in section:
yield Service(item=path)
def check_exists(item, params, section):
shouldCrit = params["shouldCrit"]
for path, exists in section:
if path == item:
exists = bool(exists)
shouldCrit = bool(shouldCrit)
if exists:
s = State.OK
summary = f"Found {path}"
else:
summary = f"Did not found {path}"
if shouldCrit:
s = State.CRIT
else:
s = State.WARN
yield Result(
state = s,
summary = summary
)
return
# Check deklarieren
register.check_plugin(
name='exists',
service_name='Exist %s',
discovery_function=discover_find,
check_function=check_find,
check_default_parameters={"shouldCrit": True},
check_ruleset_name="exists",
)
Regelsatz:
#!/usr/bin/python
from cmk.gui.i18n import _
from cmk.giu.valuespec import (
Dictionary,
Integer,
textAscii,
DropdownChoice
)
from cmk.gui.plugins.wato import (
CheckParameterRuleSpecWithItem,
rulespec_registry,
RulespecGroupCheckParametersOperatingSystem,
)
def _item_valuespec_exists():
return TextAscii(title=_("absolute Path"))
def _parameter_valuespec_exists():
return Dictionary(
elements=[
("shouldCrit", DropDownChoice(
title = _("Throw critical if not found otherwise throw warning"),
help = _("default is Yes"),
choices = [
(False, _("No")),
(True, _("Yes")),
],
default_value= "yes"
)),
]
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name="exists",
group=RulespecGroupParametersOperatingSystem,
item_spec=_item_valuespec_exists,
match_type="dict",
parameter_valuespec=_parameter_valuespec_exists,
title=lambda: _("Get if File or Folder exists")
)
)
Der Check (erster ansatz) für den Agent
#!/usr/bin/python
# Import OS Modul
import os
# Sektionskopf
print('<<<exists>>>')
path = r'C:/Testpfad\egal/ob/Linux\oder\Windows/Datei/geht/auch.txt'
path = path.replace("\\", os.sep).replace("/", os.sep)
isExist = os.path.exists(path)
print([path,Exist])