<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>k11h DevOps</title><link href="https://k11h.de/" rel="alternate"></link><link href="https://k11h.de/blog/feeds/all.atom.xml" rel="self"></link><id>https://k11h.de/</id><updated>2026-03-02T20:15:00+01:00</updated><subtitle>devops professional</subtitle><entry><title>SLAC conference workshop</title><link href="https://k11h.de/blog/slac-2026.html" rel="alternate"></link><published>2026-03-02T20:15:00+01:00</published><updated>2026-03-02T20:15:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2026-03-02:/blog/slac-2026.html</id><content type="html">&lt;h3&gt;conference workshop&lt;/h3&gt;
&lt;p&gt;I will give a workshop on Web App Security &amp;amp; Bug Bounty Lessons Learned on the SLAC Conference 2026 (May 13, 2026)&lt;/p&gt;
&lt;p&gt;The topics covered are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-world vulnerabilities (SQLi, XSS, RCE, Path Traversal) based on actual Bug Bounty reports&lt;/li&gt;
&lt;li&gt;Attacker's perspective: how external researchers think and what internal teams miss&lt;/li&gt;
&lt;li&gt;Practical defense strategies at code, server &amp;amp; browser level&lt;/li&gt;
&lt;li&gt;Bug Bounty operations: triaging, researcher communication, false positives vs. real findings&lt;/li&gt;
&lt;li&gt;Live demos with industry-standard hacking tools (ffuf, nuclei, BeEF, Juice Shop)&lt;/li&gt;
&lt;li&gt;Actionable takeaways for Admins, DevOps &amp;amp; Security Engineers&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;more details and registration&lt;/h4&gt;
&lt;p&gt;the details page can be found &lt;a href="https://www.heinlein-support.de/slac/2026/workshop/web-app-security-bug-bounty" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="security"></category><category term="conference"></category><category term="security"></category></entry><entry><title>bbot-ui - a terminal gui for bbot</title><link href="https://k11h.de/blog/bbot-ui.html" rel="alternate"></link><published>2025-12-05T08:00:00+01:00</published><updated>2025-12-05T08:00:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2025-12-05:/blog/bbot-ui.html</id><content type="html">&lt;h3&gt;what is it&lt;/h3&gt;
&lt;p&gt;A self-contained terminal UI for browsing and analyzing bbot scan results.
bbot is an awesome &lt;a href="https://www.blacklanternsecurity.com/bbot/"&gt;tool made by blacklanternSecurity&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT"&gt;&lt;img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/downloads/"&gt;&lt;img alt="Python 3.8+" src="https://img.shields.io/badge/python-3.8+-blue.svg"&gt;&lt;/a&gt;
&lt;a href="https://github.com/k11h-de/bbot-ui"&gt;&lt;img alt="Platform" src="https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20windows-lightgrey.svg"&gt;&lt;/a&gt;
&lt;a href="https://github.com/k11h-de/bbot-ui/releases"&gt;&lt;img alt="GitHub release" src="https://img.shields.io/github/v/release/k11h-de/bbot-ui"&gt;&lt;/a&gt;
&lt;a href="https://textual.textualize.io/"&gt;&lt;img alt="Textual TUI" src="https://img.shields.io/badge/TUI-Textual-blueviolet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/k11h-de/bbot-ui"&gt;&lt;img alt="screenshot" src="https://github.com/k11h-de/bbot-ui/blob/main/docs/demo.gif?raw=true"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;source&lt;/h4&gt;
&lt;p&gt;the sources, documentation and releases are located &lt;a href="https://github.com/k11h-de/bbot-ui" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="security"></category><category term="tools"></category><category term="python"></category><category term="security"></category></entry><entry><title>bug bounty</title><link href="https://k11h.de/blog/bug-bounty.html" rel="alternate"></link><published>2021-12-31T23:59:00+01:00</published><updated>2021-12-31T23:59:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-12-31:/blog/bug-bounty.html</id><content type="html">&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Ich investiere gern einen Teil meiner Freizeit in die Suche und das Melden von Schwachstellen. Selbstverständlich erwarte ich hierfür keinerlei Gegenleistung.&lt;/p&gt;
&lt;p&gt;Dennoch möchten sich die meisten Betreiber gern erkenntlich zeigen und meine Arbeit unterstützen.&lt;/p&gt;
&lt;h2&gt;Unterstützung&lt;/h2&gt;
&lt;p&gt;Wenn Sie meine Arbeit unterstützen möchten können Sie dies auf folgende Weise:&lt;/p&gt;
&lt;h4&gt;1) Eine Spende für&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Servermiete / Laborumgebung (ca. 50€/Monat)&lt;/li&gt;
&lt;li&gt;Software Lizenzen (z.B. &lt;a href="https://portswigger.net/burp/pro"&gt;Burp Suite&lt;/a&gt;: 350€/Jahr)&lt;/li&gt;
&lt;li&gt;die geplante Schulung und &lt;a href="https://www.eccouncil.org/programs/certified-ethical-hacker-ceh/"&gt;Zertifizierung&lt;/a&gt; als Ethical Hacker (ca. 2500€)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://paypal.me/KarBerlin" target="_blank"&gt;&lt;img alt="PayPal" height="50px" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/PayPal.svg/124px-PayPal.svg.png"&gt;&lt;/a&gt;       &lt;br&gt;
&lt;a href="https://paypal.me/KarBerlin" target="_blank"&gt;https://paypal.me/KarBerlin&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;2) Amazon-Wunschliste&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB" target="_blank"&gt;&lt;img alt="Amazon" height="50px" src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Amazon_logo.svg/320px-Amazon_logo.svg.png"&gt;&lt;/a&gt;       &lt;br&gt;
&lt;a href="https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB"&gt;https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;3) Eine Empfehlung&lt;/h4&gt;
&lt;p&gt;via &lt;a href="https://www.linkedin.com/in/karsten-brusch-a11a782ab/" target="_blank"&gt;LinkedIn&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;4) Karma&lt;/h4&gt;
&lt;p&gt;oder ganz klassisch mit einem "Danke sehr" oder einem originellen &lt;a href="https://www.spreadshirt.de/shop/maenner/bekleidung/t-shirts/?size=4"&gt;T-Shirt&lt;/a&gt; (in Größe L).&lt;/p&gt;</content><category term="security"></category></entry><entry><title>bug bounty</title><link href="https://k11h.de/blog/bug-bounty-en.html" rel="alternate"></link><published>2021-12-31T23:59:00+01:00</published><updated>2021-12-31T23:59:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-12-31:/blog/bug-bounty-en.html</id><content type="html">&lt;h2&gt;motivation&lt;/h2&gt;
&lt;p&gt;I invest some of my spare time in security research and responsible disclosure.   &lt;br&gt;
Of course, I do not expect any compensation for this.    &lt;/p&gt;
&lt;p&gt;However, most website owners want to express their gratitude for reporting a vulnerability.&lt;/p&gt;
&lt;h2&gt;support my work&lt;/h2&gt;
&lt;p&gt;you can support my work in different ways:&lt;/p&gt;
&lt;h4&gt;1) a donation for&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;server costs / lab environment (ca. 50€/month)&lt;/li&gt;
&lt;li&gt;software licence (e.g. &lt;a href="https://portswigger.net/burp/pro"&gt;Burp Suite&lt;/a&gt;: 350€/year)&lt;/li&gt;
&lt;li&gt;a planned training and &lt;a href="https://www.eccouncil.org/programs/certified-ethical-hacker-ceh/"&gt;certification&lt;/a&gt; as ethical hacker (ca. 2500€)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://paypal.me/KarBerlin" target="_blank"&gt;&lt;img alt="PayPal" height="50px" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/PayPal.svg/124px-PayPal.svg.png"&gt;&lt;/a&gt;       &lt;br&gt;
&lt;a href="https://paypal.me/KarBerlin" target="_blank"&gt;https://paypal.me/KarBerlin&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;2) Amazon wishlist&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB" target="_blank"&gt;&lt;img alt="Amazon" height="50px" src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Amazon_logo.svg/320px-Amazon_logo.svg.png"&gt;&lt;/a&gt;       &lt;br&gt;
&lt;a href="https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB"&gt;https://www.amazon.de/hz/wishlist/ls/16BKUO7S8QAYB&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;3) kudos&lt;/h4&gt;
&lt;p&gt;via &lt;a href="https://www.linkedin.com/in/karsten-brusch-a11a782ab/" target="_blank"&gt;LinkedIn&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;4) karma&lt;/h4&gt;
&lt;p&gt;or simply by saying "thank you" or a funny &lt;a href="https://www.spreadshirt.de/shop/maenner/bekleidung/t-shirts/?size=4"&gt;t-shirt&lt;/a&gt; (in size L).&lt;/p&gt;</content><category term="security"></category></entry><entry><title>big vpn providers are owned by one company</title><link href="https://k11h.de/blog/vpn-providers.html" rel="alternate"></link><published>2021-11-29T20:15:00+01:00</published><updated>2021-11-29T20:15:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-11-29:/blog/vpn-providers.html</id><content type="html">&lt;h3&gt;vpn providers&lt;/h3&gt;
&lt;p&gt;according to a well-investigated article these four vpn providers are now owned by one company alongside with vpn review sites.&lt;/p&gt;
&lt;p&gt;make sure to read the original article before choosing a vpn service of trust:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExpressVPN&lt;/li&gt;
&lt;li&gt;CyberGhost&lt;/li&gt;
&lt;li&gt;Private Internet Access&lt;/li&gt;
&lt;li&gt;Zenmate&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;source&lt;/h4&gt;
&lt;p&gt;the referred article can be found &lt;a href="https://restoreprivacy.com/kape-technologies-owns-expressvpn-cyberghost-pia-zenmate-vpn-review-sites/" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="security"></category><category term="vpn"></category><category term="privacy"></category><category term="security"></category></entry><entry><title>zabbix http/s checks from yaml dict</title><link href="https://k11h.de/blog/zabbix-http-check-ansible.html" rel="alternate"></link><published>2021-04-11T14:12:00+02:00</published><updated>2021-04-11T14:12:00+02:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-04-11:/blog/zabbix-http-check-ansible.html</id><content type="html">&lt;h3&gt;motivation&lt;/h3&gt;
&lt;p&gt;to maintain the principle of configuration-as-code this tools helps to bulk create and update http/s checks from your zabbix server&lt;/p&gt;
&lt;p&gt;imagine you need to monitor many different http/s microservice endpoints    &lt;br&gt;
you can create them using the zabbix gui, or note them down in a simple yaml dict.
this automation uses ansible to utilize the zabbix api to create zabbix http/s checks with graphs and alert trigger&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;health_checks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://www.example.com/blog/&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://api.example.com/endpoint/search?query=token&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;check_searchstring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Results&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;token&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://api.example.com/long/running/api&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;check_timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;10s&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://api.example.com/special/returncode&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;check_returncode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;200,206&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://static.example.com/images/&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;source&lt;/h4&gt;
&lt;p&gt;the sources, documentation and examples are located &lt;a href="https://github.com/k11h-de/zabbix-http-ansible" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="devops"></category><category term="ansible"></category><category term="zabbix"></category><category term="gitlab"></category><category term="monitoring"></category></entry><entry><title>AWS Shared ALB by EC2 instance tag</title><link href="https://k11h.de/blog/shared-alb-by-tag.html" rel="alternate"></link><published>2021-02-15T08:00:00+01:00</published><updated>2021-02-15T08:00:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-02-15:/blog/shared-alb-by-tag.html</id><content type="html">&lt;h3&gt;motivation&lt;/h3&gt;
&lt;p&gt;in AWS setups, loadbalancers can be are quite cost-intensive.   &lt;br&gt;
If you are in a non-production environment, you probably do not need one LB for each (micro-)service.  &lt;br&gt;
This lambda function automatically adds ec2 instances to a targetgroup &amp;amp; adds a host-header-based rule to a single shared ALB&lt;/p&gt;
&lt;h4&gt;source&lt;/h4&gt;
&lt;p&gt;the sources, documentation and examples are located &lt;a href="https://github.com/k11h-de/aws-lambda/tree/main/shared-alb-by-tag" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="devops"></category><category term="aws"></category><category term="lambda"></category><category term="python"></category><category term="alb"></category><category term="automation"></category></entry><entry><title>Simple Jinja2 templating script</title><link href="https://k11h.de/blog/python-jinja2-templating.html" rel="alternate"></link><published>2021-01-14T08:12:00+01:00</published><updated>2021-01-14T08:12:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2021-01-14:/blog/python-jinja2-templating.html</id><content type="html">&lt;h3&gt;motivation&lt;/h3&gt;
&lt;p&gt;What I really love about Ansible is it's powerful templating capabilities. &lt;br&gt;
It all boils down to the jinja2 templating engine, so I wrote a small script for just that part.&lt;/p&gt;
&lt;p&gt;In this example I am using Jinja2 templating to generate a &lt;code&gt;.ssh/config&lt;/code&gt; file from a yaml dict&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/python3 &lt;/span&gt;

&lt;span class="c1"&gt;# run.py example/vars.yaml example/ssh_config.j2 [out.txt]&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;jinja2&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;yaml&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="c1"&gt;# load yaml vars file&lt;/span&gt;
&lt;span class="n"&gt;yaml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;safe_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;# load jinja2 template file&lt;/span&gt;
&lt;span class="n"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="c1"&gt;# if no out file was provided&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# print to stdout&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;# if outfile was provided&lt;/span&gt;
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# write result to output file&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;source&lt;/h4&gt;
&lt;p&gt;the sources, documentation and examples are located &lt;a href="https://github.com/k11h-de/jinja2-templating" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</content><category term="devops"></category><category term="python"></category><category term="jinja2"></category></entry><entry><title>Running Ansible inside Docker</title><link href="https://k11h.de/blog/ansible-in-docker.html" rel="alternate"></link><published>2020-12-22T08:12:00+01:00</published><updated>2020-12-22T08:12:00+01:00</updated><author><name>Karsten</name></author><id>tag:k11h.de,2020-12-22:/blog/ansible-in-docker.html</id><content type="html">&lt;h3&gt;why&lt;/h3&gt;
&lt;p&gt;Sometimes it is important to be independent from your local dev machines setup.  &lt;br&gt;
I wrote a small wrapper script to run ansible tasks inside a docker container.&lt;/p&gt;
&lt;h4&gt;wrapper&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;vault&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.ansible-vault-pass
&lt;span class="c1"&gt;# check if argument was supplied&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-eq&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;No arguments supplied; usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; &amp;#39;ansible-playbook playbook.yaml&amp;#39; # The QUOTES are important here! &amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$vault&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;docker&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-it&lt;span class="w"&gt; &lt;/span&gt;--rm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;/../:/data&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$vault&lt;/span&gt;:/root/.ansible-vault-pass&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ANSIBLE_VAULT_PASSWORD_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/root/.ansible-vault-pass&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;cytopia/ansible:latest&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$vault&lt;/span&gt;&lt;span class="s2"&gt; file does not exist.&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="devops"></category><category term="ansible"></category><category term="docker"></category><category term="bash"></category></entry></feed>