zfs.pp 3.02 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
    ;
  }

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

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

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

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

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

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

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

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

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

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

James T. Lee's avatar
James T. Lee committed
118
  ::nest::lib::systemd_reload { 'zfs': }
119

120
  unless $facts['is_container'] {
121
122
123
124
    # Manage swap volume properties for experimenting with workarounds listed in
    # https://github.com/openzfs/zfs/issues/7734
    zfs { "${facts['rpool']}/swap":
      compression    => 'off',
125
      sync           => 'standard',
126
127
128
129
130
      primarycache   => 'metadata',
      secondarycache => 'none',
      logbias        => 'throughput',
    }
  }
131
}