Questo è stato un gioco da ragazzi in CFEngine ... Ma adesso mi trovo in un ambiente Puppet e devo essere in grado di assegnare / garantire / controllare determinate variabili sysctl.conf. Nel mondo CFEngine, potrei semplicemente verificare la presenza di righe specifiche all'interno di un file di configurazione ... Ho trovato un piccolo riferimento a un modulo sysctl sul wiki Puppet e un progetto in github che sembra fare quello che voglio.
Ma nessuno dei due è davvero ben documentato. Sto semplicemente cercando un modo per modificare un paio di valori come net.core.rmem_default
e net.core.wmem_max
. Nel formato del progetto ospitato su github , la configurazione nel mio manifest init.pp dovrebbe apparire come:
class sysctl {
sysctl::value {
"net.core.rmem_default": value => "9000000";
"net.core.wmem_default": value => "9000000";
"net.core.rmem_max": value => "16777216";
"net.core.wmem_max": value => "16777216";
}
}
Passando attraverso forum e mailing list, sembra esserci confusione sulla differenza tra plugin e moduli Puppet. I termini sono quasi usati in modo intercambiabile ... Alla fine ho dovuto abilitare il pluginsync sui miei clienti per superare alcuni errori pelosi. Pensavo fosse un modulo!
Gli errori client correnti:
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/type/sysctl.rb
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/provider/sysctl/parsed.rb
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error
ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
Qualche idea su come ottenere questo risultato con la minima quantità di dolore?
Modifica: sono affetto da questo errore ?
Modifica: risolto utilizzando la libreria Augeas come suggerito da Jeff Ferland e dalla wiki Puppet .
Ho creato un sysctl
modulo ...
class sysctl {
# nested class/define
define conf ( $value ) {
# $name is provided by define invocation
# guid of this entry
$key = $name
$context = "/files/etc/sysctl.conf"
augeas { "sysctl_conf/$key":
context => "$context",
onlyif => "get $key != '$value'",
changes => "set $key '$value'",
notify => Exec["sysctl"],
}
}
file { "sysctl_conf":
name => $operatingsystem ? {
default => "/etc/sysctl.conf",
},
}
exec { "/sbin/sysctl -p":
alias => "sysctl",
refreshonly => true,
subscribe => File["sysctl_conf"],
}
}
... e un altro modulo per impostare le impostazioni pertinenti ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}