Seite wählen

NETWAYS Blog

Reguläre Ausdrücke in Hiera verwenden

Ohne weiteres lassen sich in Hiera keine regulären Ausdrücke verwenden. Allerdings lässt Hiera sich mit einem weiteren Backend hierfür nachrüsten.

# gem install hiera-regex

Die Einbindung erfolgt wie gewohnt als zusätzliches Backend und der Angabe des Daten-Verzeichnisses.

---
:backends:
- regex
- yaml
...
:regex: /var/lib/hiera

Für die Daten in der Hierarchie muss es sich um yaml-Dateien handeln, die auch das Suffix .regex besitzen. Der eigentliche Name leitet sich je nach Verwendung ab, so lautet der komplette Dateiname z.B. für ein dynamisches %{domain}, domain.regex.
Beim Inhalt verhält es sich etwas besonders. Bei mir wollte die korrekte Auswertung nur erfolgen, wenn ich mindestens 3 Leerzeichen als Einrückung bei der Key/Value-Zuweisung verwendete.

---
- '(de|us|ca)\.netways\.de$':
   puppet::puppetmaster: puppet.netways.de
- '(in|my)\.netways\.de$':
   puppet::puppetmaster: puppet.in.netways.de
Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Azubis erzählen: März 2015 Jean

Name: Jean-Marcel Fach
Ausbildungsberuf: Fachinformatiker für Anwendungsentwicklung
Abteilung: Icinga2 core development
Lehrjahr: 1

Hallo,
ich schreibe hier als Azubi im Development einen Blogppost zur Serie „Azubis erzählen“. Dieser ist nach diesem Absatz auch zu lesen, aber zunächst werde ich vorstellen.
Ich bin 21 Jahre alt und arbeite seit einem halben Jahr bei Netways. Vorher war ich Student an der Erlanger Universität. Meine Aufgaben haben fast immer mit Icinga 2 zu tun, hin und wieder müssen auch sonstige Aufgaben erledigt werden, mal mehr programmiertechnischer Natur und mal weniger.
Eine dieser Aufgaben war das Script, das das Vorkommen eines Datums in einer Tabelle zählen sollte, doch bevor ich mich damit beschäftigen konnte musste ich erst einmal dafür sorgen das die richtige Datei geöffnet wird. Die Dateinamen sind etwa so kodiert:
NAME_DATUM_UHRZEIT_NUMMER.ENDUNG

rx

Die Matrix war ein Perl Programm. Deswegen machen die Nachfolger auch so wenig Sinn


Wichtig sind dabei eigentlich nur Datum und Uhrzeit, doch wie unterscheidet man diese von den übrigen Teilen des Dateinamens?
Unterstriche zählen fiel als Erstes weg, da der NAME meist selbst noch Unterstriche enthielt. Also muss rückwärts gesucht werden. die Endung erkennt man daran, dass ein Punkt vor ihr steht… leider kann so eine Datei auch mehrere Endungen haben, etwa .txt.gz für komprimierte Dateien. Und wenn der NAME dann selbst einen Punkt enthalten kann…
Also musste eine andere Lösung her: regex
Die regular expression
Lange war ich etwas eingeschüchtert von regex, oft sah ich nur Monster wie dieses hier (Soll Email Adressen validieren, und ist dabei nicht einmal 100% korrekt, wenn man es genau nimmt) und wer will schon mit so einer Wand Text arbeiten müssen?
Also Augen zu und durch, anhand dieses Tutorials brachte ich mir also die regex Grundlagen bei, denn zum Lernen ist hier immer Zeit. Gar nicht mal so schwer, zum Glück gibt es dann noch diese Seite auf der man nach Herzenslust ausprobieren kann.
Nun aber zu meinem konkreten Problem:
deq_2214_20140415_140857_0413.txt.gz
Nach dem Muster oben ist klar, dass es sich um eine verpackte Textdatei, die 413te am 15.4.2014 aus der Serie ‚deq_2214‘, gespeichert um 14:08:57, handelt. Aber selbst wenn man das Muster nicht schon vorher kennt ist es leicht es zu erkennen, für einen Menschen. Für einen Computer eben nicht (Daher sind Computer Menschen in Go noch unterlegen, während sie im Schach unschlagbar sind).
Aber ein dummer Computer kann gut stur Schemata überprüfen:
(\w+)_(\d{8})_(\d{6})_(\d{4})(\.txt)(\.gz)?$
Ist die Lösung, Erklärung:

(\w+)    # Fasse den Anfang zu einer Gruppe zusammen ("deq_2214")
  _      # Unterstriche dienen als Abtrennung und werden übergangen
(\d{8})  # Eine Gruppe aus genau acht Zahlen, das Datum ("20140415")
  _
(\d{6})  # Eine Gruppe aus genau sechs Zahlen, die Uhrzeit ("140857")
  _
(\d{4})  # Eine Gruppe aus genau vier Zahlen, die Nummer ("0413")
(\.txt)  # Die Endung ".txt"
(\.gz)?  # Die optionale Zusatzendung ".gz"
  $      # Sorgt dafür das nach der Endung nichts mehr kommen kann
         # (".txt.gz.temp" ist ungültig)

Weekly Snap: From Rachota & NeDi, to Autojump & Teltonika Modems

16 – 20 July offered posts on hardware and software for sys admins, tools for developers and photos of our fun run team in training.
Georg announced that the beloved Teltonika Modem USB/E10 is back in stock in our hardware shop, and Stefan introduced Rachota, the open source time tracking tool.
On the development side, Tobias recommended tools to test regular expressions while Eric played with Autojump for fast navigation in the command line.
Lastly, Eva counted 93 days down to the OSMC 2012 with Remo Rickli’s presentation on “NeDi – Network Discovery” and Bernd shared a few snaps of our team on their second last training session for the Nuremberg company fun run.

RegEx testen – schnell und einfach

Zum Abschluss der Woche möchte ich euch meine persönlichen Helden der Woche vorstellen. Tools zum testen von Regular Expressions.
Wie man sich an dieser Stelle denken kann, habe ich über die Woche hinweg viel Zeit mit Development verbracht, wobei es die ein oder andere Situation gab in der natürlich auch Regular Expressions gebaut werden mussten. Weiterhin muss man sagen das wir (RegEx und ich) noch nie so richtig dicke Freunde waren. Wir konnten uns schon immer einigen (bzw. hat es noch kein RegEx-Statement gegeben das ich nicht lösen konnte), jedoch bin ich persönlich der Meinung das Regex unterm Strich einfach zeitraubend und fehleranfällig sind.
Nach ein paar enttäuschenden Tests mit diversen Tools bin ich letztendlich bei Reggy für den Mac hängen geblieben. Es erfüllt ohne Probleme meinen überaus hoch gesteckten Anspruch bei der Benutzung nicht abzustürzen und das direkte anzeigen der vom Regex getroffenen Zeichen.
Ihr werdet jetzt sicher denken „Ohne Absturz und direkt die Zeichen anzeigen!? Das kann doch jedes Tool bei Google!?“. Bis vor kurzem war ich der gleichen Meinung, bin dann aber auf den harten Boden der Tatsachen zurück geholt worden. Ein Großteil der Tools ist zwar sehr stabil, hat aber auch den unschönen Nachteil das man immer einen Button zum darstellen / errechnen des Regex klicken muss. Der kleinere Teil der Tools, bei dem das nicht der Fall ist, stürzen einfach ab. Ich war damit  fast schon so weit mir meine eigene Regex-Test Webseite zu bauen 😉
Als Fazit kann ich euch folgende Tools empfehlen:

  • Reggy (für den Mac)
  • Regex Coach (für Windows und Linux; die Mac Version würde ich nicht empfehlen)
  • regexpal (Online)
Tobias Redel
Tobias Redel
Head of Professional Services

Tobias hat nach seiner Ausbildung als Fachinformatiker bei der Deutschen Telekom bei T-Systems gearbeitet. Seit August 2008 ist er bei NETWAYS, wo er in der Consulting-Truppe unsere Kunden in Sachen Open Source, Monitoring und Systems Management unterstützt. Insgeheim führt er jedoch ein Doppelleben als Travel-Hacker und renoviert, baut und bastelt als Heimwerker an allem was er finden kann.