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