113 lines
3.6 KiB
Python
113 lines
3.6 KiB
Python
from pyinfra import host
|
|
from pyinfra.operations import server, files, systemd
|
|
|
|
SUDO = True
|
|
|
|
# This suppose you have:
|
|
# sda 8:0 0 2.7T 0 disk
|
|
# ├─sda1 8:1 0 512M 0 part
|
|
# │ └─md0 9:0 0 511M 0 raid1 /boot
|
|
# ├─sda2 8:2 0 40G 0 part
|
|
# │ └─md1 9:1 0 40G 0 raid1 /
|
|
# └─sda3 8:3 0 1M 0 part
|
|
# sdb 8:16 0 2.7T 0 disk
|
|
# ├─sdb1 8:17 0 512M 0 part
|
|
# │ └─md0 9:0 0 511M 0 raid1 /boot
|
|
# ├─sdb2 8:18 0 40G 0 part
|
|
# │ └─md1 9:1 0 40G 0 raid1 /
|
|
# └─sdb3 8:19 0 1M 0 part
|
|
# sdc 8:32 0 223.6G 0 disk
|
|
# └─sdc1 8:33 0 24G 0 part
|
|
|
|
if not host.fact.command('lsblk | grep sda4 || true'):
|
|
server.shell(
|
|
name='Create sda4 for zpool',
|
|
commands=['sgdisk -n4:0:0 -t4:BF00 /dev/sda', 'partprobe']
|
|
)
|
|
|
|
if not host.fact.command('lsblk | grep sdb4 || true'):
|
|
server.shell(
|
|
name='Create sdb4 for zpool',
|
|
commands=['sgdisk -n4:0:0 -t4:BF00 /dev/sdb', 'partprobe']
|
|
)
|
|
|
|
if not host.fact.command('lsblk | grep sdc2 || true'):
|
|
server.shell(
|
|
name='Create sdc2 for ZFS cache L2ARC',
|
|
commands=['sgdisk -n2:0:0 -t2:FD00 /dev/sdc', 'partprobe']
|
|
)
|
|
|
|
# zfs.key is not stored on GIT, but on KeePassXC
|
|
# When using new server be sure to set right disk ID
|
|
if not host.fact.command('zpool list local | grep local || true'):
|
|
server.shell(
|
|
name='Create ZFS pool',
|
|
commands=['zpool create -o ashift=12 -o autotrim=on -O encryption=aes-256-gcm -O keylocation=file:///etc/zfs.key -O keyformat=passphrase -O acltype=posixacl -O canmount=off -O compression=lz4 -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa local mirror /dev/disk/by-id/ata-ST33000650NS_Z290FDG2-part4 /dev/disk/by-id/ata-ST33000650NS_Z290FEJQ-part4 cache /dev/disk/by-id/ata-INTEL_SSDSC2CW240A3_CVCV306301L3240CGN-part2']
|
|
)
|
|
|
|
files.put(
|
|
name='Upload systemd zfs-load-key service',
|
|
src='files/zfs-load-key.service',
|
|
dest='/etc/systemd/system/zfs-load-key.service',
|
|
user='root',
|
|
group='root',
|
|
mode='644',
|
|
)
|
|
|
|
systemd.daemon_reload(
|
|
name='Reload systemd',
|
|
user_mode=False,
|
|
)
|
|
|
|
systemd.service(
|
|
name='Enable zfs-load-key service',
|
|
service='zfs-load-key.service',
|
|
enabled=True,
|
|
restarted=False,
|
|
running=False,
|
|
)
|
|
|
|
files.put(
|
|
name='Upload LXD config',
|
|
src='files/lxd.yml',
|
|
dest='/tmp/lxd.yml',
|
|
mode='644',
|
|
)
|
|
|
|
if not host.fact.command('lxc storage list | grep local || true'):
|
|
server.shell(
|
|
name='Init LXD',
|
|
commands=['cat /tmp/lxd.yml | lxd init --preseed']
|
|
)
|
|
|
|
if not host.fact.command('lxc storage volume list default | grep backups || true'):
|
|
server.shell(
|
|
name='Set LXD backups volumes',
|
|
commands=['lxc storage volume create default backups', 'lxc config set storage.backups_volume default/backups']
|
|
)
|
|
|
|
if not host.fact.command('lxc storage volume list default | grep images || true'):
|
|
server.shell(
|
|
name='Set LXD images volumes',
|
|
commands=['lxc storage volume create default images', 'lxc config set storage.images_volume default/images']
|
|
)
|
|
|
|
files.directory(
|
|
name='Ensure /var/backups/lxd exists',
|
|
path='/var/backups/lxd',
|
|
user='root',
|
|
group='root',
|
|
mode=700
|
|
)
|
|
|
|
if not host.fact.command('zfs list | grep exports || true'):
|
|
server.shell(
|
|
name='Create ZFS volume exports',
|
|
commands=['zfs create local/exports -o mountpoint=/var/backups/lxd']
|
|
)
|
|
|
|
server.shell(
|
|
name='Mount local/exports',
|
|
commands=['zfs mount local/exports'],
|
|
)
|
|
|