PuppetForge is a great repository to find and utilize required modules; however, sometimes you need to make some changes to satisfy your own requirements. In my case, I needed an ‘eJabberd’ module for Debian based machines. I found this useful module by Lee Boynton that worked very well in CentOS but apparently not in Debian/Ubuntu. Those who are familiar with eJabberd installation, know that it’s a bit tricky when it needs to use mySql as its storage and requires specific drivers, schema. I modified Lee’s module slightly and the proper mysql manifest is as follows. I have tested this in Debian Squeeze as well as Wheezy:
# Installs the native erlang mysql driver
class ejabberd::mysql(
$lib_dir = $ejabberd::params::lib_dir
) inherits ejabberd::params {
if !defined(Package['git']) {
package { 'git':
ensure => installed,
}
}
if !defined(Package['erlang-rebar']) {
case $::osfamily {
'redhat': {
package { 'erlang-rebar':
ensure => installed,
}
}
'debian': {
package { 'erlang':
ensure => installed,
}
file { "/home/debs":
ensure => directory
}
file { "/home/debs/rebar_2.0.0-5_amd64.deb":
owner => root,
group => root,
mode => 644,
ensure => present,
source => "puppet:///modules/ejabberd/rebar_2.0.0-5_amd64.deb"
}
package { 'erlang-rebar':
provider => dpkg,
ensure => installed,
source => "/home/debs/rebar_2.0.0-5_amd64.deb"
}
}
}
}
vcsrepo { '/usr/local/src/mysql':
ensure => latest,
provider => git,
source => 'https://github.com/processone/mysql.git',
require => Package['git'],
# use first version which is compatible with ejabberd 2.1.x
revision => '967f3a0bb7'
}
exec { 'compile-mysql':
command => '/usr/bin/rebar compile',
creates => '/usr/local/src/mysql/ebin/mysql.beam',
cwd => '/usr/local/src/mysql',
environment => 'HOME=/root',
require => [
Package['erlang-rebar'],
Vcsrepo['/usr/local/src/mysql'],
]
}
file { "${lib_dir}/ebin/mysql.beam":
ensure => present,
source => '/usr/local/src/mysql/ebin/mysql.beam',
require => Exec['compile-mysql'],
}
file { "${lib_dir}/ebin/mysql_auth.beam":
ensure => present,
source => '/usr/local/src/mysql/ebin/mysql_auth.beam',
require => Exec['compile-mysql'],
}
file { "${lib_dir}/ebin/mysql_conn.beam":
ensure => present,
source => '/usr/local/src/mysql/ebin/mysql_conn.beam',
require => Exec['compile-mysql'],
}
file { "${lib_dir}/ebin/mysql_recv.beam":
ensure => present,
source => '/usr/local/src/mysql/ebin/mysql_recv.beam',
require => Exec['compile-mysql'],
}
}