i-doit API Ruby-Scripting

Wie in meinem letzten Blogpost angekündigt stelle ich heute eine gescriptete Variante für die API der i-doit CMDB vor.

Einzelne Abfragen, sowie das Anlegen von Objekten über den RESTClient mögen auf den ersten Blick zum Testen bzw. Debuggen  ziemlich sinnvoll erscheinen, aber man stößt schnell an Grenzen, sobald es sich über mehrere hundert solcher Objekte handelt. Darüber hinaus ist diese Methode sehr umständlich.

Meine Idee war es eine Webanwendung zu benutzen, welche mit einem einzelnen Requests (im JSON-Format) an die API von I-doit Abfragen oder das Neuanlegen von Objekten vereinfacht. Da bot sich das Framework Sinatra an, da dieses eine sehr einfache und schnell zu lernende DSL besitzt. Wenn diese Anwendung läuft, kann mit der Eingabe einer bestimmten URL, ein Objekt abgefragt bzw. erstellt werden. In diesem Beispiel, werde ich die Namen sowie IDs aller Server aus der CMDB auslesen.

Zunächst müssen wir folgende drei Bibliotheken einbinden:

#!/usr/bin/env ruby

require 'sinatra/base'
require 'json'
require 'rest-client

Im nächsten Schritt bauen wir uns einen generischen Request (wie in meinem vorherigen Blogpost zu lesen) zusammen:

$baseurl = "https://example-idoit-web-gui.de"
$apikey = "random_key"

class CMDBApi
  def initialize(url=$baseurl, apikey=$apikey, objID=nil)
    @url = url
    @apikey = apikey
    @objID = objID
  end

  def postHeader(endpoint, method, payload)
    response = RestClient::Request.new({
      :method => method,
      :headers => {:accept => :json, :content_type => :json},
      :url => "#{@url}/#{endpoint}",
      :payload => payload
    }).execute
  end
  def readAllServer()
    payloadMetadata = Hash.new
    payloadMetadata[:version] = "2.0"
    payloadMetadata[:id] = "1"
    payloadMetadata[:method] = "cmdb.objects.read"
    payloadMetadata[:params] = Hash.new
    payloadMetadata[:params][:apikey] = @apikey
    payloadMetadata[:params][:filter] = {"type": "5"}
    @payloadJsonFormat = payloadMetadata.to_json
    response = postHeader("src/jsonrpc.php", :post, @payloadJsonFormat)
    response_hash = JSON.parse(response)
  end
end

get "/server" do
  api = CMDBApi.new($baseurl, $apikey)
  response = api.readAllServer(objectID)
  allServerHash = {}
  response["result"].each do |result|
    serverID = result["id"]
    serverName = result["title"]
    allServerHash[:"#{serverName}"] = serverID
  end
  allServerHash.to_json
end

Wenn man das Skript ausführt, wird (je nach Konfiguration) über http://127.0.0.1:4567 auf das Webfrontend zu gegriffen. Durch das zusätzliche Anhängen von  “/server” ist es möglich, alle Servernamen und deren zugehörigen Server-IDs aus i-doit auszulesen.

{
  • "Server_A" : 66273,
  • "Server_B" : 94647,
  • “Server_C” : 21221,
  • “…”: ….
}

Der große Vorteil einer solchen Webanwendung ist, dass man durch Erweiterung eine Automatisierung erreichen kann. Erhält man z.B. einen neuen Server, der mittels Puppet provisioniert wurde, kann vom Puppetmaster ein Objekt im i-doit angelegt werden. Hierzu kann damit auch auf alle ermittelten Facts zurückgegriffen werden. Diese sind dann über das zu erweiternde Skript an die API weiterzugeben, um final ein Server-Objekt mit allen angereicherten Informationen zu erhalten.

Philipp Dorschner
Philipp Dorschner
Junior Consultant

Philipp hat im September 2017 seine Ausbildung zum Fachinformatiker gestartet. Er hat sogar schon eine Ausbildung im Gepäck und zwar zum technischen Assistenten für Informatik. Danach hat hat er sein Abi nachgeholt und anschließend begonnen Wirtschaftswissenschaften zu studieren. Da sein Herz während des Studiums ständig nach technischen Inhalten geschrien hat, wechselte er zu Verfahrenstechnik. Aber auch dieses Studium konnte Ihn nicht erfüllen, weshalb er sich für die Ausbildung bei NETWAYS entschieden hat, "back to the...

Monthly Snap March

March was a busy month at the NETWAYS HQ! The Icinga Camp in Berlin took place in the middle of the month, and at the end of the month we invited tech-interested girls to our office for the Girls day 2019. But we still found the time to share some knowledge in our blog, and to inform you about upcoming events!

In our Marketing team Julia keeps giving us reasons for attending the OSDC. Meanwhile Keya kept going down the memory lane, and showed us highlights from last years’ OSMC, which definitely was a conference worth remembering! OSMC: Take a glance back! We have a new training in our portfolio, PostgreSQL, as Julia let us know.

And, of course, celebrations were in order: Happy Birthday NWS! Julia reminded us of NETWAYS Web Services second birthday, two years of Software as a Service! Pamela finally revealed the OSDC speaker line up, which so many were waiting for! OSDC 2019- Agenda out now!

Eat well, be well!

Many of our colleagues are interested in a healthy lifestyle, and particularly in how to actually be healthy despite sitting in front of the PC most of the day. In that course we have already written a few articles on the right breathing and on the importance of drinking enough water in our Blog-Serie Wellbeing. In March our consultant Janina gave us loads of tips on how to eat healthy in the office, while it feels so much easier to order a pizza. Check it out: Ernährung im Büro

And the other consultants? What have they been contemplating about? Daniel took a closer look at Graylog v3.0. Dirk wrote about Verwaltung von SUSE Linux Paketen mit Katello, as a Foreman enthusiast he is always interested in new extensions and plugins. Another consultant shared thoughts in Wenn Agile, warum dann nicht richtig? Markus declared his opinion on how the Agile work- system might actually work.

What was new in the NETWAYS Shop in March?

Nicole shared a new release from the HW group, SensDesk v2. She also introduced a product in the NETWAYS online shop: Frisch im Shop, Cinterion. If you missed to read all about it at the time, here’s your second chance!

Apprentices’ experience

Loei built a reader and documented it for us in NFC-Leser mit einem Raspberry Pi. Aleksander showed us his experience on ncurses – TUI for Unix-Derivate.

Tinkerforge is making its way into our NETWAYS Shop, a great opportunity for Henrik to test some of it. Take a look at his first steps in Tinkerforge Basteln Teil 1. Have you ever wondered what PHP frameworks are for? Niko took a closer look for us. But not only our apprentices shared their…

…technical knowledge!

Johannes talked about every Sysadmins` reoccurring problem “Partition voll, Wo?” And showed us how to locate full partitions. Building a FM receiver with a Raspberry Pi 3 was Marius’ contribution in March. Infrastructure as Code mit Terraform und Openstack: Achim shared the advantages of Cloud vs data center.

Our developers’ latest findings

Eric gave an introduction into Redis Streams.  Interesting? Stay tuned for further Redis Streams Blogposts!

GitLab is usually a subject for Michael, and this is no exception! He published an article in the iX-Magazine on GitLab. He will be giving a GitLab Workshop at the OSMC, and here you can read about how the Git training was born, and about the power of the community.

And, last, but not least: Our very own CEO Bernd dabbled into psychology! Learn why nobody feels responsible for changing the empty roll of toilet paper in his series Bernd hilft!

Catharina Celikel
Catharina Celikel
Office Manager

Catharina unterstützt seit März 2016 unsere Abteilung Finance & Administration. Die gebürtige Norwegerin ist Fremdsprachenkorrespondentin für Englisch. Als Office Manager kümmert sie sich deshalb nicht nur um das Tagesgeschäft sondern übernimmt nebenbei zusätzlich einen Großteil der Übersetzungen. Privat ist der bekennende Bücherwurm am liebsten mit dem Fahrrad unterwegs.
Quick and Dirty: OpenStack + CoreOS + GitLab Runner

Quick and Dirty: OpenStack + CoreOS + GitLab Runner

Wer in GitLab die CI/CD-Features nutzen möchte und nicht zufällig einen ungenutzten Kubernetes-Cluster übrig hat, mit dem man GitLab’s Auto DevOps Funktion einrichten kann, der benötigt zumindest einen GitLab Runner, um Build-Jobs und Tests zum Laufen zu bekommen.
Der GitLab Runner ist eine zusätzliche Anwendung, welche sich ausschließlich darum kümmert, bei einer GitLab-CE/-EE Instanz die CI/CD-Aufträge abzuholen und diese abzuarbeiten. Der Runner muss dabei nicht zwingend auf dem selben System wie das GitLab installiert sein und kann somit auch extern auf einem anderen Host laufen. Der Hintergrund, weshalb man das auch so umsetzen sollte, ist eigentlich recht klar: ein GitLab Runner steht bei einer aktiven CI/CD-Pipeline oftmals unter hoher Last und würde er auf dem gleichen Host wie das GitLab selbst laufen, so könnte er dessen Performance stark beeinträchtigen. Deshalb macht es Sinn, den GitLab Runner z.B. auf eine VM in OpenStack auszulagern.
In diesem Blogpost werde ich kurz darauf eingehen, wie man schnell und einfach eine GitLab Runner VM per CLI in OpenStack aufsetzen kann. Da ich den Runner als Docker-Container starten möchte, bietet sich CoreOS an. CoreOS kommt mit Docker vorinstalliert und es bietet die Möglichkeit per Ignition Config nach dem Start des Betriebssystems Container, oder auch andere Prozesse, automatisch starten zu lassen.

Sobald man sich bei seinem OpenStack-Anbieter in sein Projekt eingeloggt hat, kann man sich dort unter “API Zugriff” die OpenStack-RC-Datei herunterladen. Damit kann man sich dann recht einfach per CLI bei OpenStack authentifizieren. Voraussetzung für die Nutzung der CLI ist, dass man bei sich den OpenStack Command-Line Client installiert hat.
Sobald man beides hat, kann es auch schon losgehen:

    1. Runner Registration Token abholen
      Dazu loggt man sich als Admin in sein GitLab-CE/-EE ein und navigiert zu “Admin Area” -> “Overview” -> “Runners”. Hier findet man den aktuellen Registration Token.
    2. CoreOS Ignition Config
      Die Konfigurationsdatei für CoreOS nennt man z.B. config.ign. Diese legt man sich ebenfalls auf dem Rechner ab.
      Der Inhalt muss im nächsten Schritt geringfügig angepasst werden.

      config.ign

      { "ignition": { "version": "2.2.0", "config": {} }, "storage": { "filesystems": [{ "mount": { "device": "/dev/disk/by-label/ROOT", "format": "btrfs", "wipeFilesystem": true, "label": "ROOT" } }] }, "storage": { "files": [{ "filesystem": "root", "path": "/etc/hostname", "mode": 420, "contents": { "source": "data:,core1" } }, { "filesystem": "root", "path": "/home/core/config.toml", "mode": 644, "contents": { "source": "data:,concurrent=4" } } ] }, "systemd": { "units": [ { "name": "gitlab-runner.service", "enable": true, "contents": "[Service]\nType=simple\nRestart=always\nRestartSec=10\nExecStartPre=/sbin/rngd -r /dev/urandom\nExecStart=/usr/bin/docker run --rm --name gitlab-runner -e 'GIT_SSL_NO_VERIFY=true' -v /home/core:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:v11.8.0 \n\n[Install]\nWantedBy=multi-user.target" }, { "name": "gitlab-runner-register.service", "enable": true, "contents": "[Unit]\nRequires=gitlab-runner.service\n[Service]\nType=simple\nRestart=on-failure\nRestartSec=20\nExecStart=/usr/bin/docker exec gitlab-runner gitlab-runner register -n --env 'GIT_SSL_NO_VERIFY=true' --url https://$URL -r $TOKEN --description myOpenStackRunner--locked=false --executor docker --docker-volumes /var/run/docker.sock:/var/run/docker.sock --docker-image ruby:2.5 \n\n[Install]\nWantedBy=multi-user.target" } ] }, "networkd": {}, "passwd": { "users": [ { "name": "core", "sshAuthorizedKeys": [ "$your-ssh-pub-key" ] } ] } }
    3. Ignition Config anpassen
      Beim Systemd-Unit “gitlab-runner-register.service” setzt man im Content bei den Variablen “$URL” den FQDN der eigenen GitLab-Instanz und bei “$TOKEN” den in Schritt 1 kopierten Registration Token ein.
      Außerdem kann man gleich noch seinen SSH-Key mitgeben, damit man später auch per SSH auf die VM zugreifen kann. Diesen hinterlegt man unter dem Abschnitt “passwd” im Platzhalter “$your-ssh-pub-key”.
    4. CLI Commands
      Nun kann man sich auch schon das Kommando zum anlegen der VM zusammenbauen.
      Als erstes muss man sich bei OpenStack authentifizieren, indem man die Datei sourced, die man sich eingangs aus seinem OpenStack Projekt geladen hat und dabei sein OpenStack Passwort angibt:

      source projectname-openrc.sh

      Man sollte außerdem sicherstellen, dass in dem Projekt ein CoreOS Image zur Verfügung steht.
      Anschließend kann man nach folgendem Schema die Runner-VM anlegen:

      openstack server create --network 1826-openstack-7f8d2 --user-data config.ign --flavor s1.medium --image CoreOS_Live "GitLab Runner"

      Network, Flavor und Image sollten aber individuell noch angepasst werden.

    Nach ca. zwei Minuten sollte dann der Runner auch schon zur Verfügung stehen. Überprüfen lässt sich das, indem man sich als Admin in seine GitLab-Instanz einloggt und im Bereich unter “Admin Area” -> “Overview” -> “Runners” nach einem Runner mit dem Namen “myOpenStackRunner” nachsieht.

    Wer noch auf der Suche nach einem OpenStack-Provider ist, der wird bei den NETWAYS Web Services fündig. Mit nur wenigen Clicks hat man sein eigenes OpenStack-Projekt und kann sofort loslegen.

Gabriel Hartmann
Gabriel Hartmann
Systems Engineer

Gabriel hat 2016 als Auszubildender Fachinformatiker für Systemintegrator bei NETWAYS angefangen und 2019 die Ausbildung abgeschlossen. Als Mitglied des Web Services Teams kümmert er sich seither um viele technische Themen, die mit den NETWAYS Web Services und der Weiterentwicklung der Plattform zu tun haben. Aber auch im Support engagiert er sich, um den Kunden von NWS bei Fragen und Problemen zur Seite zu stehen.

How To: Director Import #1

Guten Tag!

Heute zeige ich euch mit einer kleinen Galerie, wie ihr mithilfe von Modifikatoren, Daten im Director Import sauber aufbereiten könnt.

Die Umgebung ist eine selbstgebaute Vagrant Box auf Basis CentOS 7.6 mit Icinga 2 + Icinga Web 2. Das Icinga Web 2 wurde mit dem Director und Fileshipper Module ausgestattet.

Für mein Beispiel verwende ich einen Fileshipper CSV import, dessen Datenstruktur momentan etwas willkürlich wirkt. Das Ziel: Das unsere Modifikatoren diese Daten so aufbereiten, das am Ende eine einheitliche Struktur entsteht.

 

Wie immer wünsche ich euch viel Spaß beim Basteln!

 

Max Deparade
Max Deparade
Consultant

Max ist seit Januar als Consultant bei NETWAYS und unterstützt tatkräftig unser Professional Services Team. Zuvor hat er seine Ausbildung zum Fachinformatiker für Systemintegration bei der Stadtverwaltung in Regensburg erfolgreich absolviert. Danach hat der gebürtige Schwabe, der einen Teil seiner Zeit auch in der Oberpfalz aufgewachsen ist ein halbes Jahr bei einem Managed Hosting Provider in Regensburg gearbeitet, ehe es ihn zu NETWAYS verschlagen hat. In seiner Freizeit genießt Max vor allem die Ruhe, wenn...

Ernährung im Büro – „Just fit – Just awesome“

This entry is part of 4 in the series Just fit – Just awesome

Ich möchte heute unsere Serie “Just fit – Just awesome” um das Thema Ernährung im Büro ergänzen.

Leider kommt das Thema aufgrund von Zeitmangel, fehlendem Wissen und manchmal auch einfach Faulheit, viel zu kurz. Jeder hat eine andere Auffassung von gesund und ausgewogen. Aber worauf kommt es wirklich an? Was ist wirklich wichtig? Worauf sollte man wirklich achten?

Solange man nicht an einer ernstzunehmenden Krankheit leidet, gibt es einige wenige Faktoren, auf die man achten sollte, damit ernährungstechnisch nichts mehr schief gehen kann:

 

1. Ausreichend aber nicht zu viele Kalorien zu sich nehmen

Kalorien werden in sogenannte Makronährstoffe aufgeteilt

  • Kohlenhydrate (50%) gehören zu den Energielieferanten Nummer eins. Sie sind unter anderem auch für den Großteil unserer Sättigung zuständig. Man sollte jedoch ein Auge darauf haben überwiegend komplexe Kohlenhydrate zu sich zu nehmen. Darunter zählen z.B. Vollkorn Produkte, Kartoffeln und Hülsenfrüchte
  • Eiweiße (30%) sind die Baustoffe für Zellen und Gewebe. Sie sind wichtig zum Aufbau, zum Erhalt und zur Erneuerung der Körperzellen. Das heißt unter anderem auch für die Heilung von Wunden und Krankheiten. Besonders wertvoll sind Proteine mit hoher biologischer Wertigkeit (Fettarme Milch und Milchprodukte, fettarmes Fleisch, Fisch und Eier)
  • Fette (20%) sind neben den Kohlenhydraten der wichtigste Energiespeicher unserer Zellen. Jedoch muss man zwischen gesättigten, ungesättigten Fetten und Transfetten unterscheiden. Wichtig für unseren Körper und die Energiegewinnung sind die ungesättigten Fette (Omega3, Omega6). Enthalten sind diese mitunter in Fisch, pflanzlichen Ölen, Nüssen und Avocados.

Der Bedarf an Makronährstoffen variiert von Mensch zu Mensch. Ausschlaggebende Faktoren sind Alter, Größe, Gewicht und Aktivitätslevel. Falls man es wirklich genau wissen möchte, gibt es hierfür unzählige Onlinerechner im Internet zu finden. Aufpassen muss man dabei nur, dass manche Rechner die Aktivität anders mit einbeziehen als andere. Am Besten wäre es hier wohl sich ein paar herauszupicken, mit seinen eigenen Faktoren durchrechnen und am Ende den Durchschnittswert daraus zu ermitteln. Dies ist aber wirklich nur wichtig, wenn man sich die Mühe machen möchte und alles haargenau notiert.

Reichen würde es im Großen und Ganzen schon zu wissen, wie viele Kohlenhydrate man heute bereits gegessen hat, oder ob man überhaupt schon Eiweiß zu sich genommen hat.

2. Mikronährstoffe aufnehmen

Mikronährstoffe werden in Vitamine und Mineralstoffe aufgeteilt und sind Nährstoffe, die unserem Körper keine Energie liefern, aber in vielen anderen Funktionen für unseren Körper notwendig sind. Die Aufgaben der Mikronährstoffe sind sehr spezifisch und völlig unterschiedlich, auch innerhalb der einzelnen Mikronährstoff-Gruppen. Wichtig ist hier deshalb, viel verschiedenes Obst und Gemüse essen.

3. Vergiss nicht ausrechend Wasser zu trinken.

Mehr Infos gabs hierzu unter Wasser marsch! – “Just fit – just awesome”

4. Nicht am Arbeitsplatz essen

Iss dein Mittagessen nicht am Arbeitsplatz. Gerade bei Schreibtischarbeiten:

Eine kurze Bildschirmpause tut auch den Augen und dem Kopf gut. Wenn man durch Arbeit abgelenkt ist, isst man meist mehr und fühlt sich am Ende gar nicht richtig satt. Triff dich doch mit deinen Kollegen, das fördert zusätzlich den Team-Zusammenhalt. 

5. Vorkochen ist die Devise

Selbstgekochtes Essen hat meist mehr Nährwerte, ist kalorienärmer und günstiger. Einfach am Vorabend eine Portion mehr kochen und diese für den nächsten Tag einpacken. Dies funktioniert sowohl mit warmen Speisen als auch mit kalten sehr gut.

6. Gesunde Snacks für den kleinen Hunger zwischendurch

Bereite dir auch kleine, gesunde Snacks am Vorabend oder morgens zu, damit der Griff zu den Süßigkeiten ausbleibt. Gute Beispiele sind hier etwa Studentenfutter, oder Nüsse im allgemeinen sowie Obst. 

 

Wenn man den genannten Punkten ein wenig Aufmerksamkeit schenkt, versorgt man seinen Körper mit ausreichend Nähstoffen und ist fit für alles was einem das Leben so bereithält. Meist dauern die Vorbereitungen nicht länger als 30 Minuten. Selbst für die Vorbereitung zählt: Planung ist alles.

Janina Tritschler
Janina Tritschler
Consultant

Janina ist seit Dezember 2018 Consultant bei NETWAYS. Als OSMC-Referentin und Icinga Camp Fan kennen wir sie aber schon länger. Vorher hat sie als DevOps Engineer gearbeitet. Ihr gefällt die IT im Allgemeinen und im Besonderen, sich als Frau in dieser Männerwelt zu behaupten. Außerdem mag sie Cupcakes und Kraftsport.

OSDC 2019 | Agenda out now!

Already curious about what’s up at this year’s event?

We are happy to announce the program for Open Source Data Center Conference 2019! The agenda includes lots of inspiring talks by international speakers from well known companies such as:

Check out the full program here!

Enjoy two inspiring conference days and come back boosted by lots of fresh ideas! Get your ticket and all information at osdc.de

See you in Berlin on May 14 to 15!

Pamela Drescher
Pamela Drescher
Head of Marketing

Pamela hat im Dezember 2015 das Marketing bei NETWAYS übernommen. Sie ist für die Corporate Identity unserer Veranstaltungen sowie von NETWAYS insgesamt verantwortlich. Die enge Zusammenarbeit mit Events ergibt sich aus dem Umstand heraus, dass sie vor ein paar Jahren mit Markus zusammen die Eventsabteilung geleitet hat und diese äußerst vorzügliche Zusammenarbeit nun auch die Bereiche Events und Marketing noch enger verknüpft. Privat ist sie Anführerin einer vier Mitglieder starken Katzenhorde, was ihr den absolut...