Esto fue muy fácil en CFEngine ... Pero ahora estoy en un entorno de Puppet y necesito poder asignar / asegurar / verificar ciertas variables sysctl.conf. En el mundo de CFEngine, simplemente podría verificar si hay líneas específicas dentro de un archivo de configuración ... He encontrado una pequeña referencia a un módulo sysctl en el wiki de Puppet y un proyecto en github que parece hacer lo que quiero.
Pero ninguno de los dos está realmente bien documentado. Simplemente estoy buscando una manera de editar un par de valores como net.core.rmem_default
y net.core.wmem_max
. En el formato del proyecto alojado en github , la configuración en mi manifiesto init.pp debería verse así:
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";
}
}
Al revisar foros y listas de correo, parece haber confusión sobre la diferencia entre los complementos y módulos de Puppet. Los términos casi se usan indistintamente ... Terminé necesitando habilitar pluginsync en mis clientes para superar algunos errores mentales. ¡Pensé que esto era un módulo!
Los errores actuales del 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
¿Alguna idea sobre cómo lograr esto con la menor cantidad de dolor?
Editar: ¿Estoy afectado por este error ?
Editar: Se corrigió el uso de la biblioteca Augeas como lo sugirió Jeff Ferland y del wiki Puppet .
Creé un 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"],
}
}
... y otro módulo para configurar los ajustes relevantes ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}
fuente
Respuestas:
Respuesta específica: Inmediatamente hablando, está llamando a sysctl :: value, pero el valor no se declara en su clase sysctl. Vea este ejemplo que usa una declaración sysctl :: conf. Sin el
define value
, no hay una subclase de sysctl :: value a la que pueda llamar.Respuesta general y orientación: La construcción Augeas (consulte también su documentación de referencia de tipo ) que forma parte de las versiones actuales de Puppet permite mantener líneas en un archivo de configuración e incluso respeta el contexto, por lo que puede administrar archivos como una configuración git. El siguiente ejemplo es para demostrar la funcionalidad y para señalarle una gran colección de referencia de configuraciones de Puppet: la tienda de configuración en vivo para servidores de Wikipedia.
Un ejemplo simple de la documentación de configuración anterior sería este:
Entonces, si desea administrar su /etc/sysctl.conf, ingrese lo siguiente:
El ejemplo de Augeas también tiene una construcción para una clase sysctl basada en Augeus que es similar a lo que publicó en su pregunta, por lo que también puede arrojar algo de luz.
fuente
value.pp
manifiesto distribuido con elmodule-sysctl
módulo. Parece quedefine sysctl::value ( $key = 'name', $value ) {
He usado este módulo en el pasado con RHEL5: puppet-sysctl
Para usarlo, deberá instalar el módulo en su carpeta de módulos (probablemente / etc / puppet / modules / sysctl) incluya la clase en su nodo: (incluya sysctl) y luego llame al recurso def de esta manera:
Entonces te estarás preguntando, ¿a dónde va realmente este código? Me gusta organizar mi árbol de marionetas así:
De esa manera, los módulos del sitio contienen datos de hiera, o sintonizables, y los módulos permanecen genéricos, conectables y "modulares".
fuente
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
value.pp
manifiesto distribuido con elmodule-sysctl
módulo. Parece quedefine sysctl::value ( $key = 'name', $value ) {
Mientras no tenga que cambiar el valor (o esté satisfecho con agregar líneas con los nuevos valores), puede usar Common
line
. Puede usar un par depresent
/absent
configuraciones cuando cambia el valor.Para cambiar el valor, suponiendo que la línea ya exista, puede usarlo
replace
en el mismo módulo.O bien, puede ver cómo se escriben estas definiciones para adaptarlas a su tarea, lo cual, en mi opinión, creo que es lo suficientemente simple y común como para que los tipos predeterminados de Puppet deberían haberlo proporcionado.
Entonces, ¿por qué no? Porque Puppet espera que administres completamente las cosas que estás administrando. Es decir, debe distribuir todo el archivo sysctl, en lugar de simplemente agregar o eliminar un valor u otro. No digo que sea necesariamente algo fácil de hacer, pero si puedes salirte con la tuya, esa es la forma más fácil de hacerlo.
fuente
sysctl.conf
valores predeterminados que cambien entre las versiones de RHEL. Es posible que no queramos ignorarlos / sobrescribirlos, en lugar de asegurarnos de que se pueda establecer / cambiar un parámetro específico.sysctl.conf
? ¿O quiere decir que tiene diferentes configuraciones según el lanzamiento? En el último caso, puede hacer una plantilla y seleccionar líneas según la versión del sistema operativo.