- 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.