zfs.pp 3.22 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
  $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':
24
25
26
27
      ensure => absent,
    ;

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

33
34
35
36
37
38
39
40
  unless $facts['is_container'] {
    exec { 'zgenhostid':
      command => 'zgenhostid `hostid`',
      creates => '/etc/hostid',
      path    => '/usr/bin:/bin',
      require => Package['sys-fs/zfs'],
      notify  => Class['::nest::base::dracut'],
    }
James T. Lee's avatar
James T. Lee committed
41
42
  }

43
44
45
46
47
48
  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'],
49
    notify  => Class['::nest::base::dracut'],
50
51
  }

52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  # 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':
73
    ensure => absent,
74
75
76
  }

  user { 'zfssnap':
77
78
    ensure => absent,
    before => Group['zfssnap'],
79
80
81
  }

  file { '/var/lib/zfssnap':
82
83
84
    ensure  => absent,
    recurse => true,
    force   => true,
85
86
87
  }

  file { '/etc/sudoers.d/10_zfssnap':
88
    ensure => absent,
89
90
91
  }

  file { '/usr/sbin/zfs-auto-snapshot':
92
    ensure => absent,
93
94
95
  }

  file { '/etc/systemd/system/zfs-auto-snapshot@.service':
96
    ensure => absent,
James T. Lee's avatar
James T. Lee committed
97
    notify => Nest::Lib::Systemd_reload['zfs'],
98
99
100
101
102
103
104
105
106
107
108
109
  }

  $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":
110
      ensure => absent,
James T. Lee's avatar
James T. Lee committed
111
      notify => Nest::Lib::Systemd_reload['zfs'],
112
113
114
    }

    service { "zfs-auto-snapshot@${frequency}.timer":
115
      enable => false,
James T. Lee's avatar
James T. Lee committed
116
      before => Nest::Lib::Systemd_reload['zfs'],
117
118
119
    }
  }

James T. Lee's avatar
James T. Lee committed
120
  ::nest::lib::systemd_reload { 'zfs': }
121

122
  unless $facts['is_container'] {
123
124
125
126
127
    exec { 'generate-zpool-cache':
      command => "/sbin/zpool set cachefile= ${trusted['certname']}",
      creates => '/etc/zfs/zpool.cache',
    }

128
129
130
131
    # Manage swap volume properties for experimenting with workarounds listed in
    # https://github.com/openzfs/zfs/issues/7734
    zfs { "${facts['rpool']}/swap":
      compression    => 'off',
132
      sync           => 'standard',
133
134
135
136
137
      primarycache   => 'metadata',
      secondarycache => 'none',
      logbias        => 'throughput',
    }
  }
138
}