# ============================================================================ # Сервис №8 по плану (docs/ai/migration-tofu.md, раздел 5): adguard. # DNS-фильтр всей LAN. Жёсткое окно простоя только между шагами 4.5.14 и # 4.5.17 (два контейнера на 192.168.1.28 одновременно невозможны). # # OLD vmid 144, узел mini-pc, боевой адрес 192.168.1.28. # Эталон снят 2026-09-02: ssh mini-pc sudo pct config 144 (дословно совпадает # с /etc/pve/lxc/144.conf): # # arch: amd64 # cmode: shell # cores: 1 # features: nesting=1,keyctl=1 # hostname: adguard # memory: 512 # nameserver: 1.1.1.1 # net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.1.1,ip=192.168.1.28/24,type=veth # onboot: 1 # ostype: debian # rootfs: local-lvm:vm-144-disk-0,size=8G # startup: order=40 # swap: 512 # unprivileged: 1 # lxc.cgroup2.devices.allow: c 10:229 rwm # lxc.mount.entry: /dev/fuse dev/fuse none bind,create=file # # vm_id 158 — новый VMID для blue-green переезда (назначен, не менять). # TMPIP 192.168.1.17 используется только на шаге 4.3 (проверка перед cutover). # После шага 4.5.15 адрес меняется на боевой 192.168.1.28, OLD (144) # останавливается и остаётся откатом минимум неделю. # # --- /dev/fuse: features.fuse, а не device_passthrough ---------------------- # Эталонные lxc.cgroup2.devices.allow + lxc.mount.entry для /dev/fuse — ручной # обход (lineinfile по /etc/pve/lxc/144.conf в pve-adguard.yml), потому что # Proxmox API сырые lxc.* ключи не принимает. Заменяется штатным флагом PVE # features.fuse, проверенным на пилоте VMID 199 и на сервисах 2-7. Следствие: # pct config нового контейнера покажет features: fuse=1,keyctl=1,nesting=1 — # текстуально иначе, чем эталон, при том же эффекте. См. tofu/README.md. # # --- Данные ---------------------------------------------------------------- # /opt/adguard/{conf,work} (~313 МБ, почти всё — work/: журнал запросов, # статистика, кэш фильтров). conf/AdGuardHome.yaml несёт весь конфиг, включая # хэш пароля админа, DNS rewrites, upstream и клиентов. Переносится целиком # на шаге 4.4; Ansible этим каталогом не управляет. # ============================================================================ resource "proxmox_virtual_environment_container" "adguard" { node_name = "mini-pc" vm_id = 158 unprivileged = true start_on_boot = true started = true tags = ["tofu"] initialization { hostname = "adguard" ip_config { ipv4 { address = "192.168.1.28/24" gateway = "192.168.1.1" } } dns { servers = ["1.1.1.1"] } user_account { keys = [trimspace(file(pathexpand("~/.ssh/id_ed25519_homelab.pub")))] } } operating_system { template_file_id = "local:vztmpl/debian-13-standard_13.1-2_amd64.tar.zst" type = "debian" } cpu { cores = 1 } memory { dedicated = 512 swap = 512 } disk { datastore_id = "local-lvm" size = 8 } # Эталон: features: nesting=1,keyctl=1 плюс проброс /dev/fuse через сырые # lxc.* строки. fuse=1 — штатная замена этого обхода (см. комментарий выше). features { nesting = true keyctl = true fuse = true } # roles/pve_lxc всем контейнерам ставит cmode=shell (pve_lxc_cmode), провайдер # это отслеживает через блок console.type — без него на следующем apply # откатит на дефолт Proxmox tty. Обнаружено 2026-09-02 на emergency-bot, # см. tofu/README.md. console { type = "shell" } network_interface { name = "eth0" bridge = "vmbr0" firewall = true } startup { order = 40 } } output "adguard" { description = "Что проверять на узле после apply" value = { vmid = proxmox_virtual_environment_container.adguard.vm_id node = proxmox_virtual_environment_container.adguard.node_name verify = "ssh mini-pc sudo pct config ${proxmox_virtual_environment_container.adguard.vm_id}" } }