<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Karan Sharma - Today I Learned</title>
    <subtitle>Writing on infrastructure, Go, self-hosting and homelabs.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://mrkaran.dev/tils/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-03-18T00:00:00+00:00</updated>
    <id>https://mrkaran.dev/tils/atom.xml</id>
    <entry xml:lang="en">
        <title>Using slog for logging in Go</title>
        <published>2024-03-18T00:00:00+00:00</published>
        <updated>2024-03-18T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/using-slog/"/>
        <id>https://mrkaran.dev/tils/using-slog/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/using-slog/">&lt;h2 id=&quot;initialise-a-base-logger&quot;&gt;Initialise a base logger&lt;a class=&quot;zola-anchor&quot; href=&quot;#initialise-a-base-logger&quot; aria-label=&quot;Anchor link for: initialise-a-base-logger&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; InitLogger initialies a logger.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; InitLogger&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;lvl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Logger&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;	var&lt;/span&gt;&lt;span&gt; logLvl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;LevelVar&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;	if&lt;/span&gt;&lt;span&gt; lvl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		logLvl&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LevelDebug&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;	//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Replace internal attributes.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	replace&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; func&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;groups&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;string&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Attr&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Attr&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		if&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; ==&lt;/span&gt;&lt;span&gt; slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SourceKey&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;			if&lt;/span&gt;&lt;span&gt; source&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ok&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Any&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Source&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; ok&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;				//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Remove the function name from the source as it&amp;#39;s too noisy.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;				source&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		return&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;NewJSONHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Stderr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;HandlerOptions&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			AddSource&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;   true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			Level&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;       logLvl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			ReplaceAttr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; replace&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;WithAttrs&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Attr&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;String&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; version&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;String&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;environment&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; env&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;	return&lt;/span&gt;&lt;span&gt; slog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;New&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Logging SMTP connection timings</title>
        <published>2024-02-22T00:00:00+00:00</published>
        <updated>2024-02-22T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/debugging-smtp-time/"/>
        <id>https://mrkaran.dev/tils/debugging-smtp-time/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/debugging-smtp-time/">&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; smtplib&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; step&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;{&lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took &lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;{&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -&lt;/span&gt;&lt;span&gt; start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;:.2f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    smtp_server&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;faulty-smtp-host.com&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    smtp_port&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 25&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    total_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;    #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Connect to the SMTP server&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    connect_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; smtplib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SMTP&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;smtp_server&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; smtp_port&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    connect_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connect_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; connect_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Connection&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;    #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Send EHLO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ehlo_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ehlo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ehlo_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ehlo_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ehlo_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;EHLO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;    #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Send STARTTLS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    starttls_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;starttls&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    starttls_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;starttls_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; starttls_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;STARTTLS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;    #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Re-send EHLO after STARTTLS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ehlo2_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ehlo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ehlo2_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ehlo2_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ehlo2_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;EHLO after STARTTLS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;    #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Quit the session&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    quit_start&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;quit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    quit_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;quit_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; quit_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;QUIT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    total_end&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    print_time_taken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;total_start&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; total_end&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Total execution&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;__main__&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Produces an output like:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Connection&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 20.09&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;EHLO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0.01&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;STARTTLS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0.04&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;EHLO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; after&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; STARTTLS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0.01&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;QUIT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0.01&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Total&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; execution&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; took&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 20.15&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; seconds.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Golang: The Loop Variable Trap</title>
        <published>2023-09-20T00:00:00+00:00</published>
        <updated>2023-09-20T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/go-loop-var/"/>
        <id>https://mrkaran.dev/tils/go-loop-var/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/go-loop-var/">&lt;p&gt;In Go, one of the most popular features is the ability to easily create lightweight concurrent threads using goroutines. While goroutines make concurrent programming simpler, they come with their own set of quirks that can be a source of subtle bugs if not understood well.&lt;/p&gt;
&lt;h2 id=&quot;the-issue&quot;&gt;The Issue&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-issue&quot; aria-label=&quot;Anchor link for: the-issue&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you launch a goroutine inside a loop, and the goroutine function references the loop variable, you might encounter unexpected behavior. Instead of each goroutine using its respective loop iteration value, they might all end up using the last value of the loop variable.&lt;/p&gt;
&lt;p&gt;Here’s a simple demonstration:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;values&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;string&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;for&lt;/span&gt;&lt;span&gt; _&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; range&lt;/span&gt;&lt;span&gt; values&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; func&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You might expect this to print (the order of the goroutines’ execution is not guaranteed, but you’ll still see 3 different values):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But instead you will see this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;the-reason&quot;&gt;The Reason&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-reason&quot; aria-label=&quot;Anchor link for: the-reason&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The loop variable &lt;code&gt;v&lt;/code&gt; is shared among all goroutines. Since the goroutines don’t execute immediately and are scheduled to run, by the time they start executing, the loop might have already completed its iterations, leaving &lt;code&gt;v&lt;/code&gt; with its last value, “c”.&lt;/p&gt;
&lt;p&gt;Here’s a step-by-step of what happens:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Loop iteration starts with &lt;code&gt;v = &quot;a&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A goroutine is launched which references &lt;code&gt;v&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Before the goroutine has a chance to execute, the loop moves to the next iteration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v&lt;/code&gt; now takes the value “b”.&lt;/li&gt;
&lt;li&gt;Another goroutine is launched, also referencing &lt;code&gt;v&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Again, before this new goroutine has a chance to execute, the loop moves to the next iteration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v&lt;/code&gt; now takes the value “c”.&lt;/li&gt;
&lt;li&gt;A third goroutine is launched, also referencing &lt;code&gt;v&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At this point, depending on the scheduler and system, one or more of the goroutines might start executing. But all of them see &lt;code&gt;v&lt;/code&gt; as “c” since they all reference the same memory location (the address of &lt;code&gt;v&lt;/code&gt;), which by now has been set to “c” by the loop in the main goroutine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, when each of these goroutines tries to read the value of &lt;code&gt;v&lt;/code&gt;, they all see “c”, hence printing “c” three times.&lt;/p&gt;
&lt;h2 id=&quot;the-solution&quot;&gt;The Solution&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-solution&quot; aria-label=&quot;Anchor link for: the-solution&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To ensure each goroutine receives the correct value from the loop iteration, pass the loop variable as an argument to the goroutine’s function:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;values&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;string&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;for&lt;/span&gt;&lt;span&gt; _&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; range&lt;/span&gt;&lt;span&gt; values&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; func&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;val&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; passing the loop variable as an argument&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By passing the value of &lt;code&gt;v&lt;/code&gt; as an argument to the anonymous function, you effectively make a copy of the value for each iteration of the loop, so each goroutine will see the value of &lt;code&gt;v&lt;/code&gt; that was present at the time it was launched.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When working with goroutines inside loops, always be wary of capturing the loop variable directly. Passing it as an argument can help avoid this subtle trap and ensure your concurrent code behaves as intended.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Resolving UUID Conflicts when Mounting AWS EBS Volumes</title>
        <published>2023-08-31T00:00:00+00:00</published>
        <updated>2023-08-31T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/mount-snapshot-aws/"/>
        <id>https://mrkaran.dev/tils/mount-snapshot-aws/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/mount-snapshot-aws/">&lt;p&gt;Today I Learned (TIL) about an interesting issue that can occur when mounting Amazon EBS volumes created from snapshots. The problem arises from UUID conflicts which can prevent the mounting process.&lt;/p&gt;
&lt;p&gt;When you create an EBS volume from a snapshot, the new volume inherits the UUID of the original filesystem. If the original volume is still mounted on the same instance, this can cause a UUID conflict when you try to mount the new volume.&lt;/p&gt;
&lt;p&gt;Let’s say you’re trying to mount a volume with XFS filesystem:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; xfs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /dev/nvme2n1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /backup-check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And you encounter an error like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;mount:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /backup-check:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; wrong&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; fs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; type,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; bad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; option,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; bad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; superblock&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; on&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /dev/nvme2n1,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; missing&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; codepage&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; helper&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; program,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; other&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; error.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The issue might be due to a UUID conflict. To resolve this, you can use the &lt;code&gt;-o nouuid&lt;/code&gt; option when mounting the volume:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; xfs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; nouuid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /dev/nvme2n1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /backup-check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;-o nouuid&lt;/code&gt; option tells the mount command to ignore the UUID of the filesystem. This allows the volume to be mounted even if another volume with the same UUID is already mounted.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;check-uuid&quot;&gt;Check UUID&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-uuid&quot; aria-label=&quot;Anchor link for: check-uuid&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can check the UUID of a filesystem using the &lt;code&gt;blkid&lt;/code&gt; command:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; blkid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /dev/nvme2n1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command will output something like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;/dev/nvme2n1:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; UUID=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1234abcd-12ab-34cd-56ef-123456abcdef&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; TYPE=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;xfs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can compare the UUIDs of your volumes to see if there’s a conflict.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Clean Up Outdated Local Git Branches</title>
        <published>2023-08-16T00:00:00+00:00</published>
        <updated>2023-08-16T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/gitlab-git-delete-local/"/>
        <id>https://mrkaran.dev/tils/gitlab-git-delete-local/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/gitlab-git-delete-local/">&lt;p&gt;To delete local branches that don’t exist in the upstream repository anymore, you can follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ensure you’re up-to-date&lt;/strong&gt;:
First, fetch the latest changes from the upstream:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-prune&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;--prune&lt;/code&gt; option will remove any remote-tracking references that no longer exist on the remote. This will help you ensure that you know which branches are truly gone from the upstream.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;List merged branches&lt;/strong&gt;:
You can see which branches are already merged into your current branch with:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-merged&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will show you a list of branches that are safe to delete because their changes are already included in the current branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delete merged branches&lt;/strong&gt;:
If you’re sure that the branches listed in step 2 are no longer needed (and you’ve checked that they don’t contain any unique work), you can delete them.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-merged&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; egrep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;(^\*|master|main)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;egrep -v &quot;(^\*|master|main)&quot;&lt;/code&gt; part of this command ensures that you don’t try to delete the currently checked out branch (&lt;code&gt;*&lt;/code&gt;) or typically important branches like &lt;code&gt;master&lt;/code&gt; or &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;xargs git branch -d&lt;/code&gt; part of the command will attempt to delete each branch that’s passed to it. The &lt;code&gt;-d&lt;/code&gt; flag ensures that Git will only delete the branch if it’s been merged. If you’re absolutely sure you want to force deletion, you can use the &lt;code&gt;-D&lt;/code&gt; flag instead, but be careful with it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optional&lt;/strong&gt;:
To verify that you’ve successfully deleted the old local branches, you can list all your local branches with:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By following these steps, you’ll clean up your local branches, removing the ones that don’t exist in the upstream repository anymore. Always be cautious when deleting branches to ensure you don’t lose any important work.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Docker CLI Snippets</title>
        <published>2023-02-02T00:00:00+00:00</published>
        <updated>2023-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/docker-cli/"/>
        <id>https://mrkaran.dev/tils/docker-cli/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/docker-cli/">&lt;h2 id=&quot;remove-images-locally-with-a-wildcard&quot;&gt;Remove images locally with a wildcard:&lt;a class=&quot;zola-anchor&quot; href=&quot;#remove-images-locally-with-a-wildcard&quot; aria-label=&quot;Anchor link for: remove-images-locally-with-a-wildcard&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; rmi&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-force&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; images&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;image-nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; tr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; `&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;remove-images-using-xargs&quot;&gt;Remove images using xargs&lt;a class=&quot;zola-anchor&quot; href=&quot;#remove-images-using-xargs&quot; aria-label=&quot;Anchor link for: remove-images-using-xargs&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wanted to remove all containers that had the word &lt;code&gt;outline&lt;/code&gt; in their name. I used the following command:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ps&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; outline&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{print $1}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;dockerhub-rate-limits&quot;&gt;Dockerhub Rate Limits&lt;a class=&quot;zola-anchor&quot; href=&quot;#dockerhub-rate-limits&quot; aria-label=&quot;Anchor link for: dockerhub-rate-limits&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;https://auth.docker.io/token?service=registry.docker.io&amp;amp;scope=repository:ratelimitpreview/test:pull&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-raw-output&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .token&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-head&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-header&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ratelimit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;docker-disk-usage&quot;&gt;Docker Disk Usage&lt;a class=&quot;zola-anchor&quot; href=&quot;#docker-disk-usage&quot; aria-label=&quot;Anchor link for: docker-disk-usage&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; df&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-verbose&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;stop-all-containers&quot;&gt;Stop all containers&lt;a class=&quot;zola-anchor&quot; href=&quot;#stop-all-containers&quot; aria-label=&quot;Anchor link for: stop-all-containers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; stop&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ps&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;q&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful Terraform Snippets for AWS</title>
        <published>2022-10-11T00:00:00+00:00</published>
        <updated>2022-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/terraform-snippets/"/>
        <id>https://mrkaran.dev/tils/terraform-snippets/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/terraform-snippets/">&lt;h2 id=&quot;get-the-list-of-aws-api-actions-required-to-run-terraform&quot;&gt;Get the list of AWS API actions required to run &lt;code&gt;terraform&lt;/code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-the-list-of-aws-api-actions-required-to-run-terraform&quot; aria-label=&quot;Anchor link for: get-the-list-of-aws-api-actions-required-to-run-terraform&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Terraform uses AWS APIs to modify infrastructure. To find out a set of minimal IAM policies required for &lt;code&gt;tf apply&lt;/code&gt; to run, we can follow &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/a/60542958&quot;&gt;this approach&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give full permissions to your IAM user.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;TF_LOG=trace terraform apply --auto-approve &amp;amp;&amp;gt; log.log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;cat log.log | grep &quot;DEBUG: Request&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sometimes, the error message isn’t clear by Terraform Provider.  In that case, the following command helps:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;HTTP/1.1 403&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; log.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-all-resources-in-a-state&quot;&gt;Delete all resources in a state&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-all-resources-in-a-state&quot; aria-label=&quot;Anchor link for: delete-all-resources-in-a-state&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;terraform&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; terraform&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; rm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Golang Gotchas</title>
        <published>2022-09-24T00:00:00+00:00</published>
        <updated>2022-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-gotchas/"/>
        <id>https://mrkaran.dev/tils/golang-gotchas/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-gotchas/">&lt;h2 id=&quot;http-responses&quot;&gt;HTTP Responses&lt;a class=&quot;zola-anchor&quot; href=&quot;#http-responses&quot; aria-label=&quot;Anchor link for: http-responses&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’ve a &lt;code&gt;http.ResponseWriter&lt;/code&gt; object and using it to directly write the response to the connection, the order in which you write different parts of response is &lt;strong&gt;very important&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; First write headers.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Header&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Content-Type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;text/plain; version=0.0.4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Then set the status code. And yes, this is the function name for setting status code!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;WriteHeader&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusOK&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Then finally write the response body.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;byte&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;hello world&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&quot;admonition note&quot;&gt;
    &lt;strong class=&quot;admonition-header&quot;&gt;NOTE&lt;/strong&gt;
    &lt;p&gt;&lt;ul&gt;
&lt;li&gt;Headers should be written first. If any extra header is set after calling &lt;code&gt;WriteHeader&lt;/code&gt; it’s a no-op.&lt;/li&gt;
&lt;li&gt;Body should be after &lt;code&gt;WriteHeader&lt;/code&gt;. Else it’s a no-op.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Working with cloud-init in AWS</title>
        <published>2022-09-21T00:00:00+00:00</published>
        <updated>2022-09-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/aws-cloud-init/"/>
        <id>https://mrkaran.dev/tils/aws-cloud-init/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/aws-cloud-init/">&lt;h2 id=&quot;run-the-script-manually&quot;&gt;Run the script manually&lt;a class=&quot;zola-anchor&quot; href=&quot;#run-the-script-manually&quot; aria-label=&quot;Anchor link for: run-the-script-manually&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /var/lib/cloud/instance/scripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ./part-001&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;to-view-logs&quot;&gt;To view logs&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-view-logs&quot; aria-label=&quot;Anchor link for: to-view-logs&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo journalctl -u cloud-final -b&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;to-output-logs-to-a-different-file&quot;&gt;To output logs to a different file&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-output-logs-to-a-different-file&quot; aria-label=&quot;Anchor link for: to-output-logs-to-a-different-file&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set -Eeuo pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exec &amp;gt; &amp;gt;(tee /var/log/user-data.log|logger -t user-data -s 2&amp;gt;/dev/console) 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Logs will be available on &lt;code&gt;/var/log/user-data.log&lt;/code&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Bash Scripting Templates: From Basic to Advanced</title>
        <published>2022-09-21T00:00:00+00:00</published>
        <updated>2022-09-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-shellscript-template/"/>
        <id>https://mrkaran.dev/tils/shell-shellscript-template/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-shellscript-template/">&lt;h2 id=&quot;preferred-version&quot;&gt;Preferred Version&lt;a class=&quot;zola-anchor&quot; href=&quot;#preferred-version&quot; aria-label=&quot;Anchor link for: preferred-version&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I use the following template to quickstart any new shell script.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;Eeuo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;readonly&lt;/span&gt;&lt;span&gt; SCRIPT_DIR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{BASH_SOURCE[0]}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; pwd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;readonly&lt;/span&gt;&lt;span&gt; SCRIPT_NAME&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; log&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; level&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; message&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; timestamp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;%Y-%m-%d %H:%M:%S&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  &amp;gt;&amp;amp;2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{timestamp} [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{level}] [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{SCRIPT_NAME}] &lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{message}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; log_info&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; message&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;INFO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{message}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; log_warn&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; message&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;WARN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{message}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; log_error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; readonly&lt;/span&gt;&lt;span&gt; message&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ERROR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{message}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;elaborate-version&quot;&gt;Elaborate Version&lt;a class=&quot;zola-anchor&quot; href=&quot;#elaborate-version&quot; aria-label=&quot;Anchor link for: elaborate-version&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ref: https://betterdev.blog/minimal-safe-bash-script-template/&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;Eeuo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;trap&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; cleanup&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; SIGINT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; SIGTERM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ERR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; EXIT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;script_dir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;BASH_SOURCE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; pwd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;P&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;usage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #ADBAC7);&quot;&gt; EOF&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; remove the space between &amp;lt;&amp;lt; and EOF, this is due to web plugin issue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Usage: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;BASH_SOURCE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; [-h] [-v] [-f] -p param_value arg1 [arg2...]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Script description here.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Available options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-h, --help      Print this help and exit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-v, --verbose   Print script debug info&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-f, --flag      Some flag description&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-p, --param     Some param description&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #ADBAC7);&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  exit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;cleanup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  trap&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; SIGINT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; SIGTERM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ERR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; EXIT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; script cleanup here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;setup_colors&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -z&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;NO_COLOR-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;TERM-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;dumb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    NOFORMAT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; RED&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;31m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; GREEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;32m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; ORANGE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;33m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; BLUE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;34m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; PURPLE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;35m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; CYAN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[0;36m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; YELLOW&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;\033[1;33m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    NOFORMAT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; RED&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; GREEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; ORANGE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; BLUE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; PURPLE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; CYAN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; YELLOW&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;msg&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;die&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  local&lt;/span&gt;&lt;span&gt; code&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;2&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; default exit status 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  exit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;parse_params&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; default values of variables set from params&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  flag&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  param&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; :&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; usage&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;x&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span&gt; NO_COLOR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span&gt; flag&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; example flag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; example named parameter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;      p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;      ;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; die&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Unknown option: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    *)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; break&lt;/span&gt;&lt;span&gt; ;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    esac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    shift&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  args&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; check required params and arguments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  [&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -z&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;param-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; die&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Missing required parameter: param&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  [&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;#&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;@&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -eq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; die&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Missing script arguments&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;parse_params&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;setup_colors&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; script logic here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;RED&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Read parameters:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;NOFORMAT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;- flag: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;flag&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;- param: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;- arguments: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;]&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful ClickHouse Query Snippets</title>
        <published>2022-09-13T00:00:00+00:00</published>
        <updated>2022-09-13T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/clickhouse-query-snippets/"/>
        <id>https://mrkaran.dev/tils/clickhouse-query-snippets/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/clickhouse-query-snippets/">&lt;h2 id=&quot;check-table-size&quot;&gt;Check Table Size&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-table-size&quot; aria-label=&quot;Anchor link for: check-table-size&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    concat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;database&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;table&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; table&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    formatReadableSize(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bytes)) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; size&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;rows&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; rows&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    max&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;modification_time) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; latest_modification,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bytes) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; bytes_size,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    any(engine) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; engine,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    formatReadableSize(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;primary_key_bytes_in_memory)) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; primary_keys_size&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; system&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;parts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;WHERE&lt;/span&gt;&lt;span&gt; active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;GROUP BY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    database&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    table&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ORDER BY&lt;/span&gt;&lt;span&gt; bytes_size &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;access-management&quot;&gt;Access Management&lt;a class=&quot;zola-anchor&quot; href=&quot;#access-management&quot; aria-label=&quot;Anchor link for: access-management&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;CREATE&lt;/span&gt;&lt;span&gt; USER&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW ACCESS&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;listing&quot;&gt;Listing&lt;a class=&quot;zola-anchor&quot; href=&quot;#listing&quot; aria-label=&quot;Anchor link for: listing&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW TABLES&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; TABLE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW DATABASES&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;show-mutations&quot;&gt;Show Mutations&lt;a class=&quot;zola-anchor&quot; href=&quot;#show-mutations&quot; aria-label=&quot;Anchor link for: show-mutations&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;pending&quot;&gt;Pending&lt;a class=&quot;zola-anchor&quot; href=&quot;#pending&quot; aria-label=&quot;Anchor link for: pending&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; system&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;mutations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;WHERE&lt;/span&gt;&lt;span&gt; is_done &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;cardinality&quot;&gt;Cardinality&lt;a class=&quot;zola-anchor&quot; href=&quot;#cardinality&quot; aria-label=&quot;Anchor link for: cardinality&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    formatReadableQuantity(uniq(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;URL&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; cardinality_URL,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    formatReadableQuantity(uniq(UserID)) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; cardinality_UserID&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        user_id &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; UserID,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        http_uri &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; URL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    FROM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; logs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;http&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful Git commands</title>
        <published>2022-09-02T00:00:00+00:00</published>
        <updated>2022-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-git/"/>
        <id>https://mrkaran.dev/tils/linux-git/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-git/">&lt;h2 id=&quot;set-the-editor&quot;&gt;Set the editor&lt;a class=&quot;zola-anchor&quot; href=&quot;#set-the-editor&quot; aria-label=&quot;Anchor link for: set-the-editor&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-global&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; core.editor&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;vim&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-all-local-branches&quot;&gt;Delete all local branches&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-all-local-branches&quot; aria-label=&quot;Anchor link for: delete-all-local-branches&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-merged&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-all-branches-except-a-few&quot;&gt;Delete all branches except a few&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-all-branches-except-a-few&quot; aria-label=&quot;Anchor link for: delete-all-branches-except-a-few&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;develop&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;master&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-a-remote-branch&quot;&gt;Delete a remote branch&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-a-remote-branch&quot; aria-label=&quot;Anchor link for: delete-a-remote-branch&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; :develop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;force-merge-a-branch&quot;&gt;Force merge a branch&lt;a class=&quot;zola-anchor&quot; href=&quot;#force-merge-a-branch&quot; aria-label=&quot;Anchor link for: force-merge-a-branch&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you have too many conflicts while merging branch &lt;code&gt;feature&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;, use &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/a/2862938/709452&quot;&gt;this&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; feature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; merge&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ours&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; feature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; merge&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; feature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; main&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Extracting Artifacts from Docker with Buildx</title>
        <published>2022-08-08T00:00:00+00:00</published>
        <updated>2022-08-08T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/docker-custom-build-output/"/>
        <id>https://mrkaran.dev/tils/docker-custom-build-output/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/docker-custom-build-output/">&lt;p&gt;I needed to build some binaries &lt;em&gt;inside&lt;/em&gt; &lt;code&gt;Dockerfile&lt;/code&gt; and copy the artifacts built inside the image to the host machine.&lt;/p&gt;
&lt;p&gt;After some digging in, found &lt;code&gt;buildx&lt;/code&gt; supports &lt;a rel=&quot;external&quot; href=&quot;https://docs.docker.com/engine/reference/commandline/build/#custom-build-outputs&quot;&gt;Custom Build Outputs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here’s an example workflow on how to achieve the same:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;docker&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;span&gt; ubuntu:22.04 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; base&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;RUN&lt;/span&gt;&lt;span&gt; mkdir -p /data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;RUN&lt;/span&gt;&lt;span&gt; touch /data/hello.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Export the data to host using buildx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;span&gt; scratch &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AS&lt;/span&gt;&lt;span&gt; export&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;COPY&lt;/span&gt;&lt;span&gt; --from=base /data .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; buildx&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; build&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-file&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Dockerfile&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-output&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After the above command builds the image, you can see &lt;code&gt;./data&lt;/code&gt; got created in our host machine.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Dockerfile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    └──&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; hello.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/questions/33377022/how-to-copy-files-from-dockerfile-to-host&quot;&gt;Ref&lt;/a&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>AWS CLI Snippets</title>
        <published>2022-08-05T00:00:00+00:00</published>
        <updated>2022-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/aws-cli/"/>
        <id>https://mrkaran.dev/tils/aws-cli/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/aws-cli/">&lt;h2 id=&quot;fetch-a-list-of-running-instances&quot;&gt;Fetch a list of &lt;code&gt;running&lt;/code&gt; instances&lt;a class=&quot;zola-anchor&quot; href=&quot;#fetch-a-list-of-running-instances&quot; aria-label=&quot;Anchor link for: fetch-a-list-of-running-instances&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;aws&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ec2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; describe-instances&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-output&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.Reservations[].Instances[] | select(.State.Name == &amp;quot;running&amp;quot;) | { instance_id: .InstanceId, instance_type: .InstanceType, private_ip: .PrivateIpAddress, name: .Tags[]|select(.Key==&amp;quot;Name&amp;quot;)|.Value, env: .Tags[]|select(.Key==&amp;quot;env&amp;quot;)|.Value, role: .Tags[]|select(.Key==&amp;quot;role&amp;quot;)|.Value } | [.instance_id,.name,.instance_type,.private_ip,.env,.role] | @csv &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Selects only running instances&lt;/li&gt;
&lt;li&gt;Add tags to the metadata.&lt;/li&gt;
&lt;li&gt;Outputs to CSV.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;size-of-s3-bucket&quot;&gt;Size of S3 Bucket&lt;a class=&quot;zola-anchor&quot; href=&quot;#size-of-s3-bucket&quot; aria-label=&quot;Anchor link for: size-of-s3-bucket&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;aws&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s3://{{BUCKET_NAME}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-recursive&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;(Bucket: |Prefix: |LastWriteTime|^$|--)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;BEGIN {total=0}{total+=$3}END{print total/1024/1024&amp;quot; MB&amp;quot;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;format-list-output&quot;&gt;Format List Output&lt;a class=&quot;zola-anchor&quot; href=&quot;#format-list-output&quot; aria-label=&quot;Anchor link for: format-list-output&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;aws&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s3://mybucket&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-recursive&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-human-readable&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-summarize&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;network-usage-of-ec2-instance&quot;&gt;Network usage of EC2 Instance&lt;a class=&quot;zola-anchor&quot; href=&quot;#network-usage-of-ec2-instance&quot; aria-label=&quot;Anchor link for: network-usage-of-ec2-instance&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Find out the total Network Out (in GBs) of an EC2 instance for a given time period&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; aws&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; cloudwatch&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; get-metric-statistics&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-metric-name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; NetworkOut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-start-time&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 2022-07-01T00:00:00.000Z&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-end-time&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 2022-08-01T00:00:00.000Z&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-period&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 86400&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-namespace&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; AWS/EC2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-statistics&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Sum&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-dimensions&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Name=InstanceId,Value=i-instance-id-xxx&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-region&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ap-south-1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-output&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; text&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Using the Nomad API to Manage Allocations</title>
        <published>2022-07-26T00:00:00+00:00</published>
        <updated>2022-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/nomad-api/"/>
        <id>https://mrkaran.dev/tils/nomad-api/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/nomad-api/">&lt;h2 id=&quot;list-allocations&quot;&gt;List allocations&lt;a class=&quot;zola-anchor&quot; href=&quot;#list-allocations&quot; aria-label=&quot;Anchor link for: list-allocations&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;vvvv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; http://localhost:4646/v1/allocations&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\?&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;filter&quot;&gt;Filter&lt;a class=&quot;zola-anchor&quot; href=&quot;#filter&quot; aria-label=&quot;Anchor link for: filter&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;By using &lt;code&gt;--filter&lt;/code&gt; param, we can restrict the list of allocations with specific filter queries.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;vvvv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; http://localhost:4646/v1/allocations&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\?&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-data-urlencode&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;filter=NodeID == &amp;quot;a7542cd4-491d-26c8-64d4-db4db979f61b&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Working with the Linux Filesystem</title>
        <published>2022-07-11T00:00:00+00:00</published>
        <updated>2022-07-11T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-filesystem/"/>
        <id>https://mrkaran.dev/tils/linux-filesystem/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-filesystem/">&lt;h2 id=&quot;check-disk-size-of-a-directory&quot;&gt;Check disk size of a directory&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-disk-size-of-a-directory&quot; aria-label=&quot;Anchor link for: check-disk-size-of-a-directory&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;du&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /var/log/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;list-files-with-modification-timestamp&quot;&gt;List files with modification timestamp&lt;a class=&quot;zola-anchor&quot; href=&quot;#list-files-with-modification-timestamp&quot; aria-label=&quot;Anchor link for: list-files-with-modification-timestamp&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;laht&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To see the files with the &lt;em&gt;oldest&lt;/em&gt; file modification timestamp, use &lt;code&gt;-r&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;lahtr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Nomad Template Snippets</title>
        <published>2022-07-08T00:00:00+00:00</published>
        <updated>2022-07-08T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/nomad-template-snippets/"/>
        <id>https://mrkaran.dev/tils/nomad-template-snippets/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/nomad-template-snippets/">&lt;h1 id=&quot;service-list&quot;&gt;Service List&lt;a class=&quot;zola-anchor&quot; href=&quot;#service-list&quot; aria-label=&quot;Anchor link for: service-list&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;I needed to fetch a list of upstream services from Nomad’s service registry and render in a &lt;code&gt;.toml&lt;/code&gt; file like this. This is essentially a comma separated list of services&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;servers&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1.1.1.1:53&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;8.8.8.8:53&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Figuring this out with Go template took some time.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;servers&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; range&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; nomadService&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;my-app-svc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;if&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{.Address}}:{{.Port}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;-&lt;/span&gt;&lt;span&gt; end&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Testing Open File Descriptors Limit in Golang</title>
        <published>2022-07-01T00:00:00+00:00</published>
        <updated>2022-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-open-file-descriptors/"/>
        <id>https://mrkaran.dev/tils/golang-open-file-descriptors/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-open-file-descriptors/">&lt;p&gt;I wanted a quick way to test if &lt;code&gt;ulimit -n&lt;/code&gt; (max number of open files per process) works or not.&lt;/p&gt;
&lt;p&gt;This Go snippet creates &lt;code&gt;n&lt;/code&gt;  files and opens them. It prints the underlyng File Descriptor ID but doesn’t close the file handle. This way we can test the max number of open files this Go program can ever create:&lt;/p&gt;
&lt;h3 id=&quot;running&quot;&gt;Running&lt;a class=&quot;zola-anchor&quot; href=&quot;#running&quot; aria-label=&quot;Anchor link for: running&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;fmt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;var&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	FILES_TO_OPEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 99999&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;writing&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;	for&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt; FILES_TO_OPEN&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		fdF&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Sprintf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/tmp/fd_go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		if&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;			panic&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		_&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; fdF&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;byte&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		if&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;			panic&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		fdF&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Close&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;opening&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;	for&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt; FILES_TO_OPEN&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		fdF&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Sprintf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/tmp/fd_go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;		if&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;			panic&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fdF&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Fd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;exceeding-the-limit&quot;&gt;Exceeding the Limit&lt;a class=&quot;zola-anchor&quot; href=&quot;#exceeding-the-limit&quot; aria-label=&quot;Anchor link for: exceeding-the-limit&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you exceed the limit, it’ll give an error like:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1018&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1019&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1020&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1021&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;1023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;panic:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /tmp/fd_go1018.txt:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; too&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; many&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;goroutine&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt; [running&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;main.main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;	/home/karan/Code/Infra/fd-test/main.go:29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +0x286&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In my host &lt;code&gt;ulimit -n&lt;/code&gt; was set to &lt;code&gt;1024&lt;/code&gt;, so it failed to create more files than that.&lt;/p&gt;
&lt;h3 id=&quot;python-version&quot;&gt;Python Version&lt;a class=&quot;zola-anchor&quot; href=&quot;#python-version&quot; aria-label=&quot;Anchor link for: python-version&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;See [[Python/Open File Descriptors]]&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Handling Open File Descriptors Limit in Python</title>
        <published>2022-07-01T00:00:00+00:00</published>
        <updated>2022-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/python-open-file-descriptors/"/>
        <id>https://mrkaran.dev/tils/python-open-file-descriptors/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/python-open-file-descriptors/">&lt;p&gt;See &lt;a href=&quot;/tils/golang-open-file-descriptors&quot;&gt;Golang/Open File Descriptors&lt;/a&gt; version for context.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;FD_TEST_&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; %&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; for&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1025&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;OSError&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;Errno&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 24&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Too&lt;/span&gt;&lt;span&gt; many&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; open&lt;/span&gt;&lt;span&gt; files&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;FD_TEST_1021.txt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Identify the EBS Volume ID on an AWS EC2 Instance</title>
        <published>2022-06-27T00:00:00+00:00</published>
        <updated>2022-06-27T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/aws-view-the-volume-id-in-instance/"/>
        <id>https://mrkaran.dev/tils/aws-view-the-volume-id-in-instance/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/aws-view-the-volume-id-in-instance/">&lt;p&gt;When managing EC2 instances with multiple EBS volumes, especially if they have similar sizes, it can be challenging to identify each one by its volume ID.&lt;/p&gt;
&lt;p&gt;There’s a handy command for this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;lsblk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +SERIAL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command will display the EBS Volume ID for all attached volumes. It’s especially useful when you need to modify or resize a specific volume without any mix-ups.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Understanding AWS EC2 Pricing: A Quick Reference Guide</title>
        <published>2022-06-23T00:00:00+00:00</published>
        <updated>2022-06-23T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/aws-ec2-pricing/"/>
        <id>https://mrkaran.dev/tils/aws-ec2-pricing/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/aws-ec2-pricing/">&lt;p&gt;For a swift lookup of EC2 instances, their pricing, and alternative instance types, I highly recommend &lt;a rel=&quot;external&quot; href=&quot;https://ec2instances.github.io/&quot;&gt;ec2instances.github.io&lt;/a&gt;. It’s a comprehensive, user-friendly list and an indispensable tool for cloud professionals.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Controlling Screen Brightness in Linux</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-control-brightness/"/>
        <id>https://mrkaran.dev/tils/linux-control-brightness/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-control-brightness/">&lt;h2 id=&quot;get-a-list-of-devices-connected&quot;&gt;Get a list of devices connected&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-a-list-of-devices-connected&quot; aria-label=&quot;Anchor link for: get-a-list-of-devices-connected&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;xrandr | grep &amp;quot; connected&amp;quot; | cut -f1 -d &amp;quot; &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;tweak-the-brightness-value&quot;&gt;Tweak the brightness value&lt;a class=&quot;zola-anchor&quot; href=&quot;#tweak-the-brightness-value&quot; aria-label=&quot;Anchor link for: tweak-the-brightness-value&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;xrandr --output eDP-1 --brightness 0.7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating a MacOS-Like Screenshot Effect in Linux</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-create-a-macos-like-screenshot-effect/"/>
        <id>https://mrkaran.dev/tils/linux-create-a-macos-like-screenshot-effect/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-create-a-macos-like-screenshot-effect/">&lt;p&gt;One thing which I miss from my OSX (now called macOS) days is it’s ability to create “pretty” screenshots out of the box. OSX screenshots have a nice drop-shadow effect and it centers the image with a faux border.&lt;/p&gt;
&lt;p&gt;Not exactly same, but quite close is this &lt;code&gt;imagemagick&lt;/code&gt; command to achieve the same on Linux systems:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;convert&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; screenshot.png&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +clone&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;shadow&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 50x50+30+30&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +swap&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; white&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;layers&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; merge&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +repage&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; result.png&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Source: &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/a/60681983&quot;&gt;StackOverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pretty happy with the result!&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Converting UTC to Local Time in Python</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/python-utc-to-local-time/"/>
        <id>https://mrkaran.dev/tils/python-utc-to-local-time/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/python-utc-to-local-time/">&lt;p&gt;Often I’ve felt the need to convert UTC time to IST but a quick google search reveals some shitty websites which makes such a seemingly simple task irritating and difficult. I tried to search for any small scripts or tools but thought I can whip one up real quick in Python and use it locally for myself.&lt;/p&gt;
&lt;p&gt;Here’s the script I wrote, you can customise according to your needs if you wish to:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; argparse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;from&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;from&lt;/span&gt;&lt;span&gt; sys&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; import&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; exit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;from&lt;/span&gt;&lt;span&gt; dateutil&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parser&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; import&lt;/span&gt;&lt;span&gt; parse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; datetime_from_utc_to_local&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;utc_datetime&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    now&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    offset&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromtimestamp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; -&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;utcfromtimestamp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    return&lt;/span&gt;&lt;span&gt; utc_datetime&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; +&lt;/span&gt;&lt;span&gt; offset&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;parser&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; argparse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ArgumentParser&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Convert UTC time to Local time.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_argument&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;--timestamp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; required&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; help&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;timestamp of UTC string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;args&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse_args&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    utc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;except&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; as&lt;/span&gt;&lt;span&gt; e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;    exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;res&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; datetime_from_utc_to_local&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;utc&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;strftime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;%H:%M:%S&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;usage&quot;&gt;Usage&lt;a class=&quot;zola-anchor&quot; href=&quot;#usage&quot; aria-label=&quot;Anchor link for: usage&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;python utc-ist.py --timestamp 03:00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python utc-ist.py --timestamp 03:00:10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python utc-ist.py --timestamp 03:00:15.100&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It takes a &lt;code&gt;--timestamp&lt;/code&gt; parameter which should be a string depicting the UTC time format.&lt;/p&gt;
&lt;h3 id=&quot;alias&quot;&gt;Alias&lt;a class=&quot;zola-anchor&quot; href=&quot;#alias&quot; aria-label=&quot;Anchor link for: alias&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ist:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; aliased&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; python&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /home/karan/Code/Infra/utc-ist/utc-ist.py&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-timestamp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ist&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 3:45&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;09:15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Generating Random Strings in Shell Scripts</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-generate-random-string/"/>
        <id>https://mrkaran.dev/tils/shell-generate-random-string/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-generate-random-string/">&lt;p&gt;Generating random strings in Shell can be useful in various scenarios such as creating random passwords, unique identifiers, and more. Here are a couple of methods you can use:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;tr&lt;/code&gt; and &lt;code&gt;/dev/urandom&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;dc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; A-Za-z0-9&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/dev/urandom&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; head&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 13&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command will generate a 13-character random string using alphanumeric characters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;openssl&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;openssl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; rand&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;base64&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command will generate a random string in base64 format.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Remember to replace the numbers in these commands with the length of the string you want to generate.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Extracting Filename in Bash</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-get-filename-using-bash/"/>
        <id>https://mrkaran.dev/tils/shell-get-filename-using-bash/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-get-filename-using-bash/">&lt;p&gt;A little while ago, I’d to extract the filename (without the extension) from a particular JSON file. There’a a neat &lt;a rel=&quot;external&quot; href=&quot;https://man7.org/linux/man-pages/man1/basename.1.html&quot;&gt;&lt;code&gt;basename&lt;/code&gt;&lt;/a&gt; utility that I didn’t know about.&lt;/p&gt;
&lt;p&gt;However, it cannot accept STDIN so if you’re using it with &lt;code&gt;pipes&lt;/code&gt;, you need to use &lt;code&gt;xargs&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;get-the-filename-with-extension&quot;&gt;Get the filename with extension&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-the-filename-with-extension&quot; aria-label=&quot;Anchor link for: get-the-filename-with-extension&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ~/app.json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.file_path&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; basename&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;remove-the-extension&quot;&gt;Remove the extension&lt;a class=&quot;zola-anchor&quot; href=&quot;#remove-the-extension&quot; aria-label=&quot;Anchor link for: remove-the-extension&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ~/app.json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.file_path&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; basename&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Counting Lines in Files with Bash</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-line-count-for-each-file/"/>
        <id>https://mrkaran.dev/tils/shell-line-count-for-each-file/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-line-count-for-each-file/">&lt;p&gt;To get &lt;code&gt;wc -l&lt;/code&gt; for each file in the directory:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.csv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To output the number of lines, sorted in decreasing order:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.csv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; sort&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;rn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Analyzing Most Frequently Used Shell Commands</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-most-used-shell-commands/"/>
        <id>https://mrkaran.dev/tils/shell-most-used-shell-commands/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-most-used-shell-commands/">&lt;p&gt;Using &lt;code&gt;history&lt;/code&gt; and a bunch of other Linux-fu commands, we can find out the top &lt;code&gt;10&lt;/code&gt; most used commands in the shell history:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;history&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] &amp;quot; &amp;quot; CMD[a]/count*100 &amp;quot;% &amp;quot; a;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;./&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; column&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;c3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; sort&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;nr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; nl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  head&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;n10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here’s mine (&lt;em&gt;last updated on Jun 2021&lt;/em&gt;)&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	1376&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  13.6251%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	670&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   6.63432%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     cd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	635&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   6.28775%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     make&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	630&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   6.23824%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     clear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     5&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	502&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   4.97079%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     kcp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     6&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	500&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   4.95099%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     ls&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     7&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	420&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   4.15883%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     8&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	369&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   3.65383%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     sudo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;     9&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	323&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   3.19834%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     kc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    10&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	286&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;   2.83196%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     kcl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There’s a fancier output with bars too using:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;history&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; tr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; sort&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; uniq&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; sort&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; tail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; perl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;lane&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;print $F[1], &amp;quot;\t&amp;quot;, $F[0], &amp;quot; &amp;quot;, &amp;quot;▄&amp;quot; x ($F[0] / 12)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kcl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	286&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	323&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	365&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	419&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	479&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kcp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	502&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	626&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	635&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	653&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;	1348&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&quot;admonition note&quot;&gt;
    &lt;strong class=&quot;admonition-header&quot;&gt;NOTE&lt;/strong&gt;
    &lt;p&gt;&lt;p&gt;&lt;code&gt;kc&lt;/code&gt;, &lt;code&gt;kcl&lt;/code&gt;, &lt;code&gt;kcp&lt;/code&gt; etc are aliases for K8s CLI commands.&lt;/p&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.reddit.com/r/linux/comments/8vzr3y/whats_the_most_frequent_terminal_command_you_use/&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to View CSV Files in Terminal</title>
        <published>2022-06-21T00:00:00+00:00</published>
        <updated>2022-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-view-a-csv-file-in-terminal/"/>
        <id>https://mrkaran.dev/tils/shell-view-a-csv-file-in-terminal/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-view-a-csv-file-in-terminal/">&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;column&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;s,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; my.csv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; less&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; -#2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful cURL Snippets</title>
        <published>2022-06-14T00:00:00+00:00</published>
        <updated>2022-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-curl/"/>
        <id>https://mrkaran.dev/tils/linux-curl/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-curl/">&lt;h2 id=&quot;show-only-headers&quot;&gt;Show only headers&lt;a class=&quot;zola-anchor&quot; href=&quot;#show-only-headers&quot; aria-label=&quot;Anchor link for: show-only-headers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;curl has an option to display only headers using &lt;code&gt;-I&lt;/code&gt;. This flag is better than using a combination of &lt;code&gt;-s&lt;/code&gt; and redirecting the output to &lt;code&gt;/dev/null&lt;/code&gt; or &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; as it’s easier to remember.&lt;/p&gt;
&lt;p&gt;An important thing to note is that &lt;code&gt;-I&lt;/code&gt; sends a &lt;code&gt;HEAD&lt;/code&gt; request. As shown here:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;vvvv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://mrkaran.dev&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;HEAD&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;} [5 bytes data]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Using&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Stream&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ID:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt; (easy&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; handle&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0x55dff1e30920&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;} [5 bytes data]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; HEAD&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; HTTP/2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; Host: mrkaran.dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; user-agent: curl/7.76.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; accept: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However it’s easy to override the HTTP method using &lt;code&gt;-X&lt;/code&gt;. For eg, to send a &lt;code&gt;GET&lt;/code&gt; request but only display the headers:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; GET&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;vvvv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://mrkaran.dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;send-a-json-payload-from-file&quot;&gt;Send a JSON payload from file&lt;a class=&quot;zola-anchor&quot; href=&quot;#send-a-json-payload-from-file&quot; aria-label=&quot;Anchor link for: send-a-json-payload-from-file&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;XPOST&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Content-Type: application/json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; @mock_payload.json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; http://localhost:6000/endpoint&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;fail-if-response-is-4xx-5xx&quot;&gt;Fail if response is 4xx/5xx&lt;a class=&quot;zola-anchor&quot; href=&quot;#fail-if-response-is-4xx-5xx&quot; aria-label=&quot;Anchor link for: fail-if-response-is-4xx-5xx&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using the &lt;code&gt;--fail&lt;/code&gt; flag, &lt;code&gt;curl&lt;/code&gt; can detect if the response code is an error (includes 4xx,5xx with an exception for 401 and 407 as they are authentication related). This is handy to use in scripts. Read &lt;a rel=&quot;external&quot; href=&quot;https://superuser.com/a/657174&quot;&gt;this&lt;/a&gt; for more.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-fail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://httpbin.org/status/200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;HTTP/2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 200&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;date:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Tue,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 02&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Nov&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2021&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 10:43:38&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; GMT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;content-type:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; text/html&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; charset&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;content-length:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;server:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; gunicorn/19.9.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;access-control-allow-origin:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;access-control-allow-credentials:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-fail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://httpbin.org/status/502&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl:&lt;/span&gt;&lt;span&gt; (22&lt;/span&gt;&lt;span&gt;) The requested URL returned error: 502 &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;❯&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-fail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://httpbin.org/status/400&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl:&lt;/span&gt;&lt;span&gt; (22&lt;/span&gt;&lt;span&gt;) The requested URL returned error: 400 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;show-stats-of-the-request&quot;&gt;Show stats of the request&lt;a class=&quot;zola-anchor&quot; href=&quot;#show-stats-of-the-request&quot; aria-label=&quot;Anchor link for: show-stats-of-the-request&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;kso&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /dev/null&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://mrkaran.dev&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;==============\n\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| dnslookup: %{time_namelookup}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| connect: %{time_connect}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| appconnect: %{time_appconnect}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| pretransfer: %{time_pretransfer}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| starttransfer: %{time_starttransfer}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| total: %{time_total}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| size: %{size_download}\n &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;| HTTPCode=%{http_code}\n\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Configuring Custom Subnets in Docker</title>
        <published>2022-06-13T00:00:00+00:00</published>
        <updated>2022-06-13T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/docker-custom-subnet/"/>
        <id>https://mrkaran.dev/tils/docker-custom-subnet/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/docker-custom-subnet/">&lt;p&gt;Docker uses &lt;code&gt;172.17.0.0/16&lt;/code&gt; as the CIDR for it’s own network and all the other bridge network it creates. It maybe sometimes useful to change the default subnet to a custom one, in case it conflitcts with other resources (like AWS VPC) in your infra.
Not just this, it can also happen if you’ve multiple &lt;code&gt;docker-compose&lt;/code&gt; projects in your server and you face an error similar to:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ERROR:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; could&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; find&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; an&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; available,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; non-overlapping&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; IPv4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; address&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; pool&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; among&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; defaults&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; assign&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; network&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ip&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; show&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;8:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker0:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;NO-CARRIER,BROADCAST,MULTICAST,U&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; mtu&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1500&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; qdisc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; noqueue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; DOWN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; group&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; default&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    link/ether&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 02:42:18:b7:60:80&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; brd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ff:ff:ff:ff:ff:ff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    inet&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 172.17.0.1/16&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; brd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 172.17.255.255&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; scope&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; global&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;       valid_lft&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; forever&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; preferred_lft&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; forever&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    inet6&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; fe80::42:18ff:feb7:6080/64&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; scope&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; link&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;       valid_lft&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; forever&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; preferred_lft&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; forever&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;docker-compose&quot;&gt;Docker-compose&lt;a class=&quot;zola-anchor&quot; href=&quot;#docker-compose&quot; aria-label=&quot;Anchor link for: docker-compose&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’re using &lt;code&gt;docker-compose&lt;/code&gt;, then you can simply update the subnet for the bridge network created in that file by giving custom IPAM options in the network section of the file.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ervices&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;pp&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;mage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;pp/app:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;etworks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;onitor-net&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;etworks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;onitor-net&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;pam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;river&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;efault&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;onfig&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ubnet&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;92.168.96.0/27&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;docker-settings&quot;&gt;Docker settings&lt;a class=&quot;zola-anchor&quot; href=&quot;#docker-settings&quot; aria-label=&quot;Anchor link for: docker-settings&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you wish to update the base address of &lt;code&gt;docker0&lt;/code&gt; interface and define these subnets globally, you can update &lt;code&gt;daemon.json&lt;/code&gt; settings.&lt;/p&gt;
&lt;p&gt;Add the following to &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;. Create the file if it doesn’t exist.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;bip&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;10.200.0.1/24&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;default-address-pools&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;10.201.0.0/16&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;24&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;10.202.0.0/16&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;24&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; restart&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;verify-the-settings&quot;&gt;Verify the settings&lt;a class=&quot;zola-anchor&quot; href=&quot;#verify-the-settings&quot; aria-label=&quot;Anchor link for: verify-the-settings&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; show&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; docker0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see &lt;code&gt;10.200.0.1&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;explanation&quot;&gt;Explanation&lt;a class=&quot;zola-anchor&quot; href=&quot;#explanation&quot; aria-label=&quot;Anchor link for: explanation&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&quot;bip&quot;: &quot;10.200.0.1/24&quot;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bip&lt;/code&gt; stands for “Bridge IP”.&lt;/li&gt;
&lt;li&gt;This specifies the IP address and subnet for the Docker daemon’s default bridge network. The default bridge network is used for communications between the Docker host and containers that do not specify a network.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;10.200.0.1&lt;/code&gt; is the IP address assigned to the bridge interface on the Docker host.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/24&lt;/code&gt; indicates that the subnet mask is 255.255.255.0, which means that the IP addresses from &lt;code&gt;10.200.0.1&lt;/code&gt; to &lt;code&gt;10.200.0.254&lt;/code&gt; are available for use by containers connected to this bridge.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&quot;default-address-pools&quot;: [...]&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is an array defining pools of network addresses that Docker can use for creating user-defined networks (i.e., networks created using &lt;code&gt;docker network create&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Inside the &lt;code&gt;default-address-pools&lt;/code&gt; array, we have two objects, each specifying a base subnet and a size for the network pools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;{&quot;base&quot;:&quot;10.201.0.0/16&quot;,&quot;size&quot;:24}&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This pool defines a range of IP addresses starting with the base &lt;code&gt;10.201.0.0/16&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/16&lt;/code&gt; means that any address from &lt;code&gt;10.201.0.0&lt;/code&gt; to &lt;code&gt;10.201.255.255&lt;/code&gt; can be used to create smaller subnets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;size&quot;:24&lt;/code&gt; specifies that when Docker creates a user-defined network from this pool, it should use a subnet size of &lt;code&gt;/24&lt;/code&gt;. Therefore, each user-defined network created from this pool will have a range of IP addresses like &lt;code&gt;10.201.x.0/24&lt;/code&gt;, where &lt;code&gt;x&lt;/code&gt; is a variable that increments for each new network, providing 254 usable addresses for each subnet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;{&quot;base&quot;:&quot;10.202.0.0/16&quot;,&quot;size&quot;:24}&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Similar to the first pool, but this uses the &lt;code&gt;10.202.0.0/16&lt;/code&gt; range.&lt;/li&gt;
&lt;li&gt;Again, the &lt;code&gt;&quot;size&quot;:24&lt;/code&gt; means that Docker will create user-defined networks with a &lt;code&gt;/24&lt;/code&gt; subnet from this range, for example &lt;code&gt;10.202.x.0/24&lt;/code&gt;, where &lt;code&gt;x&lt;/code&gt; is an incrementing value.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;ref&quot;&gt;Ref&lt;a class=&quot;zola-anchor&quot; href=&quot;#ref&quot; aria-label=&quot;Anchor link for: ref&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://straz.to/2021-09-08-docker-address-pools/&quot;&gt;https://straz.to/2021-09-08-docker-address-pools/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/docker/docker.github.io/issues/8663#issuecomment-956438889&quot;&gt;https://github.com/docker/docker.github.io/issues/8663#issuecomment-956438889&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://serverfault.com/questions/916941/configuring-docker-to-not-use-the-172-17-0-0-range&quot;&gt;https://serverfault.com/questions/916941/configuring-docker-to-not-use-the-172-17-0-0-range&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Interacting with Nomad using the CLI</title>
        <published>2022-06-13T00:00:00+00:00</published>
        <updated>2022-06-13T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/nomad-cli/"/>
        <id>https://mrkaran.dev/tils/nomad-cli/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/nomad-cli/">&lt;p&gt;Some common commands which are used to interact with the jobs/allocations.&lt;/p&gt;
&lt;p&gt;Please refer to &lt;a rel=&quot;external&quot; href=&quot;https://www.nomadproject.io/docs/commands&quot;&gt;CLI Docs&lt;/a&gt; to see the common Environment Variables to use in case you’re accessing a production Nomad cluster.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; job&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; file.nomad&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Stop a job&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; job&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;purge&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;job-nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;View job status&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; job&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;job-nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;View &lt;code&gt;alloc&lt;/code&gt; status&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; alloc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;stats&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;alloc-i&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;View logs&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; alloc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; logs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;stderr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;alloc-i&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Exec inside &lt;code&gt;alloc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; alloc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; exec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;task&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;task-nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;alloc-i&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting Up Your Editor for Nomad Job Specifications</title>
        <published>2022-06-13T00:00:00+00:00</published>
        <updated>2022-06-13T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/nomad-editor-setup/"/>
        <id>https://mrkaran.dev/tils/nomad-editor-setup/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/nomad-editor-setup/">&lt;p&gt;For formatting HCLv2 files (that Nomad job spec uses), you can use the following setup to neatly format them automatically.&lt;/p&gt;
&lt;h2 id=&quot;vscode&quot;&gt;VSCode&lt;a class=&quot;zola-anchor&quot; href=&quot;#vscode&quot; aria-label=&quot;Anchor link for: vscode&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install this &lt;a rel=&quot;external&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=fredwangwang.vscode-hcl-format&quot;&gt;extension&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add the following lines to your &lt;code&gt;settings.json&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;files.associations&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;        &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;*.nomad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;hcl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;        &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;*.nomad.tpl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;hcl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;        &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;*.tf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;terraform&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Reload VSCode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;manual&quot;&gt;Manual&lt;a class=&quot;zola-anchor&quot; href=&quot;#manual&quot; aria-label=&quot;Anchor link for: manual&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;hclfmt&lt;/code&gt; using &lt;code&gt;go&lt;/code&gt; (they don’t provide pre-compiled binaries, so building from source is only option):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; github.com/hashicorp/hcl/v2/cmd/hclfmt@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Format with &lt;code&gt;hclfmt&lt;/code&gt;. Since it only works on a single file by default, we need to use a wrapper script to cover all files and nested directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;e&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;for&lt;/span&gt;&lt;span&gt; file&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; *&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  hclfmt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;w&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Save the above as &lt;code&gt;run-hclfmt&lt;/code&gt; in &lt;code&gt;/usr/local/bin&lt;/code&gt; and &lt;code&gt;chmod +x /usr/local/bin/run-hclfmt&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now, you’ll be able to run this script from anywhere in your directory of Nomad job specs using &lt;code&gt;run-hclfmt&lt;/code&gt;. It includes sub directories as well.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting Up a Single Node Nomad Environment</title>
        <published>2022-06-13T00:00:00+00:00</published>
        <updated>2022-06-13T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/nomad-single-node-setup/"/>
        <id>https://mrkaran.dev/tils/nomad-single-node-setup/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/nomad-single-node-setup/">&lt;p&gt;I use the following server/client config to quickly prototype Nomad jobs:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;hcl&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;datacenter&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;dc1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;data_dir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/opt/nomad/data&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log_level&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;DEBUG&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bind_addr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0.0.0.0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;server&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  enabled&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;          =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  bootstrap_expect&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;client&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  enabled&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  reserved&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    cores&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;          =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    memory&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;         =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    disk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;           =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    reserved_ports&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  meta&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    env&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;   =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;dev&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    stack&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;personal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;plugin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; &amp;quot;docker&amp;quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  config&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    allow_privileged&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;    volumes&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      enabled&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    extra_labels&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;job_name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;job_id&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;task_group_name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;task_name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;node_name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;node_id&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;plugin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; &amp;quot;raw_exec&amp;quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  config&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    enabled&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the file as &lt;code&gt;nomad.hcl&lt;/code&gt; (which will be referenced later).&lt;/p&gt;
&lt;h2 id=&quot;instructions&quot;&gt;Instructions&lt;a class=&quot;zola-anchor&quot; href=&quot;#instructions&quot; aria-label=&quot;Anchor link for: instructions&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Get Nomad from https://learn.hashicorp.com/tutorials/nomad/get-started-install.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the local agent:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo nomad agent -config=nomad.hcl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Check node status&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nomad node status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Run example deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nomad init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nomad run example.nomad&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ansible FAQ</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/ansible-faq/"/>
        <id>https://mrkaran.dev/tils/ansible-faq/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/ansible-faq/">&lt;h2 id=&quot;tags&quot;&gt;Tags&lt;a class=&quot;zola-anchor&quot; href=&quot;#tags&quot; aria-label=&quot;Anchor link for: tags&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tags are &lt;strong&gt;opt-in&lt;/strong&gt;. If you’ve an Ansible Playbook, the task will always run. To ensure it only runs if a tag is given and &lt;strong&gt;never&lt;/strong&gt; otherwise, use the &lt;code&gt;never&lt;/code&gt; tag.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- never&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- my_custom_tag&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If a task is defined with above tags, then only if &lt;code&gt;my_custom_tag&lt;/code&gt; is there, the task will run.&lt;/p&gt;
&lt;p&gt;To make this simple, the playbook run command should have a list of tags that are to be executed. &lt;code&gt;--tags=&#39;abc,def&#39;&lt;/code&gt; is the way to supply these tags on the command-line.&lt;/p&gt;
&lt;p&gt;!!! tip
Use Makefiles whenever possible.&lt;/p&gt;
&lt;p&gt;If you add a tag to a playbook, then the tag is &lt;strong&gt;appended&lt;/strong&gt; to the role.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  roles:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - name: clickhouse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	  tags: [check_me_out]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can see this &lt;code&gt;check_me_out&lt;/code&gt; tag is appended to each task in the role.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ansible-playbook -i inventory playbook.yml --list-tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;playbook: playbook.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  play #1 (clickhouse): clickhouse      TAGS: []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tasks:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Install multiple packages    TAGS: [check_me_out, clickhouse_install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Add the APT Key for ClickHouse.      TAGS: [check_me_out, clickhouse_install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Add ClickHouse APT sources   TAGS: [check_me_out, clickhouse_install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Install ClickHouse   TAGS: [check_me_out, clickhouse_install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Config | Set ClickHouse configuration file   TAGS: [check_me_out, clickhouse_configure]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      clickhouse : Config | Set users configuration file        TAGS: [check_me_out, clickhouse_configure]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hence, the best way is to have a &lt;code&gt;Makefile&lt;/code&gt; with different tags supplied on the CLI:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;make&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;install-clickhouse&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	ansible-playbook -i inventory playbook.yml --tags &amp;quot;clickhouse_install&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;configure-clickhouse&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	ansible-playbook -i inventory playbook.yml --tags &amp;quot;clickhouse_configure&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;naming-strategy&quot;&gt;Naming Strategy&lt;a class=&quot;zola-anchor&quot; href=&quot;#naming-strategy&quot; aria-label=&quot;Anchor link for: naming-strategy&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Since Ansible Tags &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/a/30058874&quot;&gt;use&lt;/a&gt; &lt;code&gt;OR&lt;/code&gt; (and not &lt;code&gt;AND&lt;/code&gt;) as the joining condition, it becomes tricky to have a role with tasks like:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- clickhouse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- clickhouse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- configure&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In a case where you want to only run &lt;code&gt;configure&lt;/code&gt;, you &lt;code&gt;just&lt;/code&gt; have to pass &lt;code&gt;configure&lt;/code&gt;. If you pass &lt;code&gt;clickhouse,configure&lt;/code&gt;, even the &lt;code&gt;install.yml&lt;/code&gt; will be run. This is important to note as it can cause issues when running playbooks.&lt;/p&gt;
&lt;p&gt;The workaround then is to have a tag called &lt;code&gt;clickhouse_configure&lt;/code&gt; and &lt;code&gt;clickhouse_install&lt;/code&gt; and only pass that.&lt;/p&gt;
&lt;p&gt;It’s possible to preview the list of tasks which will be executed with:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ansible-playbook example.yml --tags &amp;quot;configuration,packages&amp;quot; --list-tasks&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;roles&quot;&gt;Roles&lt;a class=&quot;zola-anchor&quot; href=&quot;#roles&quot; aria-label=&quot;Anchor link for: roles&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;!!! tip
Always ensure you fetch the remote roles &lt;em&gt;again&lt;/em&gt; if you made any changes to them.&lt;/p&gt;
&lt;h2 id=&quot;inventory&quot;&gt;Inventory&lt;a class=&quot;zola-anchor&quot; href=&quot;#inventory&quot; aria-label=&quot;Anchor link for: inventory&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;aliases&quot;&gt;Aliases&lt;a class=&quot;zola-anchor&quot; href=&quot;#aliases&quot; aria-label=&quot;Anchor link for: aliases&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Aliases are helpful in cases where the &lt;code&gt;ansible_host&lt;/code&gt; is same (bastion host), but the target host is defined with &lt;code&gt;ansible_ssh_extra_args&lt;/code&gt;. In such cases, Ansible is unable to differentiate between two hostnames and it thinks both the hosts are same.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bastion-host &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;22 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_user&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_extra_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-o &amp;#39;Hostname 1.1.1.1&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bastion-host &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;22 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_user&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_extra_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-o &amp;#39;Hostname 2.2.2.2&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The fix to this is to use an &lt;a rel=&quot;external&quot; href=&quot;https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#inventory-aliases&quot;&gt;&lt;code&gt;Inventory Alias&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app_1 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_host&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bastion-host &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;22 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_user&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_extra_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-o &amp;#39;Hostname 1.1.1.1&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app_2 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_host&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bastion-host &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;22 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_user&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ansible_ssh_extra_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-o &amp;#39;Hostname 2.2.2.2&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So with the alias &lt;code&gt;app_1&lt;/code&gt; and &lt;code&gt;app_2&lt;/code&gt;, Ansible is able to differentiate b/w two hostnames.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ansible Snippets</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/ansible-snippets/"/>
        <id>https://mrkaran.dev/tils/ansible-snippets/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/ansible-snippets/">&lt;h2 id=&quot;assert-a-list-of-variables&quot;&gt;Assert a list of variables&lt;a class=&quot;zola-anchor&quot; href=&quot;#assert-a-list-of-variables&quot; aria-label=&quot;Anchor link for: assert-a-list-of-variables&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #6CB6FF);&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ssert if all template variables are present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ssert&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;hat&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{item}} is defined&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{item}} | length &amp;gt; 0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    q&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;uiet&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ith_items&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;y_var&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;nother_var&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;o_log&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;execute-a-task-before-executing-a-role&quot;&gt;Execute a task before executing a role&lt;a class=&quot;zola-anchor&quot; href=&quot;#execute-a-task-before-executing-a-role&quot; aria-label=&quot;Anchor link for: execute-a-task-before-executing-a-role&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;osts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;my_server&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  b&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ecome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Assert if variables are present.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;re_tasks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;mport_tasks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;./tasks/assert.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;oles&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ole&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;wait-for-apt-get-lock-before-installing-packages&quot;&gt;Wait for apt-get lock before installing packages&lt;a class=&quot;zola-anchor&quot; href=&quot;#wait-for-apt-get-lock-before-installing-packages&quot; aria-label=&quot;Anchor link for: wait-for-apt-get-lock-before-installing-packages&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; https://github.com/ansible/ansible/issues/51663#issuecomment-752286191&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; A common issue, particularly during early boot or at specific clock times&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; is that apt will be locked by another process, perhaps trying to autoupdate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; or just a race condition on a thread. This work-around (which can also be&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; applied to any of the above statements) ensures that if there is a lock file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; engaged, which is trapped by the `msg` value, triggers a repeat until the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; lock file is released.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;nstall OS dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;pt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ consul_os_packages }}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;resent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;egister&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;pt_action&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;etries&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ntil&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;pt_action is success or (&amp;#39;Failed to lock apt for exclusive operation&amp;#39; not in apt_action.msg and &amp;#39;/var/lib/dpkg/lock&amp;#39; not in apt_action.msg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;donwload-and-run-a-project-from-an-external-source&quot;&gt;Donwload and run a project from an external source&lt;a class=&quot;zola-anchor&quot; href=&quot;#donwload-and-run-a-project-from-an-external-source&quot; aria-label=&quot;Anchor link for: donwload-and-run-a-project-from-an-external-source&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The following playbook downloads a GitHub release, templates a config file and starts a systemd-service&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; R&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;egister working directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;et_fact&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ttp_script_bin_dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/home/{{ansible_ssh_user}}/services/http-script-executor&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ttp_script_config_dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;etc/http-script-executor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;reate project directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nsible.builtin.file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;irectory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0755&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;reate config directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nsible.builtin.file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_config_dir}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;irectory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0755&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; D&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ownload latest release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;et_url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;rl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;https://github.com/iamd3vil/http-script-executor/releases/download/v0.1.0/http-script-executor_0.1.0_Linux_x86_64.tar.gz&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}/http-script-executor.tar.xz&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;orce&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; U&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;narchive the binary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nsible.builtin.unarchive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;rc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}/http-script-executor.tar.xz&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;emote_src&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;opy config file.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;emplate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;rc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/templates/http_script_executor/config.toml.j2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_config_dir}}/config.toml&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;egister&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;utput&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;opy binary to PATH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nsible.builtin.copy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;rc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}/http-script-executor&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/usr/local/bin/http-script-executor&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;emote_src&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{ansible_ssh_user}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;egister&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;utput&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;leanup project folder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ile&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;bsent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{{http_script_bin_dir}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; A&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;dd systemd script for program&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;emplate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;rc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/templates/http_script_executor/http-script-executor.service.j2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/etc/systemd/system/http-script-executor.service&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;wner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;oot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;roup&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;oot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 0644&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;egister&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ystemd_unit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; R&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;eload systemd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ystemd&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;aemon_reload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;hen&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ystemd_unit is changed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; S&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;tart service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ervice&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ttp-script-executor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;tarted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; R&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;estart service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ervice&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ttp-script-executor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;estarted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;hen&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;utput.changed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;systemd-example&quot;&gt;Systemd example&lt;a class=&quot;zola-anchor&quot; href=&quot;#systemd-example&quot; aria-label=&quot;Anchor link for: systemd-example&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Unit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Description= A simple HTTP server which executes scripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;After=network.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecStart=/usr/local/bin/http-script-executor --config=/etc/http-script-executor/config.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;User={{ansible_ssh_user}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Group={{ansible_ssh_user}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ansible Vault</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/ansible-vault/"/>
        <id>https://mrkaran.dev/tils/ansible-vault/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/ansible-vault/">&lt;p&gt;Vault let’s you encrypt sensitive values in your playbook. These can be DB Passwords, API tokens etc that need to referenced inside the roles/task etc.&lt;/p&gt;
&lt;p&gt;There are 2 ways to encrypt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;File&lt;/li&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IMHO encrypting with a file is better even for a few variables.&lt;/p&gt;
&lt;h2 id=&quot;how-to&quot;&gt;How To&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-to&quot; aria-label=&quot;Anchor link for: how-to&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Create a file called &lt;code&gt;secrets.enc&lt;/code&gt; and add the contents in plain-text:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;assword&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ecret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nother_password&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;upersecret&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;Encrypt with &lt;code&gt;ansible-vault encrypt secrets.enc&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Store the password inside &lt;code&gt;.vault_password&lt;/code&gt; (untracked from &lt;code&gt;git&lt;/code&gt;) if you don’t want to provide the password everytime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the playbook with &lt;code&gt;ansible-playbook -i inventory playbook.yml -e @secrets.enc --vault-password-file=.vault_password&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s all! &lt;code&gt;{{password}}&lt;/code&gt; and &lt;code&gt;{{another_password}}&lt;/code&gt; will be available inside tasks normally, no extra work needed.&lt;/p&gt;
&lt;h3 id=&quot;managing-secrets&quot;&gt;Managing Secrets&lt;a class=&quot;zola-anchor&quot; href=&quot;#managing-secrets&quot; aria-label=&quot;Anchor link for: managing-secrets&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can use these commands to view/edit secret file.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;make&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;view-secrets&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	ansible-vault view secrets.enc --vault-password-file=.vault_passwor&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;edit-secrets&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	EDITOR=vim ansible-vault edit secrets.enc --vault-password-file=.vault_passwor&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Accessing AWS EC2 Metadata within a Docker Container</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/aws-ec2-metadata-inside-docker/"/>
        <id>https://mrkaran.dev/tils/aws-ec2-metadata-inside-docker/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/aws-ec2-metadata-inside-docker/">&lt;p&gt;If you try to access EC2 Metadata endpoint from a Docker container which is bridged to the default network interface on your host, you would assume things to &lt;em&gt;just&lt;/em&gt; work, right? Wrong.&lt;/p&gt;
&lt;p&gt;Here’s what happens when you do this command on the host (it works fine):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; PUT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;http://169.254.169.254/latest/api/token&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;X-aws-ec2-metadata-token-ttl-seconds: 21600&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;X-aws-ec2-metadata-token: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; http://169.254.169.254/latest/meta-data/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here’s what happens when you do it inside a container:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-rm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; alpine:sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;apk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; bash&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; curl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; PUT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;http://169.254.169.254/latest/api/token&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;X-aws-ec2-metadata-token-ttl-seconds: 21600&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;X-aws-ec2-metadata-token: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;TOKEN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; http://169.254.169.254/latest/meta-data/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is stuck and will eventually time out.&lt;/p&gt;
&lt;h2 id=&quot;the-fix&quot;&gt;The Fix&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-fix&quot; aria-label=&quot;Anchor link for: the-fix&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is because the response comes with a packet of &lt;strong&gt;TTL as 1&lt;/strong&gt;. (TTL at packet level means number of hops). Since this response has to eventually pass to your container, you need to increase it higher. (For eg, 3 is fine).&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html&quot;&gt;Refer to docs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;By default, the response to &lt;code&gt;PUT&lt;/code&gt; requests has a response hop limit (time to live) of &lt;code&gt;1&lt;/code&gt; at the IP protocol level. You can adjust the hop limit using the &lt;code&gt;modify-instance-metadata-options&lt;/code&gt; command if you need to make it larger. For example, you might need a larger hop limit for backward compatibility with container services running on the instance. For more information, see &lt;a rel=&quot;external&quot; href=&quot;https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html&quot;&gt;modify-instance-metadata-options&lt;/a&gt; in the &lt;em&gt;AWS CLI Command Reference&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There’s a nice read on how &lt;code&gt;traceroute&lt;/code&gt; works, which kind of explains the above TTL concept as well: https://alexanderell.is/posts/toy-traceroute/&lt;/p&gt;
&lt;h3 id=&quot;modifying-in-terraform&quot;&gt;Modifying in Terraform&lt;a class=&quot;zola-anchor&quot; href=&quot;#modifying-in-terraform&quot; aria-label=&quot;Anchor link for: modifying-in-terraform&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Inside the &lt;code&gt;aws_instance&lt;/code&gt; resource block, add this block:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;hcl&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  metadata_options&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    http_put_response_hop_limit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    http_endpoint&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;               =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;enabled&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting Custom DNS in Docker</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/docker-custom-dns-server/"/>
        <id>https://mrkaran.dev/tils/docker-custom-dns-server/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/docker-custom-dns-server/">&lt;p&gt;Docker makes it impossible to supply a &lt;code&gt;--dns&lt;/code&gt; flag with &lt;code&gt;docker build&lt;/code&gt; which makes it harder to use an internal service in your org. There are workarounds like &lt;code&gt;--add-host=xyz.internal:&amp;lt;IP&amp;gt;&lt;/code&gt; but imagine doing this for dozen of services. Yep it’s not maintainable, especially if the DNS records of these services change (for eg if they are behind ALB).&lt;/p&gt;
&lt;p&gt;A cleaner solution is to forward the queries to your host DNS server itself. You can use various techniques like Split Tunnel (if your VPN supports that) or custom routing to different upstream DNS servers (eg with CoreDNS).&lt;/p&gt;
&lt;p&gt;To make this happen, you need to edit the &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &amp;quot;dns&amp;quot;: [&amp;quot;x.x.x.x&amp;quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Docker uses &lt;code&gt;8.8.8.8&lt;/code&gt; as a default, but if you override the above setting, it will start using the DNS server you provided.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>SSH Deployment with GitLab CI</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/gitlab-ci/"/>
        <id>https://mrkaran.dev/tils/gitlab-ci/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/gitlab-ci/">&lt;h2 id=&quot;ssh-to-a-server&quot;&gt;SSH to a server&lt;a class=&quot;zola-anchor&quot; href=&quot;#ssh-to-a-server&quot; aria-label=&quot;Anchor link for: ssh-to-a-server&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create a public/private key pair on the remote instance&lt;/li&gt;
&lt;li&gt;Copy the &lt;code&gt;private key&lt;/code&gt; as an env variable in Gitlab CI&lt;/li&gt;
&lt;li&gt;Use the following snippet to SSH:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;repare&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;eploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;efault&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;mage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;    n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ublic.ecr.aws/ubuntu/ubuntu:20.04&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ssh-commands&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ssh-commands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;pt-get -y update &amp;amp;&amp;amp; apt-get install -y rsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;which ssh-agent || ( apt-get install -y openssh-client )&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;val $(ssh-agent -s)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;cho &amp;quot;$SSH_PRIVATE_KEY&amp;quot; | tr -d &amp;#39;\r&amp;#39; | ssh-add -&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;kdir -p ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;hmod 700 ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ync-deploy-scripts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  b&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;efore_script&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;span&gt;ssh-commands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;tage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;eploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;cript&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;sync --cvs-exclude -ravz -e &amp;quot;ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null&amp;quot; ./ ubuntu@&amp;lt;remote_ip&amp;gt;:/home/ubuntu/app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;  o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;nly&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful Kubernetes CLI Commands</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/k8s-cli/"/>
        <id>https://mrkaran.dev/tils/k8s-cli/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/k8s-cli/">&lt;h2 id=&quot;trigger-a-cronjob-manually&quot;&gt;Trigger a cronjob manually&lt;a class=&quot;zola-anchor&quot; href=&quot;#trigger-a-cronjob-manually&quot; aria-label=&quot;Anchor link for: trigger-a-cronjob-manually&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kubectl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; create&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; job&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-from=cronjob/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cronjob-name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;unique-job-nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;get-events-sorted-by-timestamp&quot;&gt;Get events sorted by timestamp&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-events-sorted-by-timestamp&quot; aria-label=&quot;Anchor link for: get-events-sorted-by-timestamp&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kubectl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; events&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-sort-by=.metadata.creationTimestamp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;taint-a-node&quot;&gt;Taint a node&lt;a class=&quot;zola-anchor&quot; href=&quot;#taint-a-node&quot; aria-label=&quot;Anchor link for: taint-a-node&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kubectl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; taint&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; nodes&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; {{name}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; key1=value1:NoSchedule&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;untaint-a-node&quot;&gt;Untaint a node&lt;a class=&quot;zola-anchor&quot; href=&quot;#untaint-a-node&quot; aria-label=&quot;Anchor link for: untaint-a-node&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kubectl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; taint&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; nodes&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; {{name}}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; key1=value1:NoSchedule-&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;resource-utilisation&quot;&gt;Resource Utilisation&lt;a class=&quot;zola-anchor&quot; href=&quot;#resource-utilisation&quot; aria-label=&quot;Anchor link for: resource-utilisation&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;check-resource-requests-limits-on-each-node&quot;&gt;Check Resource Requests/Limits on each node&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-resource-requests-limits-on-each-node&quot; aria-label=&quot;Anchor link for: check-resource-requests-limits-on-each-node&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In case you need to check how much of Resource Requests/Limits are made across all the nodes in the cluster, following command is helpful:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;alias&lt;/span&gt;&lt;span&gt; util&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;kubectl get nodes --no-headers | awk &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{print $1}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; | xargs -I {} sh -c &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Outputs:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip-192-x-x-x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  Resource&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                    Requests&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;      Limits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  cpu&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                         14472m&lt;/span&gt;&lt;span&gt; (91%&lt;/span&gt;&lt;span&gt;)  21970m (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;138%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  memory&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                      21Gi&lt;/span&gt;&lt;span&gt; (35%&lt;/span&gt;&lt;span&gt;)    33070Mi (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;54%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip-192-x-x-x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  Resource&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                    Requests&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       Limits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  cpu&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                         14632m&lt;/span&gt;&lt;span&gt; (92%&lt;/span&gt;&lt;span&gt;)   21695m (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;136%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  memory&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                      27448Mi&lt;/span&gt;&lt;span&gt; (45%&lt;/span&gt;&lt;span&gt;)  46854Mi (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;77%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip-192-x-x-x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  Resource&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                    Requests&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       Limits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  cpu&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                         15297m&lt;/span&gt;&lt;span&gt; (96%&lt;/span&gt;&lt;span&gt;)   22445m (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;141%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;  memory&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;                      18819Mi&lt;/span&gt;&lt;span&gt; (31%&lt;/span&gt;&lt;span&gt;)  36278Mi (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;60%&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Troubleshooting Kubernetes CNI Issues</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/k8s-debug-cni-issues/"/>
        <id>https://mrkaran.dev/tils/k8s-debug-cni-issues/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/k8s-debug-cni-issues/">&lt;p&gt;Official guides to troubleshoot common issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/troubleshooting.md&lt;/li&gt;
&lt;li&gt;https://aws.amazon.com/premiumsupport/knowledge-center/eks-failed-create-pod-sandbox/&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the most common issue is &lt;strong&gt;getting out of available IPs in the subnet pool&lt;/strong&gt;. You can check the logs here:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;kubectl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; kube-system&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; exec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; aws-node-XXX--&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; tail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /host/var/log/aws-routed-eni/ipamd.log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; tee&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ipamd.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, go to the subnet and check the available IPs. Quite likely it’ll be 0. Add some kind of pod affinity to schedule the pod on another subnet using (&lt;code&gt;.spec.affinity&lt;/code&gt; section of &lt;code&gt;Pod&lt;/code&gt; config)&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;      a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ffinity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;        n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;odeAffinity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;          r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;equiredDuringSchedulingIgnoredDuringExecution&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;            n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;odeSelectorTerms&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;atchExpressions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;              -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt; k&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ey&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;opology.kubernetes.io/zone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;                o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;perator&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;n&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;                v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;alues&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;p-south-1b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, the affinity is towards 1b node when the pod is scheduled. You can see all the different kind of Node labels/selectors applied using &lt;code&gt;kubectl describe node | grep topology&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can even label certain nodes, and then use Node selectors instead of &lt;code&gt;affinity&lt;/code&gt; to guarantee scheduling only on those selectors.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Troubleshooting Missing Logs in systemd-journald on Linux</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-journald/"/>
        <id>https://mrkaran.dev/tils/linux-journald/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-journald/">&lt;h2 id=&quot;debugging-steps-when-journal-logs-are-missing&quot;&gt;Debugging steps when journal logs are missing&lt;a class=&quot;zola-anchor&quot; href=&quot;#debugging-steps-when-journal-logs-are-missing&quot; aria-label=&quot;Anchor link for: debugging-steps-when-journal-logs-are-missing&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Follow these debugging steps, when &lt;code&gt;systemd&lt;/code&gt; service is running, but logs are missing in &lt;code&gt;journalctl&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo -i&lt;/code&gt; if not already.&lt;/li&gt;
&lt;li&gt;Try running &lt;code&gt;journalctl -b&lt;/code&gt; to see messages from the current boot.&lt;/li&gt;
&lt;li&gt;If you still get &lt;code&gt;-- No entries --&lt;/code&gt;, run &lt;code&gt;journalctl --verify&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you get &lt;code&gt;No journal files were found&lt;/code&gt;, something is corrupted with the journal service itself. Run &lt;code&gt;systemctl status systemd-journald*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If the services are all “green” (active/running), something is borked with the log files in &lt;code&gt;/var/log/journal/&amp;lt;hash&amp;gt;&lt;/code&gt;. Try running the following to recreate them:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;systemctl restart systemd-journald.service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;https://unix.stackexchange.com/a/538881&lt;/p&gt;
&lt;p&gt;In my case, I had a fresh droplet created on DO but &lt;code&gt;journal&lt;/code&gt; entries were missing for all services. Doing a &lt;code&gt;sudo systemctl restart systemd-journald.service&lt;/code&gt; fixed this weird as hell issue.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Essential Linux Networking Commands</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-networking/"/>
        <id>https://mrkaran.dev/tils/linux-networking/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-networking/">&lt;h2 id=&quot;tcpdump&quot;&gt;tcpdump&lt;a class=&quot;zola-anchor&quot; href=&quot;#tcpdump&quot; aria-label=&quot;Anchor link for: tcpdump&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;check-for-packets-flowing-out-from-an-interface-for-a-specific-cidr&quot;&gt;Check for packets flowing out from an interface for a specific CIDR&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-for-packets-flowing-out-from-an-interface-for-a-specific-cidr&quot; aria-label=&quot;Anchor link for: check-for-packets-flowing-out-from-an-interface-for-a-specific-cidr&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; tcpdump&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; wlo1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; dst&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; net&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 192.168.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; is for &lt;code&gt;interface&lt;/code&gt;. &lt;code&gt;wlo1&lt;/code&gt; is the interface name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dst&lt;/code&gt; specifies &lt;code&gt;destination IP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;net&lt;/code&gt; specifies it’s a CIDR range.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ip&quot;&gt;ip&lt;a class=&quot;zola-anchor&quot; href=&quot;#ip&quot; aria-label=&quot;Anchor link for: ip&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;list-routing-table&quot;&gt;List routing table&lt;a class=&quot;zola-anchor&quot; href=&quot;#list-routing-table&quot; aria-label=&quot;Anchor link for: list-routing-table&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; route&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;find-which-interface-and-route-a-particular-ip-is-taking&quot;&gt;Find which interface and route a particular IP is taking&lt;a class=&quot;zola-anchor&quot; href=&quot;#find-which-interface-and-route-a-particular-ip-is-taking&quot; aria-label=&quot;Anchor link for: find-which-interface-and-route-a-particular-ip-is-taking&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ip&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; route&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 192.168.1.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;ifconfig&quot;&gt;ifconfig&lt;a class=&quot;zola-anchor&quot; href=&quot;#ifconfig&quot; aria-label=&quot;Anchor link for: ifconfig&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;find-the-primary-ip-of-local-machine&quot;&gt;Find the primary IP of local machine&lt;a class=&quot;zola-anchor&quot; href=&quot;#find-the-primary-ip-of-local-machine&quot; aria-label=&quot;Anchor link for: find-the-primary-ip-of-local-machine&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;get-the-ip-of-all-interfaces&quot;&gt;Get the IP of all interfaces:&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-the-ip-of-all-interfaces&quot; aria-label=&quot;Anchor link for: get-the-ip-of-all-interfaces&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ifconfig | grep -Eo &amp;#39;inet (addr:)?([0-9]*\.){3}[0-9]*&amp;#39; | grep -Eo &amp;#39;([0-9]*\.){3}[0-9]*&amp;#39; | grep -v &amp;#39;127.0.0.1&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;get-the-ip-of-a-specific-interface&quot;&gt;Get the IP of a specific interface:&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-the-ip-of-a-specific-interface&quot; aria-label=&quot;Anchor link for: get-the-ip-of-a-specific-interface&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For eg (&lt;code&gt;wlo1&lt;/code&gt;):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ifconfig&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; wlo1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;Eo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;inet (addr:)?([0-9]*\.){3}[0-9]*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;Eo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;([0-9]*\.){3}[0-9]*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/a/13322549&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Managing Processes in Linux</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-ps/"/>
        <id>https://mrkaran.dev/tils/linux-ps/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-ps/">&lt;h3 id=&quot;list-of-running-process&quot;&gt;List of running process&lt;a class=&quot;zola-anchor&quot; href=&quot;#list-of-running-process&quot; aria-label=&quot;Anchor link for: list-of-running-process&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ps&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; aux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;kill-a-process&quot;&gt;Kill a process&lt;a class=&quot;zola-anchor&quot; href=&quot;#kill-a-process&quot; aria-label=&quot;Anchor link for: kill-a-process&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;kill&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;kill-a-process-by-name&quot;&gt;Kill a process by name&lt;a class=&quot;zola-anchor&quot; href=&quot;#kill-a-process-by-name&quot; aria-label=&quot;Anchor link for: kill-a-process-by-name&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;pkill&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;././bin/app.bin&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful rsync Command Snippets for Linux</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-rsync/"/>
        <id>https://mrkaran.dev/tils/linux-rsync/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-rsync/">&lt;h2 id=&quot;copying-files-locally&quot;&gt;Copying files locally&lt;a class=&quot;zola-anchor&quot; href=&quot;#copying-files-locally&quot; aria-label=&quot;Anchor link for: copying-files-locally&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rsync -avhW --no-compress --progress /src/ /dst/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;passing-ssh-extra-options&quot;&gt;Passing SSH Extra Options&lt;a class=&quot;zola-anchor&quot; href=&quot;#passing-ssh-extra-options&quot; aria-label=&quot;Anchor link for: passing-ssh-extra-options&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rsync -avzhP --stats -e &amp;#39;ssh -o &amp;quot;Hostname &amp;lt;ip&amp;gt;&amp;quot;&amp;#39; &amp;lt;bastion_host&amp;gt;:/src/ /dst/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful sed Command Snippets for Linux</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-sed/"/>
        <id>https://mrkaran.dev/tils/linux-sed/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-sed/">&lt;h2 id=&quot;edit-in-place&quot;&gt;Edit in place&lt;a class=&quot;zola-anchor&quot; href=&quot;#edit-in-place&quot; aria-label=&quot;Anchor link for: edit-in-place&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sed -i &#39;s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g&#39; filename&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;match-only-the-word&quot;&gt;Match only the word&lt;a class=&quot;zola-anchor&quot; href=&quot;#match-only-the-word&quot; aria-label=&quot;Anchor link for: match-only-the-word&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;\b&lt;/code&gt; in regex is used to match word boundaries (i.e. the location between the first word character and non-word character).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sed -i &#39;s/\bsuper_specific_phrase\b/STRING_TO_REPLACE_IT/g&#39; filename&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Minimal SystemD Starter Template</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/linux-systemd/"/>
        <id>https://mrkaran.dev/tils/linux-systemd/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/linux-systemd/">&lt;p&gt;Here’s a barebone/re-usable &lt;code&gt;systemd&lt;/code&gt; service unit snippet that I often use to copy/paste for registering new services:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Unit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;Description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;Program Description&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;Documentation&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;https://program.url&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;After&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;network-online.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;Requires&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;network-online.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;StartLimitIntervalSec&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Service&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;User&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;Group&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ExecStart&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;/usr/local/bin/app.bin --&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;config&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;/etc/app/config.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ExecReload&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;/bin/kill -HUP $MAINPID&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;Restart&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;RestartSec&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;AmbientCapabilities&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;CAP_NET_BIND_SERVICE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;WantedBy&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;multi-user.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Determining CPU Cores in Bash</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-get-number-of-cores-using-bash/"/>
        <id>https://mrkaran.dev/tils/shell-get-number-of-cores-using-bash/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-get-number-of-cores-using-bash/">&lt;p&gt;&lt;code&gt;nproc&lt;/code&gt; is part of coreutils package that gives the number of cores available in an easy to consume way (no more grepping and parsing ).&lt;/p&gt;
&lt;p&gt;I wanted this to set &lt;code&gt;VECTOR_THREADS&lt;/code&gt; variable for &lt;code&gt;vector&lt;/code&gt; CLI to 1/2 of what is available on system.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;e&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cores&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;nproc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-all&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cap&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VECTOR_THREADS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;cores&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; cap&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;-config&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /etc/vector&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Executing Commands as Different Users in Bash</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/shell-run-a-command-as-a-different-user/"/>
        <id>https://mrkaran.dev/tils/shell-run-a-command-as-a-different-user/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/shell-run-a-command-as-a-different-user/">&lt;p&gt;Here’s an example of running &lt;code&gt;echo&lt;/code&gt; but as a &lt;code&gt;consul&lt;/code&gt; user:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; consul&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; bash&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;echo &amp;quot;I am $USER, with uid $UID&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Useful Vector Configuration Snippets</title>
        <published>2022-06-12T00:00:00+00:00</published>
        <updated>2022-06-12T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/vector-snippets/"/>
        <id>https://mrkaran.dev/tils/vector-snippets/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/vector-snippets/">&lt;h2 id=&quot;output-to-file&quot;&gt;Output to File&lt;a class=&quot;zola-anchor&quot; href=&quot;#output-to-file&quot; aria-label=&quot;Anchor link for: output-to-file&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;file_out&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; General&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  type&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; required&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  inputs&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;log_files&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  compression&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; optional, default&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  path&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;./app-logs/access_token-%Y-%m-%d.log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; required&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Encoding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  encoding&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;codec&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;ndjson&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; required&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Healthcheck&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  healthcheck&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; optional, default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;dummy-sink&quot;&gt;Dummy Sink&lt;a class=&quot;zola-anchor&quot; href=&quot;#dummy-sink&quot; aria-label=&quot;Anchor link for: dummy-sink&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;blackhole&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  type&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;blackhole&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  inputs&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;format_haproxy_logs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;console-sink&quot;&gt;Console Sink&lt;a class=&quot;zola-anchor&quot; href=&quot;#console-sink&quot; aria-label=&quot;Anchor link for: console-sink&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;console_out&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  type&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  inputs&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;log_files&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  target&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;stdout&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  encoding&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;codec&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;cli-commands&quot;&gt;CLI Commands&lt;a class=&quot;zola-anchor&quot; href=&quot;#cli-commands&quot; aria-label=&quot;Anchor link for: cli-commands&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; vector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; vrl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; vector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; top&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Securing Your ClickHouse Server Using RBAC</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/clickhouse-securing-server-with-rbac/"/>
        <id>https://mrkaran.dev/tils/clickhouse-securing-server-with-rbac/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/clickhouse-securing-server-with-rbac/">&lt;p&gt;Clickhouse offers a wide variety of &lt;a rel=&quot;external&quot; href=&quot;https://clickhouse.tech/docs/en/operations/access-rights/&quot;&gt;managing&lt;/a&gt; access control using RBAC. As mentioned in the docs, Clickhouse offers two ways to manage users, roles, policies etc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL driven approach&lt;/li&gt;
&lt;li&gt;Using configuration files like &lt;code&gt;users.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The docs mention SQL driven approach is more recommended.&lt;/p&gt;
&lt;p&gt;Clickhouse comes with a &lt;code&gt;default&lt;/code&gt; user which &lt;em&gt;unfortunately&lt;/em&gt; is widely permissive. It is attached to a default profile, which allows access to entire DB:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; USER&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; default&lt;/span&gt;&lt;span&gt; IDENTIFIED &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;WITH&lt;/span&gt;&lt;span&gt; plaintext_password SETTINGS &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;PROFILE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; default&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;GRANT&lt;/span&gt;&lt;span&gt; ALL &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; TO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; WITH&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; GRANT&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; OPTION&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here’s a &lt;strong&gt;checklist&lt;/strong&gt; to follow in case you want to secure your Clickhouse installation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;/&gt;
Enable access-management for &lt;code&gt;default&lt;/code&gt; user.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;/&gt;
Create a new admin user with SHA-256 password.
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;/&gt;
Restrict to local network interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;/&gt;
Revoke permissions or remove the &lt;code&gt;default&lt;/code&gt; user.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;1-restrict-the-default-user-to-connect-only-via-local-network-interface&quot;&gt;1. Restrict the &lt;code&gt;default&lt;/code&gt; user to connect only via local network interface.&lt;a class=&quot;zola-anchor&quot; href=&quot;#1-restrict-the-default-user-to-connect-only-via-local-network-interface&quot; aria-label=&quot;Anchor link for: 1-restrict-the-default-user-to-connect-only-via-local-network-interface&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The default configuration allows the &lt;code&gt;default&lt;/code&gt; user to connect from &lt;strong&gt;any&lt;/strong&gt; IP. This is dangerous since Clickhouse also offers an HTTP API (running on port 8123) by default). If there’s no &lt;code&gt;token&lt;/code&gt;/&lt;code&gt;basic_auth&lt;/code&gt; passed in the HTTP request to this API, the &lt;code&gt;default&lt;/code&gt; user is picked up. So, this means if you don’t revoke permissions from &lt;code&gt;default&lt;/code&gt; user, anyone who can access Clickhouse API &lt;em&gt;has&lt;/em&gt; access to entire DB.&lt;/p&gt;
&lt;p&gt;To fix this, edit &lt;code&gt;/etc/clickhouse-server/users.xml&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;networks&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;::/0&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;networks&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And make it:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;networks&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;::1&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;127.0.0.1&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;ip&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;networks&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;2-create-an-admin-user&quot;&gt;2. Create an Admin user&lt;a class=&quot;zola-anchor&quot; href=&quot;#2-create-an-admin-user&quot; aria-label=&quot;Anchor link for: 2-create-an-admin-user&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREATE USER IF NOT EXISTS admin IDENTIFIED WITH SHA256_PASSWORD BY &amp;#39;{{ADMIN_PASSWORD}}&amp;#39; HOST LOCAL;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRANT ALL ON *.* TO admin WITH GRANT OPTION;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates an &lt;code&gt;admin&lt;/code&gt; user with and stores the SHA-256 hash of the password in &lt;code&gt;/var/lib/clickhouse/access&lt;/code&gt;. It also additonally only allows connection from a local interface using &lt;code&gt;HOST LOCAL&lt;/code&gt; directive.&lt;/p&gt;
&lt;h3 id=&quot;3-remove-default-user&quot;&gt;3. Remove default user&lt;a class=&quot;zola-anchor&quot; href=&quot;#3-remove-default-user&quot; aria-label=&quot;Anchor link for: 3-remove-default-user&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can safely remove the &lt;code&gt;default&lt;/code&gt; user as it’s not really required.&lt;/p&gt;
&lt;p&gt;Edit &lt;code&gt;users.xml&lt;/code&gt; and remove everything inside &lt;code&gt;&amp;lt;users&amp;gt;&amp;lt;default&amp;gt;&lt;/code&gt; block.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;users&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #8DDB8C);&quot;&gt;users&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clickhouse automatically picks up changes from this file, so you don’t need to restart the server.&lt;/p&gt;
&lt;h2 id=&quot;creating-additional-users&quot;&gt;Creating Additional Users&lt;a class=&quot;zola-anchor&quot; href=&quot;#creating-additional-users&quot; aria-label=&quot;Anchor link for: creating-additional-users&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Follow the SQL driven approach to add more users. If the users have some common access policies, you can create a role with these policies and assign roles to the user.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://clickhouse.tech/docs/en/operations/access-rights/&quot;&gt;offficial docs&lt;/a&gt; are really good to help you further.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Decoding JSON in Golang: Handling String Encoded Data Types</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-decode-json-with-proper-types/"/>
        <id>https://mrkaran.dev/tils/golang-decode-json-with-proper-types/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-decode-json-with-proper-types/">&lt;p&gt;I had to unmarshall a &lt;code&gt;POST&lt;/code&gt; body JSON payload into a &lt;code&gt;struct&lt;/code&gt; but the payload had all fields as &lt;code&gt;string&lt;/code&gt; and I wanted to have proper data types for the keys.&lt;/p&gt;
&lt;p&gt;This is how the &lt;code&gt;payload&lt;/code&gt; looked like:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;bufsize&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;512&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;IN&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;duration&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;0.000072844&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;33531&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;INFO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;mrkaran.dev.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;proto&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;udp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;rcode&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;NOERROR&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;rflags&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;qr,aa,rd,ra&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;rsize&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;83&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;server_addr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;server_port&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;53256&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;    &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #8DDB8C);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some of the fields like &lt;code&gt;bufsize&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;id&lt;/code&gt; should be of type &lt;code&gt;int32&lt;/code&gt;. To decode these &lt;code&gt;string&lt;/code&gt; fields into the types defined in struct, we can use &lt;code&gt;json:&quot;,string&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is how the &lt;code&gt;struct&lt;/code&gt; looks:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; Log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        BufSize&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;bufsize,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Class&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;      string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;class&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        DO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;         bool&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;    `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;do,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Duration&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;   float64&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;duration,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ID&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;         int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;id,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Level&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;      string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;level&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;       string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Proto&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;      string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;proto&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        RCode&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;      string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;rcode&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        RFlags&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;     string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;rflags&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        RSize&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;      int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;rsize,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ServerAddr&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;server_addr&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        SererPort&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;server_port,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Size&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;       int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;     `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;size,string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;       string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;  `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;json:&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quoting from the &lt;a rel=&quot;external&quot; href=&quot;https://golang.org/pkg/encoding/json/&quot;&gt;docs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The “string” option signals that a field is stored as JSON inside a JSON-encoded string. It applies only to fields of string, floating point, integer, or boolean types. This extra level of encoding is sometimes used when communicating with JavaScript programs:&lt;/p&gt;
&lt;/blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Inspecting HTTP Headers in Golang</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-inspect-http-headers/"/>
        <id>https://mrkaran.dev/tils/golang-inspect-http-headers/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-inspect-http-headers/">&lt;p&gt;The following snippet is used to create a mini HTTP server to dump all HTTP headers of an incoming request which can be useful for debugging.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; main&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;fmt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;net/http&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;       &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;net/http/httputil&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; index&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ResponseWriter&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; req&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;       //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Save a copy of this request for debugging.  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       requestDump&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span&gt; httputil&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;DumpRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; true&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;       if&lt;/span&gt;&lt;span&gt; err&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;               fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Fprintf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;oops! check logs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;               return&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       }&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Fprintf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;%v&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; string&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;requestDump&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; ping&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;ResponseWriter&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #F69D50);&quot;&gt; req&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Fprintf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;pong&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;HandleFunc&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;HandleFunc&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/ping&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ping&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       port&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; :=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;:6666&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;starting server at &lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #F47067);&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; port&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;ListenAndServe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; nil&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Profiling Golang Applications with pprof</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-profile-golang-applications/"/>
        <id>https://mrkaran.dev/tils/golang-profile-golang-applications/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-profile-golang-applications/">&lt;h2 id=&quot;creating-a-profile&quot;&gt;Creating a profile&lt;a class=&quot;zola-anchor&quot; href=&quot;#creating-a-profile&quot; aria-label=&quot;Anchor link for: creating-a-profile&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To profile Golang applications, &lt;code&gt;pprof&lt;/code&gt; package is widely used. There’s a nice wrapper around it &lt;a rel=&quot;external&quot; href=&quot;https://github.com/pkg/profile&quot;&gt;https://github.com/pkg/profile&lt;/a&gt; which allows you to just drop one line in your application and start generating profiles:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  defer&lt;/span&gt;&lt;span&gt; profile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Start&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;ProfilePath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; profile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NoShutdownHook&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #DCBDFB);&quot;&gt;Stop&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; rest of your application&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;profile.NoShutdownHook&lt;/code&gt;: This is important to pass to &lt;code&gt;profile.Start&lt;/code&gt; if you’re shutting down your application with a SIGINT/SIGTERM and not handling profile storage directly. This will ensure the &lt;code&gt;.pprof&lt;/code&gt; file gets saved correctly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;visualizing&quot;&gt;Visualizing&lt;a class=&quot;zola-anchor&quot; href=&quot;#visualizing&quot; aria-label=&quot;Anchor link for: visualizing&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;go tool pprof -http=&quot;:8000&quot; ./cpu.pprof&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This allows you to visualize the &lt;code&gt;pprof&lt;/code&gt; file in Graphviz and the more helpful Flamegraph visualizations.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Update Your Golang Version</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/golang-update-golang-version/"/>
        <id>https://mrkaran.dev/tils/golang-update-golang-version/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/golang-update-golang-version/">&lt;p&gt;The below shell script is helpful to grab a specific Go version and update it locally.&lt;/p&gt;
&lt;p&gt;To use it you can tweak the following variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PLATFORM&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; /bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;euf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Download latest Golang release for AMD64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; https://golang.org/dl/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLATFORM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Download Go&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;mktemp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Downloading Go version &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;sL&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; go&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;PLATFORM&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; https://golang.org/dl/go&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;PLATFORM&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Remove old Go&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Removing old Go version&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;rf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /usr/local/go&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Install new Go&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; /usr/local&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;xzf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;PLATFORM&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;Creating the skeleton for your local users go directory...&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ~/go/{bin,pkg,src}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;Setting up GOPATH&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;export GOPATH=~/go&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;amp;&amp;amp; source ~/.profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;Setting PATH to include golang binaries&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;export PATH=&amp;#39;$PATH&amp;#39;:/usr/local/go/bin:$GOPATH/bin&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;amp;&amp;amp; source ~/.profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; Cleanup&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; go&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;{&lt;/span&gt;&lt;span&gt;VERSION&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;PLATFORM&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;first-time&quot;&gt;First Time&lt;a class=&quot;zola-anchor&quot; href=&quot;#first-time&quot; aria-label=&quot;Anchor link for: first-time&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’re installing for the first time, you can uncomment this blob from the above script:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;Setting up GOPATH&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;export GOPATH=~/go&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;amp;&amp;amp; source ~/.profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;Setting PATH to include golang binaries&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; echo &amp;quot;export PATH=&amp;#39;$PATH&amp;#39;:/usr/local/go/bin:$GOPATH/bin&amp;quot; &amp;gt;&amp;gt; ~/.profile &amp;amp;&amp;amp; source ~/.profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mofified it from a gist I found &lt;a rel=&quot;external&quot; href=&quot;https://gist.github.com/Zate/b3c8e18cbb2bbac2976d79525d95f893&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating a Table of Images in Markdown</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/misc-add-table-of-images-in-markdown/"/>
        <id>https://mrkaran.dev/tils/misc-add-table-of-images-in-markdown/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/misc-add-table-of-images-in-markdown/">&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;img&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; src=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;image.png&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; width=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; style=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;display: inline&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/t&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;img&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; src=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;image.png&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; width=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; style=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;display: inline&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/t&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;/tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;img&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; src=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;image.png&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; width=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; style=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;display: inline&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;/t&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;/tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/table&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Resolving Pritunl Connection Issues with a Custom DNS Server</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/misc-connect-to-pritunl-with-a-custom-dns-server/"/>
        <id>https://mrkaran.dev/tils/misc-connect-to-pritunl-with-a-custom-dns-server/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/misc-connect-to-pritunl-with-a-custom-dns-server/">&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;a class=&quot;zola-anchor&quot; href=&quot;#problem&quot; aria-label=&quot;Anchor link for: problem&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I faced this issue when I disabled &lt;code&gt;systemd-resolved&lt;/code&gt; on my system (Ubuntu 20.04) but Pritunl tried to update the DNS entry via &lt;code&gt;systemd-resolvd&lt;/code&gt; and it failed when the service wasn’t running.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemd-resolved&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; disable&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemd-resolved&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Logs where it tried to look for the service:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; ~/.config/pritunl/profiles/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;4&amp;gt;&lt;/span&gt;&lt;span&gt;Mar 10 23:54:25 a65e97e8075b8b500c5e9cfe29083e4d-up.sh: Link &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;tun0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; coming up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;4&amp;gt;&lt;/span&gt;&lt;span&gt;Mar 10 23:54:25 a65e97e8075b8b500c5e9cfe29083e4d-up.sh: Adding IPv4 DNS Server 1.1.1.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;4&amp;gt;&lt;/span&gt;&lt;span&gt;Mar 10 23:54:25 a65e97e8075b8b500c5e9cfe29083e4d-up.sh: SetLinkDNS(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Call&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; failed:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Unit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; dbus-org.freedesktop.resolve1.service&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; found.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Mar 10 23:54:25 a65e97e8075b8b500c5e9cfe29083e4d-up.sh: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;busctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt; exited with status 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Wed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Mar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 23:54:25&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2021&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; WARNING:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Failed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; command&lt;/span&gt;&lt;span&gt; (--up/--down&lt;/span&gt;&lt;span&gt;): external program exited with error status: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;Wed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Mar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; 23:54:25&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 2021&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; Exiting&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; due&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; fatal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; error&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can see it fails at the step &lt;code&gt;Call failed: Unit dbus-org.freedesktop.resolve1.service not found&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;a class=&quot;zola-anchor&quot; href=&quot;#solution&quot; aria-label=&quot;Anchor link for: solution&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The solution is to disable &lt;code&gt;systemd-resolved&lt;/code&gt; at the &lt;code&gt;NetworkManager&lt;/code&gt; level. You need to add the following config block which overrides these settings at &lt;code&gt;/etc/NetworkManager/NetworkManager.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;dns&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;systemd-resolved&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Restart &lt;code&gt;network-manager&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #F69D50);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; restart&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; NetworkManager&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, when you try to connect to Pritunl, it will work fine :)&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Generating a Million Rows of Random Data in PostgreSQL</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/postgres-generate-million-rows/"/>
        <id>https://mrkaran.dev/tils/postgres-generate-million-rows/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/postgres-generate-million-rows/">&lt;p&gt;I wanted a quick way to generate some random data in a PostgreSQL database and insert 1mn rows.&lt;/p&gt;
&lt;p&gt;The following query shows how to generate a &lt;code&gt;UUIDv4&lt;/code&gt; and insert 1mn rows:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;INSERT INTO&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; table&lt;/span&gt;&lt;span&gt; (uuid, &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;SELECT&lt;/span&gt;&lt;span&gt; uuid_in(overlay(overlay(md5(random&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; ||&lt;/span&gt;&lt;span&gt; clock_timestamp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;text&lt;/span&gt;&lt;span&gt;) placing &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 13&lt;/span&gt;&lt;span&gt;) placing to_hex(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;floor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;*&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 8&lt;/span&gt;&lt;span&gt;)::&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;int&lt;/span&gt;&lt;span&gt;)::&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; 17&lt;/span&gt;&lt;span&gt;)::cstring), &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;load tests&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #96D0FF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt; generate_series&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;1000000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Resetting the WAL Log in PostgreSQL After a Crash</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/postgres-reset-wal-log/"/>
        <id>https://mrkaran.dev/tils/postgres-reset-wal-log/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/postgres-reset-wal-log/">&lt;p&gt;In an event of a DB crash or an unclean shutdown (host node failure), sometimes Postgres cannot find a valid checkpoint to start. The logs look like:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:44.977 UTC [26] LOG:  database system was shut down at 2021-02-16 03:50:02 UTC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:44.978 UTC [26] LOG:  record with incorrect prev-link 1DF0000/7BB0000 at 0/D786C2B0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:44.978 UTC [26] LOG:  invalid primary checkpoint record&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:44.978 UTC [26] PANIC:  could not locate a valid checkpoint record&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:45.252 UTC [25] LOG:  startup process (PID 26) was terminated by signal 6: Aborted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:45.252 UTC [25] LOG:  aborting startup due to startup process failure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:45.254 UTC [25] LOG:  database system is shut down&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The line to notice here is:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2021-02-16 04:09:44.978 UTC [26] PANIC:  could not locate a valid checkpoint record&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In such a scenario, perform a WAL Log Reset with &lt;a rel=&quot;external&quot; href=&quot;https://www.postgresql.org/docs/10/app-pgresetwal.html&quot;&gt;&lt;code&gt;pg_resetwal&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Quoting from the docs:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;pg_resetwal clears the write-ahead log (WAL) and optionally resets some other control information stored in the pg_control file. This function is sometimes needed if these files have become corrupted. It should be used only as a last resort, when the server will not start due to such corruption.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ su postgres&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ pg_resetwal /var/lib/postgresql/data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Postgres should initialise now. But as the docs clarify further:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;After running this command, it should be possible to start the server, but bear in mind that the database might contain inconsistent data due to partially-committed transactions. You should immediately dump your data, run initdb, and reload. After reload, check for inconsistencies and repair as needed.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Converting Python Requests to cURL Commands</title>
        <published>2022-05-02T00:00:00+00:00</published>
        <updated>2022-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://mrkaran.dev/tils/python-transform-requests-to-curl/"/>
        <id>https://mrkaran.dev/tils/python-transform-requests-to-curl/</id>
        
        <content type="html" xml:base="https://mrkaran.dev/tils/python-transform-requests-to-curl/">&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ADBAC7); background-color: light-dark(#FFFFFF, #22272E);&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#B31D28, #FF938A);font-style: italic;&quot;&gt;$&lt;/span&gt;&lt;span&gt; pip&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; curlify&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F47067);&quot;&gt;import&lt;/span&gt;&lt;span&gt; curlify&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #6CB6FF);&quot;&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;curlify&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;to_curl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt;  #&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #768390);&quot;&gt; r is the response object from the requests library.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
</feed>
