Mikrotik Plugin: Internal error: name 'DropdownChoice' is not defined

Ich wollte gerade meine Mikrotik Router ins Monitoring mit aufnehmen und habe erfreulicherweise ein Plugin von @ttr gefunden. Leider habe ich bei der Installation das Problem, dass der Spezialagent einen Fehler auf der Konfigurationsseite auslöst?

Wenn ich auf Setup → Agents → Other integrations gehe dann erhalte ich die Fehlermeldung “Internal error: name ‘DropdownChoice’ is not defined”. Die Fehlermeldung kommt nur, wenn ich das Plugin aktiviere.

Ist das eventuell ein Bug aufgrund Änderungen in CheckMK?

Hallo @herr

welche checkmk Version und welche Plugin Version setzt du ein ?
Ich habe das gerade mit checkmk 2.2p4 und Plugin Version 2.3.3 getestet, das funktioniert.

Achja, Versionen wollte ich eigentlich auch gleich mit posten…
Plugin: 2.3.3
CheckMK: 2.2.0p1

Ich werd CheckMK gleich mal updaten.

Jetzt läuft Version CheckMK 2.2.0p6 und das Problem bleibt bestehen.

Hi,

das Plugin ist noch nicht checkmk 2.2 kompatibel, es fehlen die Imports für die ValueSpecs.
Ändere die Imports in der Datei ~/local/share/check_mk/web/plugins/wato/mikrotik_register.py mal auf folgendes :

from cmk.gui.i18n import _

from cmk.gui.plugins.wato.utils import (
    HostRulespec,
    IndividualOrStoredPassword,
    monitoring_macro_help,
    RulespecGroup,
    rulespec_group_registry,
    rulespec_registry,
)

from cmk.gui.valuespec import (
    Dictionary,
    TextInput,
    DropdownChoice,
    Integer,
    ListChoice,
)

#
from cmk.gui.plugins.wato.special_agents.common import RulespecGroupDatasourceProgramsHardware

Zusätzlich dann TextAscii in TextInput ändern:

    elements = [
            ( "user",
                TextInput(
                    title       = _("Username"),
                    allow_empty = False,
                )

Das müsste @ttr anpassen und ein neues MKP mit 2.2 als minimal Version in die Exchange hochladen.
Wenn es ein git Repo dazu gibt, kann ich auch einen PR machen.
Ob weitere Dinge nicht funktionieren, kann ich mangels Mikrotik Komponenten nicht testen.

Ah super, das hat auf jeden Fall schonmal den Agenten nutzbar gemacht. Leider wirft der Agent jetzt beim abrufen folgenden Fehler:

Traceback (most recent call last):
  File "/omd/sites/mhet/bin/cmk", line 118, in <module>
    exit_status = modes.call("--check", None, opts, args)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/modes/__init__.py", line 68, in call
    return handler(*handler_args)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/modes/check_mk.py", line 1998, in mode_check
    with error_handler:
  File "/omd/sites/mhet/lib/python3/cmk/checkers/error_handling.py", line 59, in __exit__
    self._result = _handle_failure(
                   ^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/checkers/error_handling.py", line 95, in _handle_failure
    raise exc
  File "/omd/sites/mhet/lib/python3/cmk/base/modes/check_mk.py", line 2000, in mode_check
    fetched = fetcher(hostname, ip_address=ipaddress)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/agent_based/confcheckers.py", line 240, in __call__
    return _fetch_all(
           ^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/agent_based/confcheckers.py", line 71, in _fetch_all
    return [
           ^
  File "/omd/sites/mhet/lib/python3/cmk/base/agent_based/confcheckers.py", line 75, in <listcomp>
    source.fetcher(),
    ^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/_sources.py", line 389, in fetcher
    cmdline=self.config_cache.make_special_agent_cmdline(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/config.py", line 2789, in make_special_agent_cmdline
    args = _make_source_args(
           ^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/lib/python3/cmk/base/config.py", line 2784, in _make_source_args
    agent_configuration = info_func(params, hostname, ip_address)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/mhet/local/share/check_mk/checks/agent_mikrotik", line 33, in agent_mikrotik
    args += " -u " + quote_shell_string(params["user"])
                     ^^^^^^^^^^^^^^^^^^
NameError: name 'quote_shell_string' is not defined

Möglich, dass das jetzt der letzte Fehler ist. Aber wirklich wissen wird das wohl leider nur @ttr. Vielen Dank jedoch für die schnelle Hilfe!

ok, füg mal in der Datei ~/local/share/check_mk/checks/agent_mikrotik folgendes in Zeile 29 hinzu :

import shlex
quote_shell_string = shlex.quote

Jup. Hatte folgenden Thread gefunden und daraufhin Hand angelegt: Jetzt funktioniert alles! Vielen Dank für die Hilfe!

1 Like

@aeckstein @herr Sorry, war im Urlaub. Ich kann momentan nur unter 2.0 testen, hab die o.g. Änderungen aber mal eingepflegt.

Version: 2.3.4
Version is under review

Vielleicht könnt ihr die Version mal testen und mir Bescheid geben. Dankeschön!

ttr

Hi Tom,

ich habe keine Mikrotiks im Zugriff und könnte das nur testen, wenn mir jemand SNMP Walks zur Verfügung stellen kann.

Und keine Entschuldigung für Urlaub nötig :slight_smile:

Hi Andre,

SNMP ist ja das Problem bei den Mikrotiks: die haben nur ein paar wenige MIBs, die sie bedienen. Alles was eigentlich wichtig ist, aber nicht. Deswegen hatte ich das datasource Plugin für die API geschrieben. Aber Danke.

ttr

Hi ttr,

das habe ich übersehen, wenn in der Ausgabe keine wichtigen Daten stehen, reicht mir die Ausgabe von dem Datasource Program, die kann ich ja dann auch einfach mit " Individual program call instead of agent access" und cat aufrufen.

Hi Andre,

Das Problem machte ja aber genau das Datasource Script selber, nicht der Check an sich. Ich denke, das wird schon jemand ausprobieren können.

ttr

Hey @ttrafelet, danke für die Mühe. Ich werd’s mir am Montag mal anschauen und dann Rückmeldung geben.

Ich hoffe, dein Urlaub war entspannt.
VG, Alex.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.