Config generieren aus DB

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

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
def getGreetingForm(self):
return 'Gruß Poolboy'
BlackJack

`_mysql` solltest Du nicht importieren. Der Unterstrich bedeutet, dass dieses Modul nicht zur öffentlichen Schnittstelle gehört. Die steckt im Modul `MySQLdb`.
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

def getGreetingForm(self):
return 'Gruß Poolboy'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

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
def getGreetingForm(self):
return 'Gruß Poolboy'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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)?
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

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!
def getGreetingForm(self):
return 'Gruß Poolboy'
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

Danke!

Ja zwischen host pname und pvalue soll jeweils ein Tab sein.
Dann schau ich mal, ob ich das mit einem Tupel hinbekomme :-/
def getGreetingForm(self):
return 'Gruß Poolboy'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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)
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

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
def getGreetingForm(self):
return 'Gruß Poolboy'
Poolboy
User
Beiträge: 12
Registriert: Montag 25. Mai 2009, 09:49
Kontaktdaten:

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
def getGreetingForm(self):
return 'Gruß Poolboy'
BlackJack

Das Du einen schlechten Geschmack bei der Wahl Deiner Passwörter hast!? :-P
Antworten