Dies war ein Kinderspiel in CFEngine ... Aber ich bin jetzt in einer Puppet-Umgebung und muss in der Lage sein, bestimmte sysctl.conf-Variablen zuzuweisen / sicherzustellen / zu überprüfen. In der CFEngine-Welt konnte ich einfach in einer Konfigurationsdatei nach bestimmten Zeilen suchen ... Ich habe im Puppet-Wiki einen kleinen Verweis auf ein sysctl-Modul und ein Projekt in github gefunden , das anscheinend das tut, was ich will.
Aber beide sind nicht wirklich gut dokumentiert. Ich suche einfach nach einer Möglichkeit, ein paar Werte wie net.core.rmem_default
und zu bearbeiten net.core.wmem_max
. Im Format des auf github gehosteten Projekts sollte die Konfiguration in meinem init.pp-Manifest folgendermaßen aussehen:
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";
}
}
Beim Durchgehen von Foren und Mailinglisten scheint es Verwirrung über den Unterschied zwischen Puppet-Plugins und Modulen zu geben. Die Begriffe werden fast synonym verwendet ... Ich musste schließlich Pluginsync auf meinen Clients aktivieren, um einige haarige Fehler zu überwinden. Ich dachte das wäre ein Modul!
Die aktuellen Clientfehler:
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
Irgendwelche Gedanken darüber, wie dies mit dem geringsten Schmerz erreicht werden kann?
Bearbeiten: Bin ich von diesem Fehler betroffen ?
Bearbeiten: Mit der Augeas-Bibliothek, wie von Jeff Ferland und aus dem Puppet-Wiki vorgeschlagen, behoben .
Ich habe ein sysctl
Modul erstellt ...
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"],
}
}
... und ein weiteres Modul zum Einstellen der relevanten Einstellungen ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}