class ii { class base { package {['ii', 'perl-Proc-Daemon']: } file { '/var/lib/ii/': ensure => directory, owner => 'nobody', } } define bot( $server = 'irc.freenode.net', $channel) { $nick = $name include ii::base # a custom wrappper is needed since ii do not fork in the # background, and bash is not able to properly do it local_script { "ii_$nick": content => template('ii/ii_wrapper.pl'), require => Class['ii::base'], } service { 'ii': provider => base, start => "/usr/local/bin/ii_$nick", require => Local_script["ii_$nick"], } exec { "join channel $nick": command => "echo '/j $channel' > /var/lib/ii/$nick/$server/in", user => 'nobody', creates => "/var/lib/ii/$nick/$server/$channel/in", require => Service['ii'], } } }