Seite 1 von 1

Config generieren aus DB

Verfasst: Donnerstag 24. September 2009, 07:28
von Poolboy
Hi,

ich will aus einer vorhandenen DB eine Nagios config generieren.
Ich habe mir jetzt schonmal MySQL-Python installiert. Das kann ich dann mit "import _mysql" benutzen.

Jetzt frage ich mich schon seit 2 Tagen wie ich es hinbekommen kann daraus eine schöne Nagiosconfig zu basteln. Also damit die Nagios Syntax der .cfg's beim generieren erhalten bleibt??

Kann mir da jemand auf die Sprünge helfen?

Danke schonmal! Ich hoffe, ich habe mein Problem detailliert genug beschrieben!

Gruß,
Poolboy

Verfasst: Donnerstag 24. September 2009, 08:09
von BlackJack
`_mysql` solltest Du nicht importieren. Der Unterstrich bedeutet, dass dieses Modul nicht zur öffentlichen Schnittstelle gehört. Die steckt im Modul `MySQLdb`.

Verfasst: Donnerstag 24. September 2009, 08:23
von Poolboy

Verfasst: Donnerstag 24. September 2009, 09:22
von Hyperion
Doku hat geschrieben: _mysql

If you want to write applications which are portable across databases, use MySQLdb, and avoid using this module directly
Ist doch gleich der erste Satz, der sogar noch auf das "richtige" Modul verlinkt ;-)

Aber selbst wenn dem nicht so wäre, hätte ich auf den Rat eines erfahrenen Anwenders wie Blackjack gehört! Oder wieso fragst Du sonst in einem Forum nach?

Re: Config generieren aus DB

Verfasst: Donnerstag 24. September 2009, 10:11
von Poolboy
Poolboy hat geschrieben:
Jetzt frage ich mich schon seit 2 Tagen wie ich es hinbekommen kann daraus eine schöne Nagiosconfig zu basteln. Also damit die Nagios Syntax der .cfg's beim generieren erhalten bleibt??

Kann mir da jemand auf die Sprünge helfen?

Danke schonmal! Ich hoffe, ich habe mein Problem detailliert genug beschrieben!

Gruß,
Poolboy
Eigentlich wollte ich eine Antwort auf diese Frage aber trotzdem Danke für die Info und ich habs wohl überlesen.

Gruß,
Poolboy

Verfasst: Donnerstag 24. September 2009, 10:15
von Hyperion
Naja, immerhin hast Du nun schon mal einen potenziellen Designfehler weniger ;-)

@Nagios: Damit kenne ich mich null aus und kann demzufolge dazu auch nichts sagen. Ich kapiere nicht einmal, was Du da genau machen willst :-)

(Anhand von Daten in der DB irgend eine Config erzeugen?)

Re: Config generieren aus DB

Verfasst: Donnerstag 24. September 2009, 11:57
von /me
Poolboy hat geschrieben: ich will aus einer vorhandenen DB eine Nagios config generieren.
Wie sieht die DB-Struktur aus?
Poolboy hat geschrieben: Jetzt frage ich mich schon seit 2 Tagen wie ich es hinbekommen kann daraus eine schöne Nagiosconfig zu basteln. Also damit die Nagios Syntax der .cfg's beim generieren erhalten bleibt??
Wie sieht die Syntax der Nagios-Konfigurationsdateien aus?

Ich habe bei deiner bisherigen Problembeschreibung Schwierigkeiten damit, die Ausgangslage und das Ziel zu erkennen. Hast du eine Konfigurationsdatei die du anhand der Daten aus der DB anpassen möchtest oder willst du die Datei komplett neu erzeugen (wobei ich dann das "erhalten bleibt" nicht verstehe)?

Verfasst: Donnerstag 24. September 2009, 14:03
von Poolboy
Ausgangslage:

DB / Tabelle mit:

Code: Alles auswählen

Host   |  pname      | pvalue |
-------------------------------
host1  |  parameter  | 100    |
host2  |  parameter  | 200    |
also 3 Spalten mit Host, pname und pvalue die befüllt werden.

Die Config sieht so aus:

define host {
host1 parameter 100
}

so und ich hab nur die DB mit den Werten und daraus will ich dann eine .cfg in dieser Syntax haben:

Code: Alles auswählen

define host {
host1   parameter   100
}
Überblick:

Ich will also eine neue Datei erzeugen mit der Syntax:

Code: Alles auswählen

define host {
host1   parameter   100
}
Die Werte wie host1, parameter und 100 will ich aus einer MySQL DB ziehen. Wie ich das mache kann ich ja ergoogeln aber ich weiß nicht wie ich am Ende mit den Werten eine Datei erstellen kann mit dieser Syntax.

PS.: in Java würde ich es wohl mit PrintWriter machen!

Verfasst: Donnerstag 24. September 2009, 14:28
von Pekh
Sind das da zwischen den Wörtern 'host1' und 'parameter' wirklich nur Leerzeichen, oder muß da was spezielles hin, z.B. ein Tabulator? Ist die Anzahl der Leerzeichen relevant? Die Antworten lauten vermutlich alle 'nein', aber man sollte sowas vorher klären.

Ich würde eine Sequenz von Tupeln (host, pname, wert) nehmen und mittels

Code: Alles auswählen

" ".join(tpl)
zeilenweise zu einem Text zusammenfügen. Wenn du die Daten aus einer Datenbank beziehst, stehen die Chancen ziemlich gut, daß du sie schon in genau dieser Form erhälst.

Den Text dann in die Datei zu schreiben ist trivial. Wie das geht, findest du dann im Tutorial oder in der Doku. Zwischen den Python-Versionen hat sich da eine leichte Veränderung ergeben, welche Variante als der "schöne" Weg betrachtet wird.

Verfasst: Donnerstag 24. September 2009, 14:51
von Poolboy
Danke!

Ja zwischen host pname und pvalue soll jeweils ein Tab sein.
Dann schau ich mal, ob ich das mit einem Tupel hinbekomme :-/

Verfasst: Donnerstag 24. September 2009, 15:00
von Hyperion
Pekh hat geschrieben: Ich würde eine Sequenz von Tupeln (host, pname, wert) nehmen und mittels

Code: Alles auswählen

" ".join(tpl)
zeilenweise zu einem Text zusammenfügen.
Damit fehlt aber das drum herum ;-)

Code: Alles auswählen

data = []
# in rows die DB Ergebnisse
for row in rows:
    data.append(u"""
define host {{
{0}
}}
    """.format("\t".join(row)))
return u"\n".join(data)

Verfasst: Freitag 25. September 2009, 06:46
von Poolboy
Hyperion hat geschrieben:
Pekh hat geschrieben: Ich würde eine Sequenz von Tupeln (host, pname, wert) nehmen und mittels

Code: Alles auswählen

" ".join(tpl)
zeilenweise zu einem Text zusammenfügen.
Damit fehlt aber das drum herum ;-)

Code: Alles auswählen

data = []
# in rows die DB Ergebnisse
for row in rows:
    data.append(u"""
define host {{
{0}
}}
    """.format("\t".join(row)))
return u"\n".join(data)
Huhu,

ok danke schonmal! Ich versteh das Konstrukt zwar noch nicht aber ich hoffe das kommt noch *g*

Gruß,
Sash

Verfasst: Freitag 25. September 2009, 08:06
von Poolboy
Was hat eigentlich das zu bedeuten:

Code: Alles auswählen

#!/usr/bin/python

import MySQLdb

db=MySQLdb.connect(host="localhost",
                  user="root",
                  passwd="ficken",
                  db="test")

print "db connect hat geklappt"

Code: Alles auswählen

sash at lxsasi in python % ./dbconnect.py
/usr/lib/python2.6/site-packages/MySQL_python-1.2.3b2-py2.6-linux-i686.egg/_mysql.py:3: UserWarning: Module MySQLdb was already imported from /usr/lib/python2.6/site-packages/setuptools-0.6c9-py2.6.egg/MySQLdb/__init__.pyc, but /usr/lib/python2.6/site-packages/MySQL_python-1.2.3b2-py2.6-linux-i686.egg is being added to sys.path
db connect hat geklappt

Verfasst: Freitag 25. September 2009, 19:02
von BlackJack
Das Du einen schlechten Geschmack bei der Wahl Deiner Passwörter hast!? :-P