# manage etcd class etcd ( Boolean $manage_user = true, Boolean $manage_group = true, Boolean $manage_package = true, Boolean $manage_service = true, String[1] $package_name = 'etcd', String[1] $user = 'etcd', String[1] $group = 'etcd', Stdlib::Absolutepath $config_path = '/etc/etcd', Stdlib::Absolutepath $config_file = "${config_path}/etcd.yaml", Hash $config = { 'data-dir' => '/var/lib/etcd' }, Integer $max_open_files = 40000, ) { if downcase($facts['kernel']) != 'linux' { fail("Module etcd only supports Linux, not ${facts['kernel']}") } if $facts['service_provider'] != 'systemd' { fail('Module etcd only supported on systems using systemd') } if ! $config['data-dir'] { fail('Module etcd requires data-dir be specified in config Hash') } if $manage_package { package { $package_name: ensure => installed, } } if $manage_user { user { 'etcd': ensure => 'present', name => $user, forcelocal => true, shell => '/bin/false', gid => $group, home => $config['data-dir'], managehome => false, system => true, before => Systemd::Unit_file['etcd.service'], } } if $manage_group { group { 'etcd': ensure => 'present', name => $group, forcelocal => true, system => true, before => Systemd::Unit_file['etcd.service'], } } mkdir::p { $config_path: } mkdir::p { $config['data-dir']: } file { $config_file: ensure => 'file', owner => $user, group => $group, mode => '0600', content => to_yaml($config), notify => Systemd::Unit_file['etcd.service'], require => Mkdir::P[$config_path], } file { 'etcd-data-dir': ensure => 'directory', path => $config['data-dir'], owner => $user, group => $group, mode => '0700', notify => Systemd::Unit_file['etcd.service'], require => Mkdir::P[$config['data-dir']], } file { 'etcd-data-dir-wal.tmp': ensure => 'directory', path => "${config['data-dir']}/wal.tmp", owner => $user, group => $group, mode => '0700', notify => Systemd::Unit_file['etcd.service'], require => File['etcd-data-dir'], } if $config['wal-dir'] { mkdir::p { $config['wal-dir']: } file { 'etcd-wal-dir': ensure => 'directory', path => $config['wal-dir'], owner => $user, group => $group, mode => '0700', notify => Systemd::Unit_file['etcd.service'], require => Mkdir::P[$config['wal-dir']], } } if $manage_service { include ::systemd systemd::unit_file { 'etcd.service': content => template('etcd/etcd.service.erb'), enable => true, active => true, require => Package[$package_name], } } }