Un recurso (resource) en puppet es la unidad mínima de configuración. Puppet viene con algunos recursos ya predefinidos (built-in) como son:
Los recursos, a la hora de instanciarse tienen un nombre propio de instancia, y se pueden invocar tantos como sean necesarios.
Es la diferencia más interesante respecto de una clase. La clase se aplica de forma única sobre el servidor; pero la clase puede tener N instancias de un recurso.
Vamos a ver cómo definir los recursos más simples, en el lenguaje declarativo de puppet.
Este ejemplo está sacado de puppetlabs:
# /etc/puppetlabs/puppet/modules/apache/manifests/vhost.pp
define apache::vhost (Integer $port, String[1] $docroot, String[1] $servername = $title, String $vhost_name = '*') {
include apache # contains Package['httpd'] and Service['httpd']
include apache::params # contains common config settings
$vhost_dir = $apache::params::vhost_dir
file { "${vhost_dir}/${servername}.conf":
content => template('apache/vhost-default.conf.erb'),
# This template can access all of the parameters and variables from above.
owner => 'www',
group => 'www',
mode => '644',
require => Package['httpd'],
notify => Service['httpd'],
}
}
Dado que está parametrizado, se pueden invocar N instancias distintas de vhost en nuestra clase.
Para invocar una instancia, es necesario ponerle un nombre y
<TYPE> { '<TITLE>':
<ATTRIBUTE> => <VALUE>,
}
El ejemplo básico para el nuestro, sería en un servidor, pasar a definir varios vhosts distintos:
apache::vhost {'homepages':
port => 8081, # Becomes the value of $port
docroot => '/var/www-testhost', # Becomes the value of $docroot
}
apache::vhost {'redmine':
port => 80, # Becomes the value of $port
docroot => '/var/www/redmine', # Becomes the value of $docroot
}