Это был бриз в CFEngine ... Но сейчас я нахожусь в среде Puppet , и мне нужно иметь возможность назначать / проверять / проверять определенные переменные 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";
}
}
Просматривая форумы и списки рассылки, кажется, что существует разница в разнице между подключаемыми модулями и модулями 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
Любые мысли о том, как сделать это с наименьшим количеством боли?
Редактировать: Я затронут этой ошибкой ?
Редактировать: Исправлено использование библиотеки 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";
}
}
источник
Ответы:
Конкретный ответ: Сразу же вы вызываете sysctl :: value, но значение не объявлено в вашем классе sysctl. Посмотрите этот пример, который использует объявление sysctl :: conf. Без этого
define value
нет подкласса sysctl :: value для вызова.Общий ответ и руководство. Конструкция Augeas (см. Также справочную документацию по типам ), которая является частью текущих версий Puppet, позволяет поддерживать строки в файле конфигурации и даже учитывать контекст, поэтому она может управлять файлами, такими как конфигурация git. Приведенный ниже пример демонстрирует функциональность и указывает на большой справочный набор конфигов Puppet - хранилище конфигурации для серверов Википедии.
Один простой пример из приведенной выше документации конфигурации:
Итак, если вы хотите управлять своим /etc/sysctl.conf, введите следующее:
Пример Авгий также имеет конструкцию для класса SYSCTL на основе Augeus , который похож на то , что вы вывесили в вашем вопросе, так что может также пролить некоторый свет.
источник
value.pp
манифесте распространяется вместе сmodule-sysctl
модулем. Похожеdefine sysctl::value ( $key = 'name', $value ) {
Я использовал этот модуль в прошлом с RHEL5: puppet-sysctl
Чтобы использовать его, вам нужно установить модуль в папку ваших модулей (возможно, / etc / puppet / modules / sysctl), включить класс на вашем узле: (include sysctl), а затем вызвать ресурс def следующим образом:
Так что вы можете быть удивлены, куда этот код на самом деле идет? Мне нравится организовывать свое кукольное дерево так:
Таким образом, модули сайта содержат данные hiera или настраиваемые модули, а модули остаются общими, подключаемыми и «модульными».
источник
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
манифесте распространяется вместе сmodule-sysctl
модулем. Похожеdefine sysctl::value ( $key = 'name', $value ) {
До тех пор, пока вам не нужно менять значение (или вы удовлетворены добавлением строк с новыми значениями), вы можете использовать Common
line
. Вы можете использовать паруpresent
/absent
конфигурации при изменении значения.Чтобы изменить значение - при условии, что строка уже существует - вы можете использовать
replace
в том же модуле.Или вы можете посмотреть, как написаны эти определения, чтобы сделать их подходящими для вашей задачи - что, на ваш взгляд, я считаю достаточно простым и достаточно распространенным, чтобы его должны были предоставить типы Puppet по умолчанию.
Так почему бы и нет? Потому что Puppet ожидает, что вы полностью управляете тем, чем управляете. То есть вы должны распространять весь файл sysctl вместо простого добавления или удаления того или иного значения. Я не говорю, что это легко сделать, но если вам это сойдет с рук, то это самый простой способ сделать это.
источник
sysctl.conf
значения по умолчанию, которые изменяются между версиями RHEL. Мы можем не захотеть игнорировать / перезаписывать их, вместо того, чтобы гарантировать, что определенный параметр может быть установлен / изменен.sysctl.conf
? Или вы имеете в виду вы имеете различные конфигурации в зависимости от версии? В последнем случае вы можете создать шаблон и выбрать строки в зависимости от версии ОС.