Ce fut un jeu d'enfant dans CFEngine ... Mais je suis maintenant dans un environnement Puppet , et je dois pouvoir assigner / assurer / vérifier certaines variables sysctl.conf. Dans le monde CFEngine, je pouvais simplement rechercher des lignes spécifiques dans un fichier de configuration ... J'ai trouvé une petite référence à un module sysctl sur le wiki Puppet et un projet dans github qui semble faire ce que je veux.
Mais ni l'un ni l'autre ne sont vraiment bien documentés. Je cherche simplement un moyen d'éditer quelques valeurs comme net.core.rmem_default
et net.core.wmem_max
. Au format du projet hébergé sur github , la configuration de mon manifeste init.pp devrait ressembler à:
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";
}
}
En parcourant les forums et les listes de diffusion, il semble y avoir confusion sur la différence entre les plugins et modules Puppet. Les termes sont presque utilisés de manière interchangeable ... J'ai fini par avoir besoin d'activer pluginsync sur mes clients afin de surmonter certaines erreurs poilues. Je pensais que c'était un module!
Les erreurs actuelles du client:
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
Avez-vous des idées sur la façon d'accomplir cela avec le moins de douleur possible?
Edit: Suis-je affecté par ce bug ?
Edit: Correction de l'utilisation de la bibliothèque Augeas comme suggéré par Jeff Ferland et du wiki Puppet .
J'ai créé un sysctl
module ...
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"],
}
}
... et un autre module pour définir les paramètres appropriés ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}