zfs.pp 2.93 KB
Newer Older
1
class nest::base::zfs {
2
3
4
5
  package { 'sys-fs/zfs':
    ensure => installed,
  }

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  $zfs_mount_override = @(EOF)
    [Service]
    ExecStart=
    ExecStart=/sbin/zfs mount -al
    | EOF

  file {
    default:
      mode  => '0644',
      owner => 'root',
      group => 'root',
    ;

    '/etc/systemd/system/zfs-mount.service.d':
      ensure => directory,
    ;

    '/etc/systemd/system/zfs-mount.service.d/load-key.conf':
      content => $zfs_mount_override,
James T. Lee's avatar
James T. Lee committed
25
      notify  => Nest::Lib::Systemd_reload['zfs'],
26
27
28
    ;
  }

James T. Lee's avatar
James T. Lee committed
29
30
31
32
33
  exec { 'zgenhostid':
    command => 'zgenhostid `hostid`',
    creates => '/etc/hostid',
    path    => '/usr/bin:/bin',
    require => Package['sys-fs/zfs'],
34
    notify  => Class['::nest::base::dracut'],
James T. Lee's avatar
James T. Lee committed
35
36
  }

37
38
39
40
41
42
  file { '/usr/lib/dracut/modules.d/90zfs/zfs-load-key.sh':
    mode    => '0755',
    owner   => 'root',
    group   => 'root',
    source  => 'puppet:///modules/nest/zfs/zfs-load-key.sh',
    require => Package['sys-fs/zfs'],
43
    notify  => Class['::nest::base::dracut'],
44
45
  }

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  # On systems without ZFS root, the zfs module doesn't get loaded by dracut
  file { '/etc/modules-load.d/zfs.conf':
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    content => "zfs\n",
  }

  # See: https://github.com/zfsonlinux/zfs/blob/master/etc/systemd/system/50-zfs.preset.in
  service { [
    'zfs-import-cache.service',
    'zfs-mount.service',
    'zfs-share.service',
    'zfs-zed.service',
    'zfs.target',
  ]:
    enable  => true,
    require => Package['sys-fs/zfs'],
  }

  group { 'zfssnap':
67
    ensure => absent,
68
69
70
  }

  user { 'zfssnap':
71
72
    ensure => absent,
    before => Group['zfssnap'],
73
74
75
  }

  file { '/var/lib/zfssnap':
76
77
78
    ensure  => absent,
    recurse => true,
    force   => true,
79
80
81
  }

  file { '/etc/sudoers.d/10_zfssnap':
82
    ensure => absent,
83
84
85
  }

  file { '/usr/sbin/zfs-auto-snapshot':
86
    ensure => absent,
87
88
89
  }

  file { '/etc/systemd/system/zfs-auto-snapshot@.service':
90
    ensure => absent,
James T. Lee's avatar
James T. Lee committed
91
    notify => Nest::Lib::Systemd_reload['zfs'],
92
93
94
95
96
97
98
99
100
101
102
103
  }

  $zfs_auto_snapshot_timer_frequencies = {
    'frequent' => '*:0/15',
    'hourly'   => 'hourly',
    'daily'    => 'daily',
    'weekly'   => 'weekly',
    'monthly'  => 'monthly',
  }

  $zfs_auto_snapshot_timer_frequencies.each |$frequency, $calendar| {
    file { "/etc/systemd/system/zfs-auto-snapshot@${frequency}.timer":
104
      ensure => absent,
James T. Lee's avatar
James T. Lee committed
105
      notify => Nest::Lib::Systemd_reload['zfs'],
106
107
108
    }

    service { "zfs-auto-snapshot@${frequency}.timer":
109
      enable => false,
James T. Lee's avatar
James T. Lee committed
110
      before => Nest::Lib::Systemd_reload['zfs'],
111
112
113
    }
  }

James T. Lee's avatar
James T. Lee committed
114
  ::nest::lib::systemd_reload { 'zfs': }
115
116
117
118
119
120
121
122
123
124
125
126

  unless $facts['virtual'] == 'lxc' {
    # Manage swap volume properties for experimenting with workarounds listed in
    # https://github.com/openzfs/zfs/issues/7734
    zfs { "${facts['rpool']}/swap":
      compression    => 'off',
      sync           => 'always',
      primarycache   => 'metadata',
      secondarycache => 'none',
      logbias        => 'throughput',
    }
  }
127
}