--- - name: Деплой почтового LXC с примонтированным датасетом hosts: localhost become: yes gather_facts: no vars: target_name: "bit-mail-srv" vlan_id: 60 # Пути ZFS root_ds: "pool/lxc/{{ target_name }}" mail_data_ds: "pool/bit-mail-data" template_snap: "pool/lxc/template-debian12@snap0" # Лимиты root_quota: "10G" tasks: - name: 1. Генерация MAC-адреса set_fact: generated_mac: "00:16:3e:{{ (target_name | checksum) | truncate(6, False, '') | batch(2) | map('join') | join(':') }}" - name: 2. Создание системного ZFS клона (rootfs) community.general.zfs: name: "{{ root_ds }}" origin: "{{ template_snap }}" state: present extra_zfs_properties: mountpoint: legacy quota: "{{ root_quota }}" - name: 3. Подготовка датасета для почты community.general.zfs: name: "{{ mail_data_ds }}" state: present extra_zfs_properties: mountpoint: "/{{ mail_data_ds }}" # Монтируем в корень хоста - name: 3.1 Права для непривилегированного контейнера (mail:8) file: path: "/{{ mail_data_ds }}" owner: 1000008 group: 1000008 mode: '0775' - name: 5. Запись конфига с монтированием /var/mail copy: dest: "/var/lib/lxc/{{ target_name }}/config" content: | lxc.include = /usr/share/lxc/config/common.conf # Настройки автозапуска lxc.start.auto = 1 lxc.start.delay = 5 lxc.start.order = 10 lxc.arch = x86_64 lxc.idmap = u 0 1000000 65536 lxc.idmap = g 0 1000000 65536 lxc.net.0.type = veth lxc.net.0.link = br0 lxc.net.0.flags = up lxc.net.0.name = eth0 lxc.net.0.veth.vlan.id = {{ vlan_id }} lxc.net.0.hwaddr = {{ generated_mac }} lxc.uts.name = {{ target_name }} lxc.rootfs.path = zfs:{{ root_ds }} # Монтирование внешнего датасета в контейнер # синтаксис: путь_на_хосте точка_в_контейнере тип опции lxc.mount.entry = /{{ mail_data_ds }} var/mail none bind,create=dir 0 0 - name: 6. Запуск контейнера community.general.lxc_container: name: "{{ target_name }}" state: started - name: Итог debug: msg: "Почтовый сервер {{ target_name }} запущен. Почта в {{ mail_data_ds }} -> /var/mail"