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