weblog über Christian Assing und seine Interessen

CA-Networks Blog

Archives Posts

python elixir session

April 14th, 2008 by chris

Zur Zeit mache ich beim ZID mein Praxissemester, ich programmiere für uns den Python Computer Room Manager (pycrman). Dieses Projekt ist in Python geschrieben und benutzt verschiedene Python Erweiterung. Zur einer Erweiterung will ich hiermit ein bissel was schreiben :)

Elixir

Elixir ist “dünner” Wrapper für die SQLAlchemy Library. Beide zusammen vereinfachen den Umgang mit einer Datenbank in Python um ein vielfaches.

Hier ein kleines Beispiel mit 2 Tabellen:

# import elixir stuff
from elixir import *
 
# setup db connection
metadata.bind = "sqlite:///movies.sqlite"
metadata.bind.echo = True
 
# first table
class Device(Entity):
  """representation of a device
  """
  using_options(tablename='device', inheritance='multi')
 
  id = Field(Integer, primary_key=True)
  name = Field(String(127), required=True, unique=True)
  domain = Field(String(255), required=True)
  interfaces = OneToMany('Interface')
 
  def __repr__(self):
    return 'Device %s' % (self.name)
 
# second table
class Interface(Entity):
  """network interfaces
  """
  using_options(tablename='interface')
 
  id = Field(Integer, primary_key=True)
  name = Field(String(16), required=True)
  ip = Field(String(38), required=True, unique=True)
  mac = Field(String(17), unique=True)
 
  device = ManyToOne('Device')
 
  def __repr__(self):
    return '<Interface: %s ip: %s mac: %s>' % (
        self.name, self.ip, self.mac)
 
setup_all()
drop_all()
create_all()

und schon kann mal auf einfache und sehr elegante Weise diese 2 Tabellen benutzen:

# create new device object
device = Device(name="foobar")
device.domain = "test.localdomain"
 
# create new interface object
interface = Interface(name="eth0", ip="1.1.1.1")
 
# add interface object to device object
device.interfaces = [interface]
 
# store objects in db
session.flush([device, interface])
 
# query
device = Device.get_by(name="foobar")
print device

Ein schönes Beispiel gibt es auch im Elixir Tutorial.

Noch ein kleiner Beitrag zu den elixir/sqlalchemy sessions. In der Standard Einstellung sind die Elixir sessions sogenannte “scoped_session”, d.h. das jeder Thread in einer threaded Umgebung seine eigene Elixir session hat. Das hat zur folge, das wenn ein Thread ein Objekt anlegt bzw. verändert, ein anderer Thread das nicht unbedingt mit bekommt, da Elixir/SQLAlchemy die Query Resultate cached. Am besten geht man damit um das man den Cache ausschaltet:

import elixir
elixir.options_defaults['mapper_options'] = dict(always_refresh=True)

oder bei einer Query populate_existing() benutzt.


posted with Vim

Archives Posts

Advanced Linux Server Management ZID-Kurs (Teil 1)

January 15th, 2008 by chris

Zur Zeit halte ich einen 4 Tages ZID-Kurs zum Thema Advanced Linux Server Management. Themenbereiche sind Sicherheit, Statistiken und Virtualisierung.

Hier das Inhaltsverzeichnis:

  1. Tools/The Linux Way
  2. Sichere default Installation (Debian)
  3. Monitoring Tools
  4. Statistic Tools
  5. “Intrusion Detection”
  6. Virtualisierung mit Xen
  7. Wie machen es wir beim ZID
  8. Links
Heute sind Punkt 2 (Sichere default Installation) und Punkt 3 auf der Tagesliste ;)

Anbei die erste und noch unvollständige Version meiner Folien. Wenn die Folien erstmal fertig sind werde ich natürlich auch meine Tex-Files zur Verfügung stellen.

linux-advanced.pdf

Filed under Linux, ZID-Work having No Comments »

Archives Posts

ich habe feuer gemacht oder fail2ban you made my day ;)

August 28th, 2007 by chris

ich kann es nur jeden armen geplagten sysadmin anraten fail2ban. Dieses kleine in python geschriebene “wunderprogramm” parsed logfiles und kann auf grund von regular expressions iptables oder tcp-wrapper (hosts.allow und hosts.deny) regel generieren. somit hab ich jetzt auf unseren universitäts mx’en ein auf iptables basierende lösung um spamhosts zu blocken die in unseren genutzten RBL’s drin stehn. dies werde ich natürlich auch auf unseren neuen super obendrüber mx übernehmen, leider brauch ich für diesen noch ein bissl zeit bis dieser produktiv geht.

Filed under Linux, Planet, ZID-Work having No Comments »