<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>cyberkov.at</title>
    <description></description>
    <link>https://cyberkov.at</link>
    <atom:link href="https://cyberkov.at/feed.xml" rel="self" type="application/rss+xml" />
    <author>
      <name>Hannes Schaller</name>
      <email>admin@cyberkov.at</email>
      <uri>https://cyberkov.at</uri>
    </author>
    
      <item>
        <title>Herbert mach das! - OSAD 2022</title>
        <description>&lt;p&gt;Dieses Mal war ich wirklich nervös. Ursprünglich habe ich mir eingebildet, den Vortrag sehr technisch anzulegen und eher eine Einführung in Stackstorm zu geben.
Jedoch ist mir dann aufgefallen, dass eigentlich nur sehr wenig über das “zusammen arbeiten”, das m.M.n. ja eigentlich das Wesentliche an StackStorm ist, existiert. Also habe ich mich getraut und die eher soften Seiten herausgestellt und gezeigt, wie das bei uns im Büro so funktioniert:&lt;/p&gt;

&lt;style&gt;.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }&lt;/style&gt;
&lt;div class=&quot;embed-container&quot;&gt;    &lt;iframe title=&quot;YouTube video player&quot; width=&quot;640&quot; height=&quot;390&quot; src=&quot;//www.youtube.com/embed/UnykoDfODbE&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;Die Vortragsfolien können &lt;a href=&quot;/assets/pdf/osad2022-schaller-stackstorm.html&quot;&gt;hier&lt;/a&gt; oder auf der &lt;a href=&quot;https://osad-munich.org/featured-speakers-2022/herbert-mach-das-stackstorm-im-taeglichen-betrieb/&quot;&gt;Vortragsseite&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;

&lt;p&gt;Diesmal habe ich auch versucht, die Präsentation mit showoff zu machen. Das hat einerseits wirklich Spass gemacht, weil das schreiben wirklich ein Genuss ist. Andererseits hats mich und Lukas schlaflose Nächste beschert, das CSS so hinzubekommen, dass niemand einen Unterschied zu unseren Powerpointfolien bemerkt ;-)&lt;/p&gt;

&lt;p&gt;Deshalb ists auch diesmal eine statische HTML Seite geworden, weil ich an der PDF Erzeugung gescheitert bin. Man muss ja auch nicht alles können :-)&lt;/p&gt;
</description>
        <pubDate>Sat, 15 Oct 2022 16:45:00 +0200</pubDate>
        <link>https://cyberkov.at//2022/10/15/osad-2022/</link>
        <link href="https://cyberkov.at/2022/10/15/osad-2022/"/>
        <guid isPermaLink="true">https://cyberkov.at/2022/10/15/osad-2022/</guid>
      </item>
    
      <item>
        <title>OSAD 2021</title>
        <description>&lt;p&gt;Auch dieses Jahr haben wir uns wieder, leider nur virtuell, auf die Open Source Automation Days gewagt, um ein wenig aus unserem Alltag zu erzählen.
Ich habe eine Integration unseres Ticketsystem in die Foreman Remote Execution gebaut, um damit automatisiertes Patching von Linux, sowie zukünftig auch Windows, durchzuführen.&lt;/p&gt;

&lt;p&gt;Wie das grob umrissen funktioniert kann man hier sehen:&lt;/p&gt;

&lt;style&gt;.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }&lt;/style&gt;
&lt;div class=&quot;embed-container&quot;&gt;    &lt;iframe title=&quot;YouTube video player&quot; width=&quot;640&quot; height=&quot;390&quot; src=&quot;//www.youtube.com/embed/SnHgsUI4x_0&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;Die Vortragsfolien können &lt;a href=&quot;/assets/pdf/hannes_schaller_taeglich-gruesst-das-murmeltier-patchen-nach-itil-aber-automagisch-bitte_osad2021.pdf&quot;&gt;hier&lt;/a&gt; oder auf der &lt;a href=&quot;https://osad-munich.org/featured-speakers/taeglich-gruesst-das-murmeltier-patchen-nach-itil-aber-automagisch-bitte/&quot;&gt;Vortragsseite&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;
</description>
        <pubDate>Tue, 19 Oct 2021 10:50:00 +0200</pubDate>
        <link>https://cyberkov.at//2021/10/19/osad-2021/</link>
        <link href="https://cyberkov.at/2021/10/19/osad-2021/"/>
        <guid isPermaLink="true">https://cyberkov.at/2021/10/19/osad-2021/</guid>
      </item>
    
      <item>
        <title>foreman provisioning tests mit gitlab-ci und serverspec</title>
        <description>&lt;p&gt;Eine meiner Hauptbeschäftigungen ist die Administration unseres &lt;a href=&quot;https://theforeman.org/&quot;&gt;Foreman&lt;/a&gt;/&lt;a href=&quot;https://orcharhino.com/&quot;&gt;orcharhino&lt;/a&gt; und Pflege der diversen Betriebssysteme, die wir tagtäglich an unsere Kunden ausliefern. Nachdem immer wieder neue Releases kommen, Anforderungen verändert werden oder einfach mal ein Update des Betriebssystems den Provisionierungsprozess verändert, habe ich mir mal die Zeit genommen einen automatischen Test des Provisionings zu bauen. Hier hat sich gitlab-ci mit den kürzlich eingeführten Rules als sehr nützlich erwiesen. Davor habe ich mir Jenkins von unseren Entwicklern ausgeborgt, aber voll integriert in gitlab find ichs irgendwie schöner.&lt;/p&gt;

&lt;h2 id=&quot;der-ablauf-in-gitlab-ciyml&quot;&gt;Der Ablauf in .gitlab-ci.yml:&lt;/h2&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;workflow&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;rules&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;stages&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;build&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;wait&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;verify&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;cleanup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;hammer host create erzeugt den Server in VMWare.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;&amp;amp;build&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hammer:latest&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;build&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;resource_group&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;foreman&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;master&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;before_script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hammer auth login basic -u ${FOREMAN_USER} -p ${FOREMAN_PASSWORD}&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;./build_${OS}.sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/theforeman/hammer-cli&quot;&gt;hammer&lt;/a&gt; ist das commandline interface für Foreman.&lt;/p&gt;

&lt;p&gt;Damit die Authentifizierung bei Foreman funktioniert muss der session support in hammer aktiviert werden. Dies mache ich bereits im hammer-image mit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Das &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build_ubuntu2004.sh&lt;/code&gt; enthält dann die notwendigen Parameter. Hier fand ich möglichst wenig Dynamik vorteilhaft, da meine Kollegen gerne solche Commands kopieren wenn mal mehr hosts aufzusetzen sind. Der geneigte Leser kann dies auch gerne mit Makefiles (und &lt;a href=&quot;https://argbash.io/&quot;&gt;argbash&lt;/a&gt; zB) und/oder anderen Dingen vereinfachen.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hammer &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  host create &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ubuntu20&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--domain&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;test.lan&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--ip&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;192.168.5.20&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--operatingsystem&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Ubuntu 20.04 LTS&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--partition-table&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;preseed-default&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--medium&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Ubuntu&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--lifecycle-environment-id&lt;/span&gt; 1 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--content-view&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Ubuntu 20.04&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--subnet&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;provisioning_tests&apos;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--organization&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;APA-IT&apos;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--location&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;DC1&apos;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--compute-profile&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;small&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--hostgroup-title&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Canary&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--compute-resource&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;vcenter&apos;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--compute-attributes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;start=1,annotation=&quot;provisioning tests #nobackup# required.&quot;,guest_id=&quot;ubuntu64Guest&quot;&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vishnubob/wait-for-it&quot;&gt;wait-for-it.sh&lt;/a&gt; testet regelmäßig ob ein Login per ssh möglich ist. Da der Key erst mit dem ersten puppetrun ausgebracht wird, wird sichergestellt dass wir “nicht zu früh” vorbeikommen.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;.wait&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;&amp;amp;wait&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;wait&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;toughiq/toolbox:gitlab&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;master&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;before_script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;which&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ssh-agent&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;apk&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;openssh-client&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&apos;&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;eval $(ssh-agent -s)&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;./wait.sh $OS_IP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;wait.sh sieht entsprechend aus:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# shellcheck disable=SC1090&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-euo&lt;/span&gt; pipefail
&lt;span class=&quot;nv&quot;&gt;IFS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;$&apos;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n\t&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;OS_IP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# We need to wait for the ssh port to be reachable&lt;/span&gt;
./utils/wait-for-it.sh &lt;span class=&quot;nt&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;OS_IP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; 22 &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; 1800 &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Waiting for puppet to finish...&quot;&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# &amp;amp;&amp;amp; sleep 600&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;until &lt;/span&gt;ssh &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;OS_IP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt; provtest &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;PasswordAuthentication=no&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;StrictHostKeyChecking=no&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;UserKnownHostsFile=/dev/null&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;sleeping 2 seconds until ssh becomes available...&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;2
&lt;span class=&quot;k&quot;&gt;done

&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Login successful. Continuing in a few seconds...&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;60

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;Done waiting.&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://serverspec.org/&quot;&gt;serverspec&lt;/a&gt; überprüft ob die Anforderung erfüllt sind und nicht versehentlich Settings geändert wurden&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;.verify&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;&amp;amp;verify&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;verify&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;serverspec:latest&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;master&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;artifacts&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;when&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;always&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;paths&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rspec.xml&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;reports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;junit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rspec.xml&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;before_script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;which&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ssh-agent&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;apk&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;openssh-client&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&apos;&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;eval $(ssh-agent -s)&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rake spec:${OS_FQDN}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spec/base_spec.rb&lt;/code&gt; sieht dann zum Beispiel so aus:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;spec_helper&apos;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;describe&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;should&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;be_listening&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;describe&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cron&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;its&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:table&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;should&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;%r{/opt/puppetlabs/bin/puppet agent --onetime --no-daemonize}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;describe&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;sudo&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;should&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;be_installed&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;cleanup löscht den Server mittels &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hammer host delete&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;.cleanup&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;&amp;amp;cleanup&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;cleanup&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hammer:latest&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;when&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;always&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;resource_group&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;foreman&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;allow_failure&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;before_script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hammer auth login basic -u ${FOREMAN_USER} -p ${FOREMAN_PASSWORD}&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hammer host delete --name ${OS_FQDN}&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Ab hier kopiert man die jeweilige Konfiguration und lädt die dazupassenden Steps:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# OS Config&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;.ubuntu2004&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;&amp;amp;ubuntu2004&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;variables&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;OS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ubuntu2004&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;OS_FQDN&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ubuntu20.test.lan&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;OS_IP&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;192.168.5.20&apos;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ubuntu2004:build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;*ubuntu2004&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;*build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ubuntu2004:wait&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;needs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ubuntu2004:build&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;*ubuntu2004&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;*wait&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ubuntu2004:verify&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;needs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ubuntu2004:wait&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;*ubuntu2004&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;*verify&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ubuntu2004:cleanup&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;needs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ubuntu2004:verify&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;*ubuntu2004&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;*cleanup&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Jetzt nur noch den Build regelmäßig von gitlab triggern lassen - fertig.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/gitlab-provsioning-pipeline.png&quot; alt=&quot;CI Pipeline&quot; srcset=&quot;    /assets/resized/gitlab-provsioning-pipeline-320x153.png 320w,    /assets/resized/gitlab-provsioning-pipeline-480x229.png 480w,    /assets/resized/gitlab-provsioning-pipeline-800x382.png 800w, /assets/gitlab-provsioning-pipeline.png 896w&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Leider musste ich nahezu alle DockerImages selbst bauen, welche jedoch relativ simpel sind (serverspec installieren, hammer nach Anleitung installieren).&lt;/p&gt;

&lt;p&gt;Ein wenig störend fand ich jeden Tag ein Email von Foreman zu bekommen, dass alle Server erfolgreich gebaut wurden. Hier wäre es schön einen Schalter in hammer zu haben um built notifications für diesen Host abzuschalten.&lt;/p&gt;
</description>
        <pubDate>Thu, 03 Dec 2020 00:00:00 +0100</pubDate>
        <link>https://cyberkov.at//2020/12/03/foreman-provisioning-tests-with-gitlab/</link>
        <link href="https://cyberkov.at/2020/12/03/foreman-provisioning-tests-with-gitlab/"/>
        <guid isPermaLink="true">https://cyberkov.at/2020/12/03/foreman-provisioning-tests-with-gitlab/</guid>
      </item>
    
      <item>
        <title>OSAD 2019</title>
        <description>&lt;p&gt;Hab ich mich doch mal getraut einen Vortrag auf einer Konferenz, in diesem Fall den &lt;a href=&quot;https://osad-munich.org/eindruecke-vom-osad-2019/&quot;&gt;Open Source Automation Days 2019&lt;/a&gt; in München zu halten. Ergeben hat sich dies kurzfristig, da ein Vortragender krankheitsbedingt ausgefallen ist und ich eigentlich eh schon länger mal über &lt;a href=&quot;https://github.com/dylanratcliffe/onceover&quot;&gt;onceover&lt;/a&gt; sprechen wollte. So hab ich am Vortag noch schnell ein paar Slides zusammengebaut…&lt;/p&gt;

&lt;style&gt;.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }&lt;/style&gt;
&lt;div class=&quot;embed-container&quot;&gt;    &lt;iframe title=&quot;YouTube video player&quot; width=&quot;640&quot; height=&quot;390&quot; src=&quot;//www.youtube.com/embed/JedrIQOM1qs&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;Die Folien können &lt;a href=&quot;/assets/pdf/hannes_schaller_testen_des_puppet_controlrepos_osad2019.pdf&quot;&gt;hier&lt;/a&gt; oder auf der &lt;a href=&quot;https://osad-munich.org/wp-content/uploads/2019/10/hannes_schaller_testen_des_puppet_controlrepos_osad2019.pdf&quot;&gt;Vortragsseite&lt;/a&gt; abgerufen werden.&lt;/p&gt;
</description>
        <pubDate>Tue, 29 Oct 2019 22:33:59 +0100</pubDate>
        <link>https://cyberkov.at//2019/10/29/onceover/</link>
        <link href="https://cyberkov.at/2019/10/29/onceover/"/>
        <guid isPermaLink="true">https://cyberkov.at/2019/10/29/onceover/</guid>
      </item>
    
      <item>
        <title>pushing metrics with mqtt</title>
        <description>&lt;p&gt;I came across a really good post from J.P.Mens, who wrote the brilliant mqttwarn script to effectively send MQTT messages to different types of services.
Since I was in the mood to finally switch my Nagios instance running on the old monitoring box to Icinga, I decided to give mqttwarn a shot as wll.&lt;/p&gt;

&lt;p&gt;Until now I’m really impressed how easy the setup, despite there is no debian package for it (I defintely should create one :) ).&lt;/p&gt;

&lt;p&gt;Since I tried to get the metrics from openhab over the internet into my InfluxDB instance running on my webserver and failed, I wanted to have something more reliable in place. Thats when I found mqttwarn to replace it.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Install the mqtt-presistence in openhab&lt;/li&gt;
  &lt;li&gt;setup openhab.cfg with your mqtt server (I’m using RabbitMQ but I guess Mosqitto would do as well)&lt;/li&gt;
  &lt;li&gt;add the persistence file for mqtt&lt;/li&gt;
  &lt;li&gt;Setup mqttwarn on the server&lt;/li&gt;
  &lt;li&gt;enable the Grahite input in InfluxDB (Port 2003)&lt;/li&gt;
  &lt;li&gt;…&lt;/li&gt;
  &lt;li&gt;Profit!&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 15 Jan 2015 11:37:01 +0100</pubDate>
        <link>https://cyberkov.at//2015/01/15/pushing-metrics-with-mqtt/</link>
        <link href="https://cyberkov.at/2015/01/15/pushing-metrics-with-mqtt/"/>
        <guid isPermaLink="true">https://cyberkov.at/2015/01/15/pushing-metrics-with-mqtt/</guid>
      </item>
    
      <item>
        <title>OpenHAB and vim</title>
        <description>&lt;p&gt;Recently I started using &lt;a href=&quot;http://openhab.org/&quot;&gt;OpenHAB&lt;/a&gt; to automate my house. Unfortunately the OpenHAB Designer is a real PAI for the default use case in my opinion.
Usually I would expect that the core runtime is installed on a linux box (e.g. a Raspberry PI or something) and the designer is used on a Desktop.
So how does the data get to the server?&lt;/p&gt;

&lt;p&gt;One possibility would be to use Dropbox, using the Dropbox bundle to have OpenHAB fetch the folder and reload it’s config. I found this to be relatively uncomfortable for development, since you don’t get instant feedback if it works as expected.
So I decided to ssh into the box running openhab and edit the files directly in the configuration folder. Well I guess the problem is clear. To use the designer, one would need to have a graphical interface or X-Forwarding enabled (including having all the necessary libraries installed which also not an option on the server).&lt;/p&gt;

&lt;p&gt;Therefore I created a vim syntax file, which can be downloaded from &lt;a href=&quot;https://github.com/cyberkov/openhab-vim&quot;&gt;https://github.com/cyberkov/openhab-vim&lt;/a&gt;. As of now it works, but I don’t feel like I’m really using all the features of syntax highlighting of vim. Especially I don’t think the folding features are working and the automatic indentation.&lt;/p&gt;

&lt;p&gt;I still hope it’s helping and I would be glad about any pull requests and improvements :-)&lt;/p&gt;
</description>
        <pubDate>Thu, 15 Jan 2015 11:13:36 +0100</pubDate>
        <link>https://cyberkov.at//2015/01/15/openhab-and-vim/</link>
        <link href="https://cyberkov.at/2015/01/15/openhab-and-vim/"/>
        <guid isPermaLink="true">https://cyberkov.at/2015/01/15/openhab-and-vim/</guid>
      </item>
    
      <item>
        <title>Wisdom of the ancients</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/wisdom_of_the_ancients.png&quot; alt=&quot;All long help threads should have a sticky globally-editable post at the top saying &apos;DEAR PEOPLE FROM THE FUTURE: Here&apos;s what we&apos;ve figured out so far ...&apos;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Via &lt;a href=&quot;http://xkcd.com/979/&quot;&gt;xkcd&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 11 Jan 2012 00:00:00 +0100</pubDate>
        <link>https://cyberkov.at//2012/01/11/wisdom-of-the-ancients/</link>
        <link href="https://cyberkov.at/2012/01/11/wisdom-of-the-ancients/"/>
        <guid isPermaLink="true">https://cyberkov.at/2012/01/11/wisdom-of-the-ancients/</guid>
      </item>
    
      <item>
        <title>cool tools</title>
        <description>&lt;p&gt;Today at DevOpsDays G&amp;ouml;teborg we rounded out the day’s events with an Open Space session on &lt;b&gt;Cool Tools&lt;/b&gt;. Basically I wanted to have a session where as experts in our field we can suggest life-saving, life-changing or just handy tools we use from day to day that others may not be aware of. Each person got up, said some small amount about the tool in question and wrote it on the board. In the end we had a board full of suggestions and used up all the time!&lt;/p&gt;
&lt;p&gt;So in the interests of posterity here is the list:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://graphite.wikidot.com/&quot; target=&quot;_blank&quot;&gt;Graphite&lt;/a&gt; – metrics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://beginrescueend.com/&quot; target=&quot;_blank&quot;&gt;RVM&lt;/a&gt; – Ruby Gem versioning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sstephenson/rbenv&quot; target=&quot;_blank&quot;&gt;rbenv&lt;/a&gt; – Ruby Gem versioning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://launchpad.net/percona-toolkit&quot; target=&quot;_blank&quot;&gt;Maatkit/Percona-toolkit&lt;/a&gt; – DB Toolkit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.soasta.com/cloudtest/&quot; target=&quot;_blank&quot;&gt;Soasta Cloudtest&lt;/a&gt; – Load testing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jedi4ever/sahara&quot; target=&quot;_blank&quot;&gt;Sahara&lt;/a&gt; – Vagrant sandboxing/snapshotting&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://collectd.org/&quot; target=&quot;_blank&quot;&gt;collectd&lt;/a&gt; – metrics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apenwarr/git-subtree&quot; target=&quot;_blank&quot;&gt;git-subtree&lt;/a&gt; – Git add-ons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/ksar/&quot; target=&quot;_blank&quot;&gt;ksar&lt;/a&gt; – graphical sar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ngrep.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;ngrep&lt;/a&gt; – network packet grep&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.circlemud.org/jelson/software/tcpflow/&quot; target=&quot;_blank&quot;&gt;tcpflow&lt;/a&gt; – TCP flow recorder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://betterthangrep.com/&quot; target=&quot;_blank&quot;&gt;ack-grep&lt;/a&gt; – grep replacement&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://keepass.info/&quot; target=&quot;_blank&quot;&gt;keepass*&lt;/a&gt; – password store&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kiip/statsite&quot; target=&quot;_blank&quot;&gt;statsite&lt;/a&gt; – statistics server&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://notmuchmail.org/&quot; target=&quot;_blank&quot;&gt;notmuch/mutt-notmuch&lt;/a&gt; – mail indexer/search&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sup.rubyforge.org/&quot; target=&quot;_blank&quot;&gt;sup-mail&lt;/a&gt; – mutt on steroids&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.charlesproxy.com/&quot; target=&quot;_blank&quot;&gt;charles&lt;/a&gt; – http dumper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/evanphx/gx&quot; target=&quot;_blank&quot;&gt;gx&lt;/a&gt; – smart git pull and other tools&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/its-all-text/&quot; target=&quot;_blank&quot;&gt;ItsAllText!&lt;/a&gt; – textarea editing with external programme in firefox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vimdoc.sourceforge.net/htmldoc/diff.html&quot; target=&quot;_blank&quot;&gt;vimdiff&lt;/a&gt; – side-by-side diff in vim&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://meld.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;meld&lt;/a&gt; – UI-based diff/merge tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://brettterpstra.com/project/nvalt/&quot; target=&quot;_blank&quot;&gt;nvALT&lt;/a&gt; – searchable snippet editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/revans/bash-it&quot; target=&quot;_blank&quot;&gt;bash-it&lt;/a&gt; – community bash configs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://johnmacfarlane.net/pandoc/&quot; target=&quot;_blank&quot;&gt;pandoc&lt;/a&gt; – markup format convertor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nvie/gitflow&quot; target=&quot;_blank&quot;&gt;gitflow&lt;/a&gt; – git extensions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kitenet.net/~joey/code/etckeeper/&quot; target=&quot;_blank&quot;&gt;etckeeper&lt;/a&gt; – config SCM&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mercurial.selenic.com/wiki/MqExtension&quot; target=&quot;_blank&quot;&gt;Hg Mq&lt;/a&gt; – mercurial patch management&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.reviewboard.org/&quot; target=&quot;_blank&quot;&gt;ReviewBoard&lt;/a&gt; – peer review tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/gerrit/&quot; target=&quot;_blank&quot;&gt;gerrit&lt;/a&gt; – peer review tool for git&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.beetil.com/&quot; target=&quot;_blank&quot;&gt;Beetil&lt;/a&gt; – ITIL tracker&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/pigscanfly/archive/2008/02/09/xperf-a-new-tool-in-the-windows-sdk.aspx&quot; target=&quot;_blank&quot;&gt;xperf&lt;/a&gt;/&lt;a href=&quot;http://support.microsoft.com/kb/311503&quot; target=&quot;_blank&quot;&gt;symchk&lt;/a&gt; – profiling on Windows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://oprofile.sourceforge.net/news/&quot; target=&quot;_blank&quot;&gt;oprofile&lt;/a&gt; – system profiling for Linux&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tmm1/perftools.rb&quot; target=&quot;_blank&quot;&gt;perftools.rb&lt;/a&gt; – Ruby profiling&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://launchpad.net/libeatmydata&quot; target=&quot;_blank&quot;&gt;eatmydata&lt;/a&gt; – transparently disable fsyncs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.10gen.com/mongodb-monitoring-service&quot; target=&quot;_blank&quot;&gt;MMS&lt;/a&gt; – MongoDB monitoring service&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cohesiveft.com/vpncubed/&quot; target=&quot;_blank&quot;&gt;VPN-Cubed&lt;/a&gt; – inter-cloud-domain VPN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jclouds.org/&quot; target=&quot;_blank&quot;&gt;jclouds&lt;/a&gt;/&lt;a href=&quot;http://incubator.apache.org/deltacloud/&quot; target=&quot;_blank&quot;&gt;Deltacloud&lt;/a&gt;/&lt;a href=&quot;http://libcloud.apache.org/&quot; target=&quot;_blank&quot;&gt;Libcloud&lt;/a&gt;/&lt;a href=&quot;https://github.com/geemus/fog&quot; target=&quot;_blank&quot;&gt;fog&lt;/a&gt; – cloud abstraction APIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bitwizard.nl/mtr/&quot; target=&quot;_blank&quot;&gt;mtr&lt;/a&gt; – matt’s traceroute&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.fudgie.org/&quot; target=&quot;_blank&quot;&gt;gltail&lt;/a&gt; – log visualisation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html&quot; target=&quot;_blank&quot;&gt;varnishreplay&lt;/a&gt; – cache warming / http testing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conntrack-tools.netfilter.org/&quot; target=&quot;_blank&quot;&gt;conntrack-tools&lt;/a&gt; – firewall HA tools&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;So there you have it. Please let me know if any of the URLs are wrong, and I hope some of these links help you in some way!&lt;/p&gt;


Via &lt;a href=&quot;http://paperairoplane.net/?p=320&quot;&gt;paperairoplane.net&lt;/a&gt;
</description>
        <pubDate>Wed, 11 Jan 2012 00:00:00 +0100</pubDate>
        <link>https://cyberkov.at//2012/01/11/cool-tools/</link>
        <link href="https://cyberkov.at/2012/01/11/cool-tools/"/>
        <guid isPermaLink="true">https://cyberkov.at/2012/01/11/cool-tools/</guid>
      </item>
    
      <item>
        <title>Diaspora</title>
        <description>&lt;p&gt;Diaspora hat vor knapp einem Jahr für Aufsehen in den Medien gesorgt, durch das Versprechen eine gut eund sichere Alternative für Facebook zu werden.&lt;/p&gt;

&lt;p&gt;Jeder kann seine Daten auf eigenen “Pods” ablegen und selbst entscheiden ob er diese veröffentlichen will. Er kann seine Posts löschen und auch nur bestimmten Personen zugänglich machen, wie es ihm oder ihr gefällt.&lt;/p&gt;

&lt;p&gt;Ich habe nun die Gelegenheit genutzt und ein wenig hineinzuschnuppern und bin vollends überzeugt worden. Daher gibt es für alle die es interssiert nun auch einen diaspora pod unter https://foobar.cx/&lt;/p&gt;

&lt;p&gt;Natürlich gibt es dort ebenfalls eine Facebook und Twitterintegration um nicht den Anschluss zu den alten Kontakten zu verlieren.&lt;/p&gt;
</description>
        <pubDate>Mon, 23 May 2011 00:00:00 +0200</pubDate>
        <link>https://cyberkov.at//2011/05/23/diaspora/</link>
        <link href="https://cyberkov.at/2011/05/23/diaspora/"/>
        <guid isPermaLink="true">https://cyberkov.at/2011/05/23/diaspora/</guid>
      </item>
    
      <item>
        <title>IPv6</title>
        <description>&lt;p&gt;Nachdem ich in den letzten Tagen sehr erfolgreich den IPv6 Tunnel von &lt;a href=&quot;http://www.sixxs.net/&quot;&gt;SixXS&lt;/a&gt; in Betrieb genommen habe, 
Firewall konfiguriert und Subnet beantragt, ist es nun an der Zeit meine Webseiten auf IPv6 ebenfalls umzustellen. 
Daher ist nun auch cyberkov.at hier angekommen und über &lt;a href=&quot;http://ipv6.cyberkov.at&quot;&gt;ipv6.cyberkov.at&lt;/a&gt; (oder auf herkömmlichen Wege über &lt;a href=&quot;http://www.cyberkov.at&quot;&gt;cyberkov.at&lt;/a&gt;) erreichbar.&lt;/p&gt;
</description>
        <pubDate>Thu, 13 May 2010 00:00:00 +0200</pubDate>
        <link>https://cyberkov.at//2010/05/13/ipv6/</link>
        <link href="https://cyberkov.at/2010/05/13/ipv6/"/>
        <guid isPermaLink="true">https://cyberkov.at/2010/05/13/ipv6/</guid>
      </item>
    
  </channel>
</rss>
