- Overview
- Module Description - What the module does and why it is useful
- Setup - The basics of getting started with cpan
- Usage - Configuration options and additional functionality
- Reference - An under-the-hood peek at what the module is doing and how
Handle installations of cpan modules via puppet.
The cpan module sets up capn on a server
- cpan package.
- cpan configuration file.
All options and configuration can be done through interacting with the parameters on the cpan class and the cpan resource type. These are documented below.
class {'::cpan':
manage_config => true,
manage_package => true,
package_ensure => 'present',
installdirs => 'site',
local_lib => false,
config_hash => { 'build_requires_install_policy' => 'no' },
ftp_proxy => 'http://your_ftp_proxy.com',
http_proxy => 'http://your_http_proxy.com',
environment => {
'OPTIONAL_ENVIRONMENT_VAR_1' => '1',
'OPTIONAL_ENVIRONMENT_VAR_2' => '/foo/bar',
},
}include '::cpan'
cpan { "Clone::Closure":
ensure => present,
require => Class['::cpan'],
force => true,
}To avoid conflicts with in house package management, use:
class {'::cpan':
manage_package => false,
}To control target installation path, use:
class {'::cpan':
installdirs => 'vendor',
}Any of site (default), perl and vendor are accepted.
To further control the location of installed modules, you can use local::lib:
cpan { 'Foo::Bar':
ensure => present,
local_lib => '/opt',
}This will install the module into /opt. Of course you need to adjust @INC of your code in order to use that
new location, e.g. by using perl -Mlocal::lib=/opt myapp.pl.
You can also define the default value of local_lib for all cpan resources:
Cpan { local_lib => '/opt' }class {'::cpan':
ftp_proxy => 'http://your_ftp_proxy.com',
http_proxy => 'http://your_http_proxy.com',
}Some modules may require additional environment variables to be set e.g. during install, like DBD::Oracle or DBD::DB2.
cpan {'DBD::DB2':
ensure => 'latest',
environment => {
'DB2_HOME' => '/path/to/DB2,
}
}Some modules like Sys::RunAlone don't return a code 0 when invoked with perl -M$MODULE_NAME -e1.
This means there's no way for puppet to check if they're installed or not (in an agnostic way).
Therefore you'll have to change the exists_strategy:
cpan {'Sys::RunAlone':
ensure => 'present',
exists_strategy => 'find',
}Currently two strategies are implemented:
Tries to include module:
perl -M$MODULE_NAME
Tries to find module in @INC list much like pmpath is doing.
- cpan: Main class for installation and service management.
- cpan::install: Handles package installation.
- cpan::params: Different configuration data for different systems.
- cpan::config: Handles the cpan service.
This module has been built on and tested against Puppet 3.x and Puppet 4.x
The module has been tested on:
- RedHat Enterprise Linux 6/7
- Debian 6/7
- CentOS 6/7
Testing on other platforms has been light and cannot be guaranteed.