Terraform Changes

Hallo!

Was vielen unseren von geneigten Lesern entgeht ist das wir auch in unserem Alltag zwischen der ganzen Softwareschreiber- und Kompilier Tätigkeiten auch ganz viele virtuelle Maschinen und Container zum testen selbiger Software rauf und runter installieren müssen und das Tag für Tag.

Deshalb und gerade deshalb versuchen wir uns das Leben mit dafür erstellter Software und deren arbeitserleichternden Funktionen leichter zu machen. Wie mein Kollege schon in seinem Blogpost im März mir vorgegriffen hat benutzen wir bei der Netways Terraform. Achim wird in weiteren Artikeln darauf eingehen wie man Openstack per Terraform nach seiner Pfeife tanzen lassen kann und Ich möchte mich heute auf ein anderes Terraform Thema beziehen nämlich dem nahen release von Terraform 0.12.

Zu dem Zeitpunkt wo ich diese Zeilen niederschreibe ist auf der aktuellen Website von Hashicorp noch die Aktuelle Version 0.11.13 zu finden.

Aber Terraform hat schon etwas den Vorgang gelüftet und uns vielversprechendes gezeigt mit dem 0.12.0-beta1 pre-release.

Damit kann man schon die viele Erleichterungen welche der neue Terraform release mit sich bringt erahnen und auch schon antesten. Ich versuche mich an einer Erleuterung den änderungungen Anhand eines kleinen Beispiels.
Vielleicht kann ich den einen oder anderen IaaS Codeschreiber welcher sich hierfür interessiert etwas auf den Geschmack zu bringen schon etwas zu testen mit der neuen Version.

Hier der Unterschied zwischen einer (aktuell 0.11.13) alten Terraform Version und einer neuen Version in Terraform 0.12 durch eine Gegenüberstellung.

main.tf (Random Tiernamen Beispiel)

variable "count" { default = 1 } variable "default_prefix" { default = "Giraffe" } variable "zoo_enabled" { default = "0" } variable "prefix_liste" { default = [] } resource "random_pet" "my_pet" { count = "${var.count}" prefix = "${var.zoo_enabled == "0" ? var.default_prefix : element(concat(var.prefix_liste, list (""), count.index)}" }

main.tf HCL2 Version(Random Tiernamen Beispiel)

variable "pet_count" { default = 1 } variable "default_prefix" { default = "Giraffe" } variable "prefix_list" { default = [] } resource "random_pet" "my_pet" { count = var.pet_count prefix = var.zoo_enabled ? element(var.prefix_list, count.index) : var.default_prefix }

Die Unterschiede fallen zuerst etwas weniger ins Auge sind aber dafür meines Erachtens tiefgreifender für Leute die IaaS Code schreiben müssen und es dient der Lesbarkeit des Codes.

Vorteil Nummer 1:
Im alten Beispiel musste noch mit “${var.count}” von einem String zu einer Number evaluiert werden, mit der neuen HCL2 schreibweise entfällt das und es kann mit var.pet_count direkt der korrekte String oder Number Wert adressiert werden.

Vorteil Nummer 2:
Auch die Evaluierung der Liste prefix = “${var.zoo_enabled == “0” ? var.default_prefix : element(concat(var.prefix_liste, list (“”), count.index)}”  wird mit der neuen notation der HCL2 wesentlich eingängiger. prefix = var.zoo_enabled ? element(var.prefix_list, count.index) : var.default_prefix ist prägnanter. Es entfällt auch die element(concat(x), list(“”), x ) Hack-Situation um aus einer leeren Liste auch eine Liste mit einem NULL Element zum machen.

Vorteil Nummer usw. es gibt viel mehr was geändert worden ist, if you want to know more here.

Ich hoffe ich habe euch nicht zu sehr gelangweilt mit C.O.D.E. kurz vor dem Wochenende.

Gruß David

 

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

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.

Mac Helper: Finder

Die Standardwerkzeuge im Mac sind alle samt schon ziemlich gut. Für mich aber eine der Ausnahmen: Der Finder! Meistens finde ich mich dann mit 10 offenen Fenstern wieder oder ich verschiebe das Zeug in andere Verzeichnisse, weil die Oberfläche nicht schnell genug reagiert (Tabs wechseln, Verzeichnisse expandieren). Entnervt erledige ich dann die Überbleibsel im Terminal.

 

Alfred Workflow

Standardmäßig gibt es einen “Open-Workflow” in Alfred. Dieser öffnet entweder Dateien oder Verzeichnisse. Aber es geht noch besser: “Open Finder Tab“. Dabei bleibt ein Fenster offen und es werden weitere Tabs hinzugefügt:

Yoink

Wie schaut es dann mit anderen Artefakten aus? Mails, Preview oder URL’s? Dafür bin ich vor einiger Zeit auf Yoink gestoßen. Yoink ist ein kleiner temporärer Container allgemein Dateireferenzen zwischenspeichern kann. Dies können z.B. URL’s sein, Inhalt der Zwischenablage, Dateien. Dabei integriert es sich Nahtlos in die Oberfläche mit einem kleinen Fenster, was bei “Drag and drop” Operationen eingeblendet wird.

 

Beide Tools, Alfred wie auch Yoink sind nicht kostenfrei sind aber definitiv den Einkauf wert. Mir erleichtern sie massiv die tägliche Arbeit mit dem Finder!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.
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.

OSMC 2019: Get on stage!

The Open Source Monitoring Conference is the annual meeting of international monitoring experts, where future trends and objectives are set. Be one of the trendsetters! Register now as a speaker for OSMC and share your knowledge with the community. Talks can be submitted until July 30, 2019. Submit now!

We like technical talks

We are looking for insights into new topics or Open Source projects, technical backgrounds, latest developments, new features and techniques, how-tos, case studies, best practices as well as future trends and perspectives.

Speakers can choose between three formats: The long lecture (45 minutes), the short lecture (35 minutes) and the Ignite talk (5 minutes). The conference will be held in English and German. Presentations in English are particularly welcome.

OSMC takes place in Nuremberg, Nov 04 – Nov 07, 2019. Until June 30, 2019 you have the chance to grab one of our Early Bird Tickets. Be one of 250+ Open Source Lovers at OSMC! For further information visit osmc.de.

Julia Hornung
Julia Hornung
Marketing Manager

Julia ist seit Juni 2018 Mitglied der NETWAYS Family. Vor ihrer Zeit in unserem Marketing Team hat sie als Journalistin und in der freien Theaterszene gearbeitet. Ihre Leidenschaft gilt gutem Storytelling, klarer Sprache und ausgefeilten Texten. Privat widmet sie sich dem Klettern und ihrer Ausbildung zur Yogalehrerin.