<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>M9K blog: заметки с тегом DevOps</title>
<link>https://blog.m9k.space/tags/devops/</link>
<description>Заметки обо всём: devops, lifestyle, культура.</description>
<author>M</author>
<language>ru</language>
<generator>E2 (v3877; Aegea)</generator>

<itunes:owner>
<itunes:name>M</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Заметки обо всём: devops, lifestyle, культура.</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Multistage Docker — как пересобирать без кэша не весь Dockefile</title>
<guid isPermaLink="false">197</guid>
<link>https://blog.m9k.space/all/multistage-docker-kak-peresobirat-bez-kesha-ne-ves-dockefile/</link>
<pubDate>Tue, 05 Aug 2025 08:47:54 +0000</pubDate>
<author>M</author>
<comments>https://blog.m9k.space/all/multistage-docker-kak-peresobirat-bez-kesha-ne-ves-dockefile/</comments>
<description>
&lt;p&gt;Возникла необходимость пересобрать отдельный stage-контейнер из Dockerfile. Первый собранный контейнер — это контейнер сборки OpenSSL, который выполняется очень, очень долго. Для того, чтоб сэкономить время, во вторую часть добавляем:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Stage 1: OpenSSL-сборка (пусть останется закешированной)
FROM debian:bookworm AS openssl-build
# ... 
# Stage 2: основная
FROM debian:bookworm-slim
# Аргумент, чтобы инвалидировать кэш
ARG CACHE_BREAKER=default
# Используем его в ENV, чтобы Docker счёл слой новым
ENV CACHE_BREAKER=${CACHE_BREAKER}&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Old Apache Kafka + ZooKeeper + Clickhouse in Docker</title>
<guid isPermaLink="false">150</guid>
<link>https://blog.m9k.space/all/old-apache-kafka-zookeeper-clickhouse-in-docker/</link>
<pubDate>Thu, 02 Nov 2023 07:52:07 +0000</pubDate>
<author>M</author>
<comments>https://blog.m9k.space/all/old-apache-kafka-zookeeper-clickhouse-in-docker/</comments>
<description>
&lt;p&gt;&lt;i&gt;docker-compose.yml&lt;/i&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;version: '3.5'
services:
  kafka:
    image: bitnami/kafka:2.6.0
    ports:
      - &amp;quot;9092:9092&amp;quot;
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_LISTENERS=PLAINTEXT://:9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.23.0.13:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
    networks:
      clickhouse-network:
        ipv4_address: 172.23.0.13
  zookeeper:
    image: zookeeper:3.5.8
    container_name: zookeeper
    hostname: zookeeper
    ports:
      - &amp;quot;2181:2181&amp;quot;
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    networks:
      clickhouse-network:
        ipv4_address: 172.23.0.10
  clickhouse01:
    image: yandex/clickhouse-server:20.8.12.2
    container_name: clickhouse01
    hostname: clickhouse01
    networks:
      clickhouse-network:
        ipv4_address: 172.23.0.11
    ports:
      - &amp;quot;127.0.0.1:8123:8123&amp;quot;
      - &amp;quot;127.0.0.1:9000:9000&amp;quot;
    volumes:
      - ${PWD}/clickhouse01:/etc/clickhouse-server
      - /mnt/volume/clickhouse01/data:/var/lib/clickhouse/
      - /mnt/volume/clickhouse01/logs:/var/log/clickhouse-server/
    depends_on:
      - zookeeper
  clickhouse02:
    image: yandex/clickhouse-server:20.8.12.2
    container_name: clickhouse02
    hostname: clickhouse02
    networks:
      clickhouse-network:
        ipv4_address: 172.23.0.12
    volumes:
      - ${PWD}/clickhouse02:/etc/clickhouse-server
      - /mnt/volume/clickhouse02/data:/var/lib/clickhouse/
      - /mnt/volume/clickhouse02/logs:/var/log/clickhouse-server/
    depends_on:
      - zookeeper

networks:
  clickhouse-network:
    name: clickhouse-network
    ipam:
      config:
        - subnet: 172.23.0.0/24&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>j2 Whitespace Control</title>
<guid isPermaLink="false">144</guid>
<link>https://blog.m9k.space/all/j2-whitespace-control/</link>
<pubDate>Thu, 19 Oct 2023 10:48:54 +0000</pubDate>
<author>M</author>
<comments>https://blog.m9k.space/all/j2-whitespace-control/</comments>
<description>
&lt;p&gt;Столкнулся с проблемой, что &lt;i&gt;if-else&lt;/i&gt; condition отлично отрабатывает в рамках Ansible-скрипта, но при этом в выходном файле генерится после условия пустая строка. Поковырял &lt;a href="https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control"&gt;ман&lt;/a&gt;, называется это &lt;i&gt;trim_blocks&lt;/i&gt; и &lt;i&gt;lstrip_blocks&lt;/i&gt; соответственно.&lt;br /&gt;
Выглядит следующим образом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;div&amp;gt;
    {% if True %}
        yay
    {% endif %}
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;div&amp;gt;

        yay

&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Лечится магическим символом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;-&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В случае с генерируемым из темплейта Ansible-файла:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;{% if variable== 'value' %}
    &amp;quot;bla&amp;quot;
{% else %}
    &amp;quot;bla-bla&amp;quot;
{% endif -%}&lt;/code&gt;&lt;/pre&gt;</description>
</item>


</channel>
</rss>