Puppet Class: kubeinstall::topolvm::lvmd

Defined in:
manifests/topolvm/lvmd.pp

Summary

TopoLVM lvmd installation

Overview

TopoLVM lvmd installation as a systemd service

Examples:

include kubeinstall::topolvm::lvmd

Parameters:

  • version (String) (defaults to: $kubeinstall::lvmd_version)

    TopoLVM lvmd version

  • socket_name (Stdlib::Unixpath) (defaults to: '/run/topolvm/lvmd.sock')

    Unix domain socket endpoint of gRPC

  • install_xfs (Boolean) (defaults to: true)

    Whether to install xfsprogs or not (to manage XFS file system)

  • install_extfs (Boolean) (defaults to: true)

    Whether to install e2fsprogs or not (to manage ext4 file system)

  • device_classes (Array[Kubeinstall::TopoLVMDeviceClass]) (defaults to: [])


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'manifests/topolvm/lvmd.pp', line 19

class kubeinstall::topolvm::lvmd (
  String $version = $kubeinstall::lvmd_version,
  Array[Kubeinstall::TopoLVMDeviceClass] $device_classes = [],
  Stdlib::Unixpath $socket_name = '/run/topolvm/lvmd.sock',
  Boolean $install_xfs = true,
  Boolean $install_extfs = true,
) {
  $archive      = "lvmd-${version}.tar.gz"
  $source       = "https://github.com/topolvm/topolvm/releases/download/v${version}/lvmd-${version}.tar.gz"

  file { ['/opt/sbin', '/etc/topolvm', '/run/topolvm']:
    ensure => directory,
    owner  => 'root',
    group  => 'root',
    mode   => '0755',
  }

  archive { $archive:
    path         => "/tmp/${archive}",
    source       => $source,
    extract      => true,
    extract_path => '/opt/sbin',
    cleanup      => true,
    creates      => '/opt/sbin/lvmd',
    require      => File['/opt/sbin'],
  }

  file { '/opt/sbin/lvmd':
    owner   => 'root',
    group   => 'root',
    mode    => '0755',
    require => Archive[$archive],
  }

  $device_classes_config = $device_classes.map |$dev_class| {
    {
      'name'         => $dev_class['name'],
      'volume-group' => $dev_class['volumeGroup'],
    } +
    ($dev_class['spareGB'] ? {
        Integer => { 'spare-gb' => $dev_class['spareGB'] },
        default => {},
    }) +
    ($dev_class['isDefault'] ? {
        Boolean => { 'default' => $dev_class['isDefault'] },
        default => {},
    }) +
    ($dev_class['stripe'] ? {
        Integer => { 'stripe' => $dev_class['stripe'] },
        default => {},
    }) +
    ($dev_class['stripeSize'] ? {
        String => { 'stripe-size' => $dev_class['stripeSize'] },
        default => {},
    }) +
    ($dev_class['lvCreateOptions'] ? {
        Array[String, 1] => { 'lvcreate-options' => $dev_class['lvCreateOptions'] },
        default => {},
    }) +
    ($dev_class['type'] ? {
        String => { 'type' => $dev_class['type'] },
        default => {},
    }) +
    ($dev_class['type'] ? {
        'thin' => {
          'thin-pool' => {
            'name'                => $dev_class['thinPool']['name'],
            'overprovision-ratio' => $dev_class['thinPool']['overprovisionRatio'],
          },
        },
        default => {},
    })
  }

  $config = {
    'socket-name'    => $socket_name,
    'device-classes' => $device_classes_config,
  }

  file { '/etc/topolvm/lvmd.yaml':
    ensure  => file,
    content => to_yaml($config),
    mode    => '0644',
  }

  if $install_xfs {
    package { 'xfsprogs':
      ensure => installed,
      before => Systemd::Unit_file['lvmd.service'],
    }
  }

  if $install_extfs {
    package { 'e2fsprogs':
      ensure => installed,
      before => Systemd::Unit_file['lvmd.service'],
    }
  }

  systemd::unit_file { 'lvmd.service':
    content => file("${module_name}/topolvm/systemd/lvmd.service"),
    enable  => true,
    active  => true,
    require => File['/etc/topolvm/lvmd.yaml'],
  }
}