To było proste w CFEngine ... Ale teraz jestem w środowisku Puppet i muszę być w stanie przypisać / zapewnić / sprawdzić określone zmienne sysctl.conf. W świecie CFEngine mogłem po prostu sprawdzić określone linie w pliku konfiguracyjnym ... Znalazłem małe odniesienie do modułu sysctl na wiki Puppet i projektu w github, który wydaje się robić to, co chcę.
Ale żadne z nich nie jest tak naprawdę dobrze udokumentowane. Po prostu szukam sposobu na edycję kilku wartości, takich jak net.core.rmem_default
i net.core.wmem_max
. W formacie projektu hostowanym na githubie konfiguracja w moim manifeście init.pp powinna wyglądać następująco:
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";
}
}
Przechodząc przez fora i listy mailingowe, wydaje się, że istnieje zamieszanie co do różnicy między wtyczkami i modułami Puppet. Terminy są prawie używane zamiennie ... Skończyło się na tym, że musiałem włączyć pluginsync na moich klientach, aby ominąć włochate błędy. Myślałem, że to był moduł!
Bieżące błędy klienta:
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
Czy są jakieś przemyślenia na temat tego, jak to osiągnąć przy jak najmniejszym bólu?
Edycja: Czy ten błąd dotyczy mnie ?
Edycja: Naprawiono używanie biblioteki Augeas, jak zasugerował Jeff Ferland i wiki Puppet .
Stworzyłem sysctl
moduł ...
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"],
}
}
... i kolejny moduł do ustawienia odpowiednich ustawień ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}