Contributing to projects on GitHub

GitHub Logo

Today I want to share my workflow for contributing to projects hosted on GitHub because I believe it works very well for me and I regularly contribute to various projects. Of course most of this also applies to other hosted Git platforms like GitLab. It will not involve any Git magic as there are other posts to do that. So let’s use adding a check command to Icinga 2 as my example.

The obvious first step is finding the Git repository for the project and reading contribution guidelines because there are some projects which aren’t hosted on GitHub and some have additional requirements like submitting an issue in addition to a pull request. You should always familiarize yourself with and stick to those policies if you want your pull request to be accepted. For Icinga 2 there currently aren’t any additional project-specific guidelines.

Your next step is to create a fork on GitHub and clone the repository. So in the GitHub web interface click on “Fork” and select your own account (or company account as long as you are allowed to push). Once you’ve forked the repository you can check out a local copy using the following command:


git clone git@github.com/dgoetz/icinga2.git

Afterwards you should add another “remote” for the original Git repository in order to be able to update your own repository with changes from the upstream project:


cd icinga2/
git remote add upstream git@github.com:icinga/icinga2.git

After these initial steps you can create a Git branch for your feature or bug fix. Using the “master” branch for pull requests is strongly discouraged because things tend to get complicated once you have more than one pull request. Another recommendation is to use branch names that match the upstream repository’s style. This however is not a hard requirement:


git checkout -b feature/expand-check-foo

This also automatically switches to the newly-created branch which means you can now start to edit files for your pull request. Once you’re done you can add them to the Git index and create a commit. Typically upstream projects have guidelines for this, so do not forget to include documentation, make only one commit out of your work (perhaps by squashing) and so on.


vi itl/plugins-contrib.d/network-components.conf
vi doc/10-icinga-template-library.md
git add itl/plugins-contrib.d/network-components.conf doc/10-icinga-template-library.md
git commit -m "ITL: expanded check foo"

Afterwards push your commit to your forked repository and then create your pull request using the GitHub webinterface:


git push -u origin feature/expand-check-foo

When creating the pull request make sure to provide a detailed description of your changes and the reason why you feel that your pull request should be merged. Keep the setting checked to allow edits from maintainers. Depending on the project make sure to reference any related issues, fill in their pull request template or do whatever else they require for pull requests.

GitHub pull request

Typically once a pull request is created automated tests will be run and a review process by the project team will start, so it’s possible that you’ll be asked to make changes before your pull request is accepted. If this happens simply edit your branch to fix whatever problems were found during the review, amend your commit and force push it to your fork. This will also automatically update your pull request but you might want to provide a comment for the pull request as to what has changed:


vi doc/10-icinga-template-library.md
git add doc/10-icinga-template-library.md
git commit --amend -m "ITL: expanded check foo"
git push -f

Another commonly requested change is that you rebase your branch before the pull request is accepted. This usually happens when significant changes were made to the upstream repository while your pull request was waiting to be merged. In order to rebase your branch the following commands should be all you need, however in some cases you may also have to manually resolve conflicts:


git pull --rebase upstream master
git push -f

And of course you will sometimes want to create additional pull requests. For these make sure to start with a new branch based on the upstream repository:


git checkout master
git pull upstream master
git checkout -b fix/check-bar
...
git push -u origin fix/check-bar

So, this is it, this is my basic workflow for easy contributions on GitHub. I hope it helps you to get involved with your favorite projects and your fixes and features to get upstream. If you prefer to do all step in the command line, you can have a look at GitHub’s command-line wrapper for git hub. If you need more general Git knowledge I recommend the Git book and our training. If you need a GitLab system to play around, have a look at our NWS platform.

Dirk Götz

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Foreman räumt auf

Foreman Logo

Dank Virtualisierung und automatischer Provisionierung sind schnell und einfach Entwicklungs- und Testsysteme zur Verfügung gestellt und jeder bestellt fleißig neue Systeme, aber wie viele melden sich dann wirklich zurück wenn ein System nicht mehr gebraucht wird? Aus meiner Erfahrung heraus möchte ich behaupten die wenigsten tun dies. So kommt es, dass Ressourcen reserviert sind und brach liegen oder schlimmer noch tatsächlich belegt aber nicht mehr wirklich genutzt werden. Manuelle Aufräumaktionen treffen dann entweder zu wenig oder zu viele Systeme und kosten zu viel Zeit und Nerven. Wie schön wäre es wenn man die Kollegen erziehen könnte? Da es mit den Kollegen wohl nicht klappen wird, erziehen wir stattdessen unsere Umgebung und zwar mit dem Plugin “Expire Hosts” für Foreman.

Die Installation übernimmt wie mittlerweile bei fast allen Plugins der Foreman Installer und danach können wir auch direkt konfigurieren wie Systeme zukünftig von diesem Plugin behandelt werden sollen.

Foreman Expire Hosts Settings

Wie man sieht kann man drei Zeiten einstellen und zwar wann die erste und zweite Benachrichtigung relativ zum Ablaufdatum erfolgen soll und nach wie viel Tagen es nach Ablauf gelöscht werden soll nachdem das System am Ablaufdatum heruntergefahren wurde. Außerdem kann eingestellt werden, ob der Besitzer des Systems oder nur der Administrator das Ablaufdatum nachträglich ändern darf und ob die Angabe eine Pflicht ist. Wer dies als Administrator will kann sich auch auf die Liste der zusätzlichen Email-Empfänger setzen, da sonst nur der Besitzer benachrichtigt wird.

Wenn die allgemeinen Einstellungen nun passen erhält jeder Host ein Eingabefeld zur Einstellung seines Ablaufdatums unter den zusätzlichen Informationen.

Foreman Expire Hosts Host

Zusätzlich zur Email-Benachrichtigung zeigt Foreman auch noch im Webinterface den Status an und warnt auch hier vor dem Ablauf.

Foreman Expire Hosts OkForeman Expire Hosts Warning

Zwar ist das Plugin primär für virtuelle Maschinen gedacht, funktioniert aber auch bei physikalischen Systemen. Wenn Foreman das Powermanagement für diese steuern kann, fährt es diese auch herunter. Wenn nicht weiß der Administrator zumindest, dass das System zum Herunterfahren und Löschen freigegeben ist.

Ich denke mal für dieses Plugin finden so einige Administratoren einen sinnvollen Anwendungsfall, weshalb ich es auch neben vielen weiteren Plugins in die Foreman-Schulung aufgenommen habe.

Dirk Götz

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Fully packed to reduce heating – OSMC 2016 – Tag 3

OSMC Logo
Nach zwei interessanten Tagen mit Vorträgen ging es heute zum Abschluss wieder ans gemeinsame Hacken beim Hackathon. In einer kurzen Vorstellungsrunde kristallisierten sich bereits die Themen heraus und es ging sofort ans umgruppieren um den gemeinsamen Interessen zu folgen.

Neben viel Erfahrungsaustausch, migrierten Monitoringumgebungen, internen Skripten rund um Icinga 2, umgebungsspezifischen “Icinga Web 2”-Modulen und Prototypen wie “Icinga 2”-SNMP-MIBs und Debian-Packages für NSClient++, gibt es auch tatsächlich Ergebnisse zu vermelden.

Hackathon

* Das neue Puppet Module für Icinga 2 erhielt Unterstützung für SLES 12 (Pull-Request on Github)
* Die “Icinga 2”-Vagrant-Boxes erhalten Proxy-Support (Pull-Request on Github)
* Der Prototyp eines Elastic-Icinga-Beat (Prototype on Github)
* Das mit Dashing-Icinga2 zur Verfügung gestellte Dashboard wurde um weitere Funktionalitäten erweitert (Commit bereits gemerged)
* Das “Icinga Web 2”-Module NagVis wurde erweitert, unter anderem um Zoom für Dashboards (Commit bereits gemerged)
* Icinga Web 2 kann nun konfiguriert werden um Standalone zu laufen (Patch verfügbar)
* Neben einem kleinen Fix wurde dem Foreman-Smart-Proxy Monitoring-Plugin beigebracht Hosts in Icinga 2 anzulegen (Feature-Branch auf Github)
* Einen adaptiven Http-Check (Repository auf Github)

Ich würde es bei diesem Output als einen erfolgreichen Hackathon bezeichnen!

P.S.: Wer viel auf Github unterwegs ist, dem möchte ich noch den Artikel zum Erstellen eigener Labels ans Herz legen. Der erwähnte Smart-Proxy hat nun farblich korrekte Labels für Icinga 2 und Zabbix.

Dirk Götz

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Fully packed to reduce heating – OSMC 2016 – Tag 2

OSMC LogoDer gestrige Tag endete in lockerer Atmosphäre in der Indabahn, die wir nach ein paar Jahren am Flughafen wieder zur Abendlokation erkoren hatten, und für die Ausdauernden in Checkpoint Jenny, unserer üblichen Late-Lounge. Aufgrund unserer Rekordteilnehmerzahl gab es auf der Abendveranstaltung ein Running Buffet, so dass man einfach entspannt sitzen bleiben und sich unterhalten konnte und trotzdem gut mit Essen und Getränken versorgt wurde. Für weitere Unterhaltung war mit mehreren Roulette-Tischen gesorgt, an denen natürlich nicht um echtes Geld sondern um die Platzierung und damit den Preis für den ersten Platz gespielt wurde.

Trotz allem hatte Mario Mann volles Haus für den ersten Vortrag “Application Performance Management with Open-Source-Tooling” des Tages. Primär ging es um InspectIt welches Mario sowohl kommerziellen Tools gegenüberstellte als es auch in die Landschaft der “Open Source”-Monitoring-Tools einordnete. Auch hier drehte sich alles um Metriken, diesmal zur Erkennung von Anomalien in der Anwendungsperformance, und um die weiteren Daten um diese Anomalien richtig einzuordnen. Ein weiteres nettes Werkzeug, das ich aus dem Vortrag mitnehme ist WebPagetest.org.

Der “Engineer’s guide to Data Analysis” von Avishai Ish-Shalom spannte die Teilnehmer direkt ein um Problemanalyse auf Basis von Metriken zu betreiben. Ein paar der erlernten Lektionen: Durchschnittswerte sind nicht gut, die schlechtesten 5% (oder 1%) und möglichst nicht aggregierte Daten zeigen das Problem deutlicher. Aggregation ist nötig um die Daten speichern zu können, allerdings muss man im Vorfeld wissen wie man die Daten nutzen will um sie richtig zu aggregieren. Dies gilt auch für die graphischen Tools, die automatisch Daten zur Anzeige aggregieren.

“What’s Happening with OpenNMS” war der Update-Vortrag zu OpenNMS von David Hustace. Auch OpenNMS hat eine stetig wachsende Community und Feature-Liste, mit den üblichen Verdächtigen wie API und Grafana-/Elasticsearch-Integration. Die Integration von Backshift und R zur Darstellung von Graphen erlaubt eine richtige schöne Interaktion mit den Daten wie beispielsweise Live-Analyse und Vorhersage für Trends. Das neue BusinessProcess-Tool sieht auch sehr interessant aus, in der Icinga-Welt würde ich es als Mischung aus dem BusinessProcess Modul und NagVis bezeichnen. Allgemein kann man sagen viel Modernisierung hat in den letzten Monaten stattgefunden und wird es in den nächsten noch weiter tun.

Frisch gestärkt ging es nach dem Mittagessen weiter mit Thomas Niedermeier und “Hello Redfish, goodbye IPMI – The Future of Hardware Monitoring”. Nach einem Abriss warum man Remotemanagement einsetzen sollte und warum IPMI nicht mehr zeitgemäß ist, ging es um Redfish welches seit 2014 versucht eine moderne Lösung für diese Aufgabe darzustellen. Die Lösung basiert auf einer REST-API mit entsprechender Authentifizierung. Wer will kann also schon mit einem einfachen Browser-Plugin oder etwas python-Code arbeiten, die DMTF liefert allerdings sogar schon entsprechende einfache Tools. Es sieht also aus als könnte in naher Zukunft das IPMI-Protokoll zu Gunsten von Redfish abgeschaltet werden.

Nach seinem Vortrag fand dann auch gleich die übliche Hardware-Verlosung statt bei der Thomas-Krenn sich als Sponsor wie üblich nicht Lumpen gelassen hat und so durften drei Teilnehmer mit einer neuen Laptop-Tasche, SSD oder gar Mini-Computer nach Hause gehen. Ebenfalls wurde der Roulette-Gewinner der Abendveranstaltung mit einer smarten Waage beehrt, die man nach einer OSMC sicherlich gebrauchen kann.

Jan Doberstein mit “Take Care of your Logs” machte deutlich warum Logging wichtig ist und warum man Log-Events zentral sammeln sollte. Vom einfachen zentralen Syslog-Server über den Platzhirsch Elastic Stack ging es zu Graylog, welches einem gesamtheitlichen Ansatz folgt um Logs zu normalisieren und anzureichern um sie möglichst hilfreich zu präsentieren. Klarer Vorteil bei Graylog ist und bleibt die schöne Zugriffsteuerung auf die gesammelten Daten. Für Neugierige sei gesagt, dass die Open Beta der nächsten Version kurz vor der Veröffentlichung steht, die es noch flexibler machen wird.

“Software Development seen from a #yolo^Wdevop” von Jan Wagner aus dem Monitoring-Plugins-Projekt zeigte wie sich die Entwicklerwerkzeuge vom Texteditor zu heutigen Toolchains weiterentwickelt haben (inklusive YoloOps Bingo). Ich kann nur sagen ein schöner Einblick in das Projekt und eine nette Auswahl an Tools.

Ich fand es mal wieder eine sehr schöne und interessante Konferenz. Meinen Dank dafür an alle Speaker und Teilnehmer. Ich wünsche allen, die nicht zum Hackathon bleiben können, eine gute Heimfahrt und wir sehen nächstes Jahr am 21. bis 24. November wieder.

Bilder folgen!

Dirk Götz

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Fully packed to reduce heating – OSMC 2016 – Tag 1

OSMC 2016Auch dieses Jahr begann für mich wieder mit Tag 0, dem Workshop-Tag. Ich durfte Thilo bei einem voll ausgebuchten “Advanced Graphing”-Workshop assistieren, während nebenan Lennart und Thomas einen sehr praktischen “Icinga 2”-Workshop auf Basis der Beispiele aus ihrem Buch hielten. Für den Elastic-Stack waren David und Simon vor ebenfalls vollem Haus tätig, während Michi in entspannter Kleingruppe seine Teilnehmer in das Arbeiten mit Git eingewiesen hat. Und wie immer ging es nach den Workshops nahtlos weiter mit Fachsimpelei beim Abendessen und der anschließender Feuerzangen-Bowle auf dem Nürnberger Christkindles-Markt.

So richtig los ging Tag 1 dann wie immer mit Bernds Begrüßung, bei der sich schon zeigte, dass wir dieses Jahr mit über 300 Teilnehmern einen neuen Besucherrekord vorweisen konnten. Aus seiner Begrüßung stammt auch das Zitat, das ich als Titel für den diesjährigen Konferenzbericht gewählt habe. Zusätzlich zur eigentlichen Begrüßung stellte Bernd auch ganz stolz Netways Web Services vor, unsere neue Software-as-a-Service-Plattform vor. Aktuell zum freien Ausprobieren kann ich jedem empfehlen zumindest mal einen Blick darauf zu werfen, wer noch einen externen Satelliten für seine “Icinga 2”-Umgebung sucht. Und natürlich haben wir es uns nicht nehmen lassen James Fryman zum Geburtstag zu gratulieren.

Dieses Jahr fiel es mir wirklich durchgängig schwer mich für einen Talk zu entscheiden, daher empfehle ich jedem gleich vorweg gespannt auf das Konferenz-Archiv zu warten, um nicht nur das Wichtigste aus Vorträgen, die ich mir angeschaut habe mitzubekommen, sondern aus allen. Für den ersten Vortrag fiel meine Wahl auf Monica Sarbu mit “Monitor your Infrastructure with Elastic Beats” um mich über die aktuelle Entwicklung der Beats zu informieren. Interessant war auch wie die verschiedenen Beats genutzt werden können um relativ einfach Monitoring-Informationen aus Containern rauszubekommen. Eine Aufgabe, die ich doch als herausfordernd betrachte. Zusätzlich gab es nebenbei viele weitere nützliche Informationen, so kann beispielsweise Elasticsearch nun effektiver auch als “Timeseries Database” genutzt werden.

James Fryman hatte mit “Metrics are for chumps – Understanding and overcoming the roadblocks to implementing instrumentation” nicht nur wieder sein Talent für die Namensgebung eines Vortrags bewiesen, sondern hat es mit seiner humorvollen Art geschafft klar aufzuzeigen warum Metriken ein grundlegendes Feature sein sollten. Denn ohne Metriken lässt sich keine Aussage über Kapazität, Verbesserung oder Verschlechterung treffen und man muss sich auf Intuition oder Glück verlassen. Seine Präsentation enthielt nebenbei noch Tipps wo man Metriken abgreifen sollte, wie man Dev und Ops dazu bekommt die Wichtigkeit von Metriken zu verstehen und vieles mehr, wie immer sehr sehens- und hörenswert.

Tom hatte zu seinem Vortrag “Ein Jahr mit dem Icinga Director” volles Haus woran sich das Interesse an der graphischen Konfiguration ablesen lies. Von der einfachen Installation über manuelle Nutzung, Automatisierung, Agent-Deployment bis zum Ausblick auf geplante Features war alles in einer Stunde geboten. Ich denke mal nach dem Vortrag war nicht nur ich vom Director begeistert. Wenn man dann noch weiß wie viel Differenz zwischen offizieller und tatsächlicher Entwicklungszeit liegt, möchte man Tom doch glatt mit einem Gläschen oder auch Fläschchen Wein für weitere Features in Nachtarbeit motivieren! 😉

Nach der wie jedes Jahr üppigen Stärkung ging es für mich weiter mit Gerhard Laußer und “Open Monitoring Distribution 2016+”. Ein kurzer historischer Abriss und schon ging es zur OMD Labs Edition in die Consol die ganzen modernen Tools wie InfluxDB, Grafana und Icinga 2 integriert, so dass auch diese einfach als Teil von OMD zu installieren sind. Die Edition 2016 bringt dann noch zusätzlich Ansible für Neuinstallation, Update, Plugin-Verteilung und Inter-Site-Connections und den “Livestatus Multi Daemon” der Cache, Aggregierung, Sortierung und Formatierung für verschiedene Livestatus-Installationen bietet sowie Prometheus für Cloud-Monitoring.

Michael Medin gab uns in “Automated monitoring with Icinga and NSClient++” zusätzlich zum eigentlichen Thema Pro-Tipps zum Thema Präsentation. Allein die Neuerungen der letzten und nächsten Versionen aufzuzählen würde wohl den Rahmen sprengen. Interessant ist der von Michael angestrebte Paradigmen-Wechsel von aktiven Abfragen zu passivem Real-Time-Monitoring inklusive Metriken und automatischer Konfiguration.

Dieses Jahr mal was neues für mich, denn statt dem Vortrag des Icinga-Projekts wollte ich Shlomi Zadok zu “Security & Compliance automation and reports with Foreman” sehen, schließlich hat man nicht immer die Chance den Entwickler (in diesem Fall des Foreman-OpenSCAP-Plugins) persönlich zu hören. Neben der allgemeinen Erklärung was Foreman so ist, ging es natürlich primär um Compliancereports, welche ich bereits vor einer Weile in einem Blogpost behandelt habe. Die geplanten Erweiterungen klingen genau wie meine Wunschliste: Mehr Informationen und Anpassen der Profile in der Oberfläche sowie Ausführen der Remediation-Skripte via Remore Execution.

Natürlich will ich dem geneigten Leser auch die Neuigkeiten rund um Icinga nicht verschweigen. Fangen wir klein an mit dem überarbeiteten Dashboard, Performance-Verbesserungen in “Icinga 2″s Datenbankschnittstelle, Support für die “Icinga 2”-API als Kommandotransport in Icinga Web 2 sowie Verschönerungen wie die Möglichkeit Ankündigungsbanner zu schalten. Und machen groß weiter mit dem Cube, der Datawarehouse-Funktionalitäten für Icinga Web 2 bringt, sowie dem aktualisierten Businessprocess Module.

Nach dem Konferenztag geht es nun zur Abendveranstaltung in die Indabahn um gemeinsam der Völlerei zu frönen und sich weiter zum Thema Monitoring auszutauschen. Es werden sicher wieder die verschiedensten Personen und Projekte zusammenfinden und ich werde versuchen morgen zu berichten.

Hier mal ein paar erste Eindrücke:

 

Dirk Götz

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.