Це був вітер у CFEngine ... Але я зараз у ляльковому середовищі , і мені потрібно мати можливість призначити / забезпечити / перевірити певні змінні sysctl.conf. У світі CFEngine я міг би просто перевірити наявність конкретних рядків у конфігураційному файлі ... Я знайшов невелику посилання на модуль sysctl у вікі Puppet та проект у 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";
}
}
Переглядаючи форуми та списки розсилки, схоже, виникає плутанина в різниці між ляльковими модулями та модулями. Терміни майже вживаються взаємозамінно ... Мені довелося ввімкнути плагінсинхронізацію на моїх клієнтах, щоб уникнути деяких волохатих помилок. Я думав, що це модуль!
Поточні помилки клієнта:
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
Будь-які думки про те, як досягти цього з найменшою кількістю болю?
Редагувати: Чи впливає на цю помилку ?
Редагувати: виправлено за допомогою бібліотеки Augeas, як це запропонував Джефф Ферланд та з вікі Puppet .
Я створив 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";
}
}