REST-API Host effective Attributes - labels Vererbung

CMK version:
2.1.0.p11
OS version:
Ubuntu 20.04
Fehlerbeschreibung
Die u.g. Abfrage sollte alle, auch die vererbten Attribute zurückbringen. Wenn man jedoch eine mehrstufige Ordnerstruktur hat, dann erfolgt das bei Labels nur noch für EINEN übergerodneten Folder.
/check_mk/api/1.0/objects/host_config/myhostname?effective_attributes=true

Beispiel:
/ordner1 label= {koid:1}
/ordern1.1 label= {hog:baumsatz}
host: myhost1
o.g. REST-Abfrage auf myhost1 ergibt labels:{hog:baumsatz}
Müsste aber nach Beschreibung der API liefern: {hog:baumsatz, koid:1}

Ich habe nun schon einige Dinge gemeldet bei denen ich mit der API Probleme bekommen habe und suche dringend nach Lösungen - ich helfe auch gern mit bei der Bugbeseitigung wenn Not am Mann ist.

Wenn ich das Beispiel richtig lese sind die Labels jeweils an den Ordner gebunden oder?.
Falls das so ist dann hat der Host im Ordner “ordner1.1” nur noch das Label {hog:baumsatz}. Das erste Label wird nicht mehr vererbt wenn auf dem Unterordner selbst ein Label definiert ist.
Der selbe Effekt würde eintreten wenn das zweite Label an den Host gebunden ist.

Im Endeffekt ist die Ausgabe der API hier vollkommen korrekt. Vererbung wird aufgebrochen durch setzen eines neuen Wertes.
Es kommt aber hier zu einem netten Effekt. In der GUI hat das Objekt beide Label.
Am Objekt selbst im Setup sieht man nur ein Label vererbt und in der Übersicht sieht man alle Label - seltsam.

Objekt in der Config Ansicht


Ein vererbtes Label

gleiches Objekt in der Host Liste
Das zweite Label ist wie in deinem Beispiel vom übergeordneten Ordner vererbt.
Eigentlich müsste das zweite Label dann auch schon im ersten Screenshot zu sehen sein.
Die Daten im ersten Screenshot sind auch die Daten welche per API kommen.
Ich denke mal das ist hier kein API Problem sondern ein generelles internes Problem.

Also eher eine Frage an die Code Spezis wie @moritz :wink:

1 Like

Da das Attribut “Labels” im zweiten Ordner neu gesetzt wird, überschreibt es dort den Inhalt, der sonst vom übergeordneten Ordner vererbt würde. Insofern ist das erstmal korrektes Verhalten.

Dass der Nutzer das anders erwartet, weil label1 etwas anderes als label2 ist, ist die andere Sache.

Gesetzt wird da aber immer die gesamte Labelliste.

Ich empfehle deshalb, Labels niemals manuell im Setup (auf Ordnern oder Hosts) zu setzen, sondern immer nur durch automatische Prozesse (API oder Service Discovery).

1 Like

Das ist genau was ich erwartet hab. CMK macht es aber anders. Obwohl die Vererbung aufgebrochen wurde bekommt das Hostobjekt am Ende beide Label.
Entweder ist es ein Bug das beide Label am Ende bei dem Objekt landen (glaub ich) oder es ist so gewollt, dass die Vererbung additiv ist, dann wäre es ein Bug in der API und in der Setup Anzeige.

Aua, das hatte ich noch gar nicht beobachtet. Ist das neu? Das wäre natürlich irgendwie “automagic” und nicht gut.

1 Like

Hallo zusammen,
danke für das schnelle Feedback. Meine Erwartungshaltung, dass ich im Webinterface - Ordner/Hostliste alle Labels aus den verschiedenen Untereben sehen kann. Außerdem ist es auch so, dass z.b. Regeln die auf diesen Labels passieren greifen.
Wenn die API das so nicht ausgibt, wird das in der Zukunft für API-User m.E. ein Problem, man müsste dann ja rückwärts noch die Ordner abfragen. Und, das würde doch auch nichts ändern, wenn die Labels durch Automatismen kommen - oder?

Btw: Ich freue mich richtig, mal mit Menschen über meine API-Probleme zu kommunizieren (DANKE :slight_smile: ). Wenn Ihr ein paar Minuten Zeit habt, würdet Ihr bitte auch das mal anschauen: (das ist richtig gemein)

Für Service Labels gab es da ein Werk, das eine Diskrepanz zwischen Anzeige und Verarbeitung beseitigt hat:

Vielleicht ähnliches auch bei host labels?

Hallo,

meiner Meinung nach macht die API bzgl. Vererbung einiges anders als die GUI und der Core.
Wir versuchen z.B. die Kontaktgruppen der Server per API auszulesen. Wir haben die Kontaktgruppen in den Eigenschaften der Folder konfiguriert, und folgende Häckchen gesetzt:
Add these groups as contacts to all hosts in this folder
Add these groups as contacts to all hosts in all subfolders of this folder

Per API Call lesen wir mit der alten check_mk/webapi.py per action get_host die config und schauen uns dort die Kontaktgruppen an. Die Vererbung der Kontaktgruppen / Permissions wird in der alten webapi auch bei gesetztem effective_attributes nicht geliefert.

Mit der neuen API muss man die host_config ansehen, den folder suchen, die folder_config ansehen, und dann rekursiv durch alle Parent folder gehen unter beachtung der Einstellungen recurse_use und recurse_perms.

Leider gibt es hier kein effective Attributes. Es wäre cool, wenn check_mk per API Abfragen zulassen würde wie: Welche Kontaktgruppe hat der Host. So muss ich die in check_mk eingebaute Logik nachbilden.