Com o fantoche, a melhor coisa a lembrar é tentar criar módulos para todo o seu manifesto, para que o código seja facilmente reutilizado para vários servidores e ambientes.
Use também o SVN ou o GIT para controlar facilmente as alterações e os arquivos de configuração de checkout necessários para um determinado aplicativo. Como kashani declarou Puppet Forge e Example42 pode ser algumas boas referências.
Abaixo está um exemplo de manifesto que criei para servidores da web. Isso lhe dará a opção de instalar / desinstalar um servidor da Web, se necessário. Você notará que ele usa os fatos do fac-símile para verificar o sistema operacional e a arquitetura para instalar o RPMS correto (Centos). Embora você possa facilmente levar isso como um modelo e expandir para o Ubuntu com os nomes de pacotes corretos.
class apache ($disable = "false", $apacheconf = "default") {
if $disable == "false" {
$installed = present
$enable = true
$ensure = "running"
} else {
$installed = absent
$enable = false
$ensure = "stopped"
}
case $operatingsystem {
'CentOS', 'RedHat': {
if $architecture == "x86_64" {
package { 'httpd':
name => "httpd.x86_64",
ensure => $installed,
}
} else {
package { 'httpd':
name => "httpd.i386",
ensure => $installed,
}
}
service { 'httpd':
ensure => $ensure,
enable => $enable,
}
file { "http.conf":
path => "/etc/httpd/conf/httpd.conf",
owner => root,
group => root,
mode => 0644,
source => $apacheconf ? {
'default' => "puppet:///modules/apache/httpd.conf",
}
}
}
}
}
Para adicionar funcionalidades adicionais ao manifesto básico, basta chamá-lo de outro manifesto. Como instalar e servidor http SSL. O código abaixo, você verá que --include apache-- é usado para chamar o manifesto acima e também instalar opções adicionais.
class apache::ssl ($disable = "false") {
include apache
if $disable == "false" {
$installed = present
$enable = true
$ensure = "running"
} else {
$installed = absent
$enable = false
$ensure = "stopped"
}
case $operatingsystem {
'CentOS', 'RedHat': {
case $architecture {
'x86_64': {
package { 'mod_ssl':
name => "mod_ssl.x86_64",
ensure => $installed,
require => Package['httpd'],
}
}
'i386':{
package { 'mod_ssl':
name => "mod_ssl.i386",
ensure => $installed,
require => Package['httpd'],
}
}
}
}
}
}