77 lines
2.7 KiB
YAML
77 lines
2.7 KiB
YAML
---
|
|
- 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"
|