Puppet Class: kafka

Inherits:
kafka::params
Defined in:
manifests/init.pp

Overview

Class: kafka

This class will install kafka binaries

Requirements/Dependencies

Currently reequires the puppetlabs/stdlib module on the Puppet Forge in order to validate much of the the provided configuration.

Parameters

version

The version of kafka that should be installed.

scala_version

The scala version what kafka was built with.

install_dir

The directory to install kafka to.

mirror_url

The url where the kafka is downloaded from.

install_java

Install java if it’s not already installed.

Parameters:

  • version (Any) (defaults to: $kafka::params::version)
  • scala_version (Any) (defaults to: $kafka::params::scala_version)
  • install_dir (Any) (defaults to: $kafka::params::install_dir)
  • mirror_url (Any) (defaults to: $kafka::params::mirror_url)
  • install_java (Any) (defaults to: $kafka::params::install_java)
  • package_dir (Any) (defaults to: $kafka::params::package_dir)


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
# File 'manifests/init.pp', line 27

class kafka (
  $version = $kafka::params::version,
  $scala_version = $kafka::params::scala_version,
  $install_dir = $kafka::params::install_dir,
  $mirror_url = $kafka::params::mirror_url,
  $install_java = $kafka::params::install_java,
  $package_dir = $kafka::params::package_dir
) inherits kafka::params {

  validate_re($::osfamily, 'RedHat|Debian\b', "${::operatingsystem} not supported")
  validate_re($version, '\d+\.\d+\.\d+\.*\d*', "${version} does not match semver")
  validate_re($scala_version, '\d+\.\d+\.\d+\.*\d*', "${version} does not match semver")
  validate_absolute_path($install_dir)
  validate_re($mirror_url, '^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$', "${mirror_url} is not a valid url")
  validate_bool($install_java)
  validate_absolute_path($package_dir)

  $basefilename = "kafka_${scala_version}-${version}.tgz"
  $basename = regsubst($basefilename, '(.+)\.tgz$', '\1')
  $package_url = "${mirror_url}/kafka/${version}/${basefilename}"

  if $install_java {
    class {'java':
      distribution => 'jdk'
    }
  }

  group { 'kafka':
    ensure => present
  }

  user { 'kafka':
    ensure  => present,
    shell   => '/bin/bash',
    require => Group['kafka']
  }

  file { $package_dir:
    ensure => 'directory',
    owner  => 'kafka',
    group  => 'kafka'
  }

  file { $install_dir:
    ensure  => directory,
    owner   => 'kafka',
    group   => 'kafka',
    alias   => 'kafka-app-dir'
  }

  ensure_resource('package','wget', {'ensure' => 'installed'})

  exec { 'download-kafka-package':
    command => "wget -O ${package_dir}/${basefilename} ${package_url} 2> /dev/null",
    path    => ['/usr/bin', '/bin'],
    creates => "${package_dir}/${basefilename}",
    require => [ File[$package_dir], Package['wget'] ]
  }

  exec { 'untar-kafka-package':
    command => "tar xfvz ${package_dir}/${basefilename} -C ${install_dir} --strip-components=1",
    creates => "${install_dir}/${basename}/config",
    alias   => 'untar-kafka',
    require => [ Exec['download-kafka-package'], File['kafka-app-dir'] ],
    user    => 'kafka',
    path    => ['/bin', '/usr/bin', '/usr/sbin']
  }

  file { '/usr/local/kafka':
    ensure => link,
    owner  => 'kafka',
    group  => 'kafka',
    target => $install_dir
  }
}