Foi uma brisa no CFEngine ... Mas agora estou em um ambiente Puppet e preciso atribuir / garantir / verificar determinadas variáveis sysctl.conf. No mundo do CFEngine, eu poderia simplesmente procurar linhas específicas dentro de um arquivo de configuração ... Encontrei uma pequena referência a um módulo sysctl no wiki do Puppet e um projeto no github que parece fazer o que eu quero.
Mas nenhum deles está realmente bem documentado. Estou simplesmente procurando uma maneira de editar alguns valores como net.core.rmem_default
e net.core.wmem_max
. No formato do projeto hospedado no github , a configuração no meu manifesto init.pp deve se parecer com:
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 por fóruns e listas de discussão, parece haver confusão sobre a diferença entre os plugins e módulos do Puppet. Os termos são quase usados de forma intercambiável ... Acabei precisando ativar o pluginsync em meus clientes para superar alguns erros cabeludos. Eu pensei que este era um módulo!
Os erros atuais do cliente:
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
Alguma idéia de como fazer isso com o mínimo de dor?
Edit: Sou afetado por esse bug ?
Edit: Corrigido usando a biblioteca Augeas como sugerido por Jeff Ferland e do wiki Puppet .
Eu criei um sysctl
módulo ...
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 outro módulo para definir as configurações relevantes ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}