在CFEngine中这是一件轻而易举的事 ……但是我现在在Puppet环境中,需要能够分配/确保/检查某些sysctl.conf变量。在CFEngine的世界中,我可以简单地检查配置文件中的特定行... 在Puppet Wiki上找到了对sysctl模块的小引用,在github中的一个项目看来可以满足我的要求。
但是,两者都没有得到很好的记录。我只是在寻找一种方法来编辑一些值,例如net.core.rmem_default
和net.core.wmem_max
。按照github上托管的项目的格式,init.pp清单中的配置应类似于:
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";
}
}
通过论坛和邮件列表,似乎对Puppet插件和模块之间的差异感到困惑。这些术语几乎可以互换使用...我最终需要在我的客户端上启用pluginsync,以克服一些麻烦的错误。我以为这是一个模块!
当前客户端错误:
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
关于如何以最少的痛苦实现这一目标的任何想法?
编辑:我受此错误影响吗?
编辑:修复了使用Jeff Ferland和Puppet Wiki建议的Augeas库的问题。
我创建了一个sysctl
模块...
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"],
}
}
...以及另一个用于设置相关设置的模块...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}