--- - name: Финальное развертывание Unprivileged LXC (ZFS + VLAN) hosts: localhost connection: local become: yes gather_facts: no vars: # Базовый конфиг (ID маппинг согласно вашему /etc/subuid) base_lxc_conf: | lxc.include = /usr/share/lxc/config/common.conf lxc.include = /usr/share/lxc/config/debian.common.conf lxc.arch = x86_64 # Маппинг для безопасного root (хост: 1,000,000 -> контейнер: 0) 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 tasks: - name: 1. Мгновенный клон из обновленного шаблона shell: "zfs clone pool/lxc/template-debian12@snap0 pool/lxc/{{ item }}" loop: [ 'bit-srv-prn', 'mail-bit-it-ru' ] - name: 2. Настройка Legacy Mountpoint (важно для ZFS + LXC) shell: "zfs set mountpoint=legacy pool/lxc/{{ item }}" loop: [ 'bit-srv-prn', 'mail-bit-it-ru' ] - name: 3. Подготовка директорий контейнеров file: path: "/var/lib/lxc/{{ item }}" state: directory loop: [ 'bit-srv-prn', 'mail-bit-it-ru' ] - name: 4. Права на внешние данные почты (UID 1000000) file: path: /pool/bit-mail-data owner: "1000000" group: "1000000" state: directory recurse: yes - name: 5. Запись конфига ПРИНТЕР (VLAN 30) copy: dest: /var/lib/lxc/bit-srv-prn/config content: | {{ base_lxc_conf }} lxc.uts.name = bit-srv-prn lxc.rootfs.path = zfs:pool/lxc/bit-srv-prn lxc.net.0.veth.vlan.id = 30 - name: 6. Запись конфига ПОЧТА (VLAN 60 + Mount) copy: dest: /var/lib/lxc/mail-bit-it-ru/config content: | {{ base_lxc_conf }} lxc.uts.name = mail-bit-it-ru lxc.rootfs.path = zfs:pool/lxc/mail-bit-it-ru lxc.net.0.veth.vlan.id = 60 lxc.mount.entry = /pool/bit-mail-data var/mail none bind,create=dir 0 0 - name: 7. Запуск контейнеров shell: "lxc-start -n {{ item }} -d" loop: [ 'bit-srv-prn', 'mail-bit-it-ru' ] - name: 8. Проверка статуса (ждем загрузку) pause: seconds: 5 - name: 9. Итоговая таблица shell: "lxc-ls -f" register: lxc_final - name: Результат debug: msg: "{{ lxc_final.stdout_lines }}"