C'était un jeu d'enfant en CFEngine ... Mais je suis dans une Environnement Puppet maintenant, et j'ai besoin de pouvoir assigner/assurer/vérifier certaines variables sysctl.conf. Dans le monde de CFEngine, je pourrais simplement vérifier des lignes spécifiques dans un fichier de configuration... J'ai trouvé une petite référence à un module sysctl sur le wiki de 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 telles que net.core.rmem_default
y net.core.wmem_max
. Dans le format de l projet hébergé sur github la configuration dans mon manifeste init.pp devrait ressembler à ceci :
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 une confusion sur la différence entre les plugins et les 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 passer outre certaines erreurs épineuses. Je pensais que c'était un module !
Les erreurs du client actuel :
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 problème ?
Edit : Corrigé en utilisant la bibliothèque Augeas comme suggéré par Jeff Ferland et à partir de la page Puppet wiki .
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 pertinents...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}