Seite wählen

NETWAYS Blog

Weekly Snap: LConf & ACL, OSMC & OSBC Call for Papers

weekly snap5 – 9 May packed in tips for LConf, spreadsheets and streaming clients, three events and Puppet webinar too.
On events, Eva announced our Call for Papers for the Open Source Monitoring Conference and the Open Source Backup Conference, while Bernd headed off to Linux Tag in Berlin.
Christian continued, with a webinar on Puppet and Foreman as Dirk set up restricted user accounts in LConf using ACL.
Finally, Thilo made spread sheet magic with the help of the Ruby Gem, Roo and Marius compared Chromecast, Apple TV and Roku Stick.

Ruby zaubert mit Excel und Spreadsheets

In der heutigen Arbeitswelt werden viele Daten in Spreadsheets oder Exceltabellen verwaltet.
Ein paar Tage ist es her, da galt es für mich anhand einer Exceltabelle Infos zu einem Projekt zu sammeln und mit zugehörigen Dateien in ein Verzeichnis zu verpacken.
Dabei war es Fakt die Datensätze der Tabelle auszulesen und mit den Datensätzen in der Datenbank zu vergleichen.
Bei Google stößt man dabei schnell auf „CSV Spreadsheets lesen“ nur dann wird das Konvertieren und Selektieren zur schmerzlichen Angelegenheit.
Um größere Schäden zu vermeiden, gibt es schlaue Magier die immer ein Gem in dem Zylinder haben.
Dazu stelle ich euch das RubyGem „Roo“ vor, dass das Verarbeiten von Excelsheets zu einem Kinderspiel macht.
Ich werde mich bei dem Beispiel nur auf den kleinsten Anwendungsfall beziehen.
Und dazu installieren wir das Gem zuerst:

$ sudo ruby gem install roo

Unser Beispiel ist eine Spreadsheet im .xlsx Format.
screenshot1

#!/usr/bin/env ruby
require 'rubygems'
require 'roo'
foo = Roo::Excelx.new("projects.xlsx")
foo.default_sheet = foo.sheets.first
2.upto(8) do |line|
  project_title = foo.cell(line,'A')
  type = foo.cell(line, 'B')
  vendor = foo.cell(line, 'C')
  target = foo.cell(line, 'D')
  puts "#{project_title}\t#{type}\t#{vendor}\t#{target}"
end
foo.to_csv("foo.csv")

Mit diesem Zehnzeiler wird für die Zeile 2 bis 4 der jeweilige Inhalt einer Spalte
in die dafür definierte Variable geschrieben.
Mit „puts“ wird der Inhalt der Variable an die Ausgabe gegeben.
Bildschirmfoto 2014-05-06 um 12.20.26
Falls die Excelsheets zu lang sind um ein Ende definieren zu können kann das upto() mit weiteren
Optionen ausgeführt werden.

first_column,
last_column,
first_row and
last_row

Auf unseren Fall angepasst, schaut das so aus:

2.upto(foo.last_row) do |line|

Mit diesem Gem macht auch das Verarbeiten von großen Exceltabellen wieder einen Sinn.
Weitere Infos findet Ihr auf der Homepage von Roo
Ich kann dazu nur noch sagen „Just awesome!“ oder auch „It’s a kind of magic!“
Mehr coole Tricks und Magie findet Ihr auf unserem Blog

Thilo Wening
Thilo Wening
Manager Consulting

Thilo hat bei NETWAYS mit der Ausbildung zum Fachinformatiker, Schwerpunkt Systemadministration begonnen und unterstützt nun nach erfolgreich bestandener Prüfung tatkräftig die Kollegen im Consulting. In seiner Freizeit ist er athletisch in der Senkrechten unterwegs und stählt seine Muskeln beim Bouldern. Als richtiger Profi macht er das natürlich am liebsten in der Natur und geht nur noch in Ausnahmefällen in die Kletterhalle.

end-2-end monitoring mit watir-webdriver und headless

Schon häufiger wurde hier im Blog end 2 end monitoring behandelt, z.B. auto-it, webinject.
Das rubygem watir-webdriver ist ein weiteres tool aus diesem Bereich. Mit Ihm kann man Webseiten abrufen, auf Elemente überprüfen und Aktionen ausführen. Das besondere am watir-webdriver ist, dass er einen echten Browser zum simulieren der Verbindung nutzt.
Auf einem Linux Server ohne GUI schön und gut könnte man sich jetzt denken, doch mit gem headless und Xvfb kann man seinen Browser auch ohne GUI nutzen.
Im folgenden Beispiel zeige ich die Funktionsweise von watir. Als System dient mir ein debian wheezy

Vorbereitung

Als Voraussetzung braucht man folgende Pakete

aptitude install rubygems curl xvfb

Unter debian installiert an jetzt iceweasel, unter anderen distros wohl eher firefox. Chrome sollte auch funktionieren (und safari auf dem mac)

aptitude install iceweasel

Ich empfehle ruby mit rvm zu verwalten. Dann kann man zwischen verschiedenen Projekten und ruby Versionen einfach hin und her springen.

curl -L http://get.rvm.io | bash -s stable
# su -
rvm install 1.9.3
rvm use ruby 1.9.3@watir --create

Projektverzeichnis anlegen und Gemset für dieses Verzeichnis festlegen

mkdir check_watir
cd $_
rvm use @watir --ruby-version

Ein Gemfile erleichtert es einem die plugins auf andere Server zu kopieren. Nach einem „bundle“ stehen dort wieder alle gems zur verfügung.

vim Gemfile
source 'https://rubygems.org'
gem 'watir-webdriver'
gem 'headless'
bundle

Erster Test im irb

Um die Funktionalität von watir ersteinmal auszuprobieren bietet es sich an irb zu benutzen.

irb
1.9.3p194 :001 > require 'watir-webdriver'
 => true
1.9.3p194 :002 > require 'headless'
 => true
1.9.3p194 :003 > headless = Headless.new
 => #
1.9.3p194 :004 > headless.start
 => #
1.9.3p194 :005 > b = Watir::Browser.start 'www.google.com'
 => #
1.9.3p194 :006 > b.text_field(:name => 'q').set("Icinga Monitoring")
 => ""
1.9.3p194 :007 > b.button(:name => 'btnG').click
 => []
1.9.3p194 :008 > b.a(:text => 'Home - Icinga: Open Source Monitoring').exists?
 => true
1.9.3p194 :013 > quit

Ein echtes plugin

Dieses Plugin geht zuerst auf www.netways.de. Dort sucht es den Link ‚Shop‘ und klickt diesen an; sucht anschließend den Link Warenkorb, klickt diesen und überprüft ob der Warenkorb leer ist.
mehr lesen…

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

Unsere Puppet Trainings – eine Entscheidungshilfe

Seit Beginn des Jahres gibt es bei uns, zusätzlich zu den beliebten Puppet Fundamentals Kursen, nun auch die neuen Puppet Fortgeschrittenentrainings. Als erster, zertifizierter  Anbieter in Deutschland machen wir Fans der Konfigurationsmanagementsoftware jetzt auch fit für die Profiliga. Zusätzlich gibt es mit „Extending Puppet using Ruby“ auch endlich Trainings speziell für das Development rund um Puppet.
Bei so viel Auswahl fällt die Entscheidung natürlich schwer. Deshalb gibt es heute eine Orientierungshilfe, die auch deutlich machen wird, ab wann Du bereit für die Aufbaukurse bist.

Puppet Fundamentals – der Einstieg für Admins mit Unix-/ Linux-Erfahrung:
Der bereits bekannte Grundlagenkurs ist für viele Blogleser vermutlich schon ein alter Hut. In dem Fall kann man natürlich gleich beim nächsten Punkt weiterlesen. Allen anderen sei gesagt, dass es Zeit wird diese Wissenslücke zu schließen und sich umgehend anzumelden.
Vorab aber natürlich alle Infos zum Inhalt:

  • Entwicklung von Modulen und Klassen auf typischen Zielsystemen
  • Verwendung von Puppet Apply für den Test und Weiterentwicklung von Modulen
  • Speicherung von Puppet Modulen auf dem Puppet Master
  • Korrekte Verwendung von Klassen in Node-Definitionen
  • Start des Puppet Runs unter Verwendung der Live Management GUI
  • Sammlung und Auswertung der Ergebnisse in der Enterprise Console

Angefangen bei den Grundlagen zu Puppet bis hin zum konkreten Einsatz in der eigenen Umgebung bietet der Kurs alles, was für den Einstieg in das Thema Konfigurationsmanagement mit Puppet notwendig ist.
Puppet Advanced – Puppet Feintuning für Admins und Entwickler:
Der Aufbaukurs ist natürlich perfekt geeignet für alle, die Puppet Fundamentals bereits besucht haben und jetzt wissen möchten, was man noch alles anstellen kann um das Maximum aus der Software rauszuholen.
Wer seine Puppetkenntnisse aber nicht über die Grundlagenschulung erworben hat, ist auch herzlich willkommen. Neben Neugierde sollte man allerdings noch ein bisschen Basiswissen mitbringen, damit der Einstieg auch klappt. Types, Nodes und Modules und deren Verwendung sollten schon beherrscht werden, damit mit Puppet-Advanced ein Erfolg garantiert ist.

Was einen dann im Kurs erwartet ist:

  • Abgrenzung von Daten und Codes
  • Erstellung von großen Code-Verzeichnissen
  • Reporting und Auditierung
  • MCollective
  • Optimierung und Skalierung von Puppet
  • Code-Komprimierung und Best Practices

Durch die Vertiefung der Grundlagen und der Einführung in komplexere Konfigurationen macht Puppet mit dem Training „Puppet Advanced“ so richtig Spaß. Live-Management mit MCollective rundet das Ganze dann noch ab.
Extending Puppet using Ruby – das Profitraining für Devs und Ops:
Auch hier reicht, laut Gebrauchsanweisung von Puppet Labs, das Fundamentals Training, um durchzustarten. Eine gute Grundlage sind zusätzliche Erfahrungen mit Ruby, die wir Interessierten aber auch gerne auf Anfrage an einem zusätzlichen Einführungskurs am Vortag der Schulung vermitteln. Der Zusatztag ist dabei kostenfrei!
Inhaltlich geht es hier um die Grundlagen der Sprache Ruby und deren Zusammenspiel mit Puppet:

  • Einführung in die allgemeinen Ruby Grundlagen für Puppet Development (auf Anfrage)
  • Grundlegende Aspekte zum Ausbau des Puppet Frameworks
  • Erweiterte Custom Facts und Functions
  • Custom Resource Type und Provider Development
  • Custom Report Handlers
  • Custom Hiera Backends für Datenabstraktionen
  • Modultests für Ruby & Puppet unter Verwendung von RSpec & Mocha
  • Code Contribution an die Community

Alle Kurse gibt es natürlich mit dem gewohnten Rundum-sorglos-Paket, inklusive Übernachtung und auf Wunsch auch mit Vorübernachtung.
Damit ist doch eigentlich alles klar, oder?
Falls nicht helfen wir natürlich auch gerne weiter.

Puppet Modul für Corosync oder "Die Puppen tanzen jetzt auf mehreren Kisten"

Ziel für diesen Blog war es eigentlich, den Post selbst kürzer als die Überschrift zu halten. Dies wird mir, wie ich gerade feststelle, nicht ganz gelingen.
puppetlabsDa ich im Puppet Modul puppetlabs-corosnyc die Möglichkeiten vermisste Resourcen zu klonen, Resourcen Standards zu setzen oder mit Locations zu arbeiten, habe ich dieses Modul kurzerhand auf github geforkt und um die genannten Typen (cs_clone, cs_rsc_defaults u. cs_location) erweitert. Mit cs_location ist es nicht nur möglich eine Resource an einen Knoten zu binden, sondern die Verteilung auch regelbasiert vornehmen zu lassen.punda_github
Eine ausführliche Dokumentation befindet sich im Readme.md des Moduls und somit auch auf meiner Projektseite.
Das Schreiben eigener Typen und Provider in Ruby vermitteln wir übrigens auch in unserer nächsten Extending Puppet Schulung Anfang Juli.

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.