This repository has been archived on 2025-02-14. You can view files and clone it, but cannot push or open issues or pull requests.
pyinfra-lxd/setup-zfs-and-lxd.py
2022-01-29 20:47:34 +09:00

95 lines
2.3 KiB
Python

from pyinfra import host
from pyinfra.operations import server, files, systemd, apt
SUDO = True
apt.packages(
name='Install packages',
packages=['zfsutils-linux'],
update=True,
)
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 acltype=posixacl -O canmount=off -O compression=lz4 -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa local /dev/vdb']
)
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.put(
name='Push zfs-scrub script',
src='files/zfs-scrub.sh',
dest='/usr/local/bin/zfs-scrub.sh',
mode='700',
user='root',
group='root',
)
files.put(
name='Push zfs-scrub timer',
src='files/zfs-scrub.timer',
dest='/etc/systemd/system/zfs-scrub.timer',
user='root',
group='root',
mode='644',
)
files.put(
name='Push zfs-scrub service',
src='files/zfs-scrub.service',
dest='/etc/systemd/system/zfs-scrub.service',
user='root',
group='root',
mode='644',
)
systemd.daemon_reload(
name='Reload systemd',
user_mode=False,
)
systemd.service(
name='Enable zfs-scrub timer',
service='zfs-scrub.timer',
running=True,
enabled=True,
)
files.put(
name='Push ZFS kernel config',
src='files/zfs.conf',
dest='/etc/modprobe.d/zfs.conf',
user='root',
group='root',
mode='644',
)
server.shell(
name='Update initramfs',
commands=['update-initramfs -u -k all']
)