От открытого (2) страница справочника:
Портативные программы, которые хотят выполнить атомарный захват файла с помощью lockfile и должны избежать уверенности в поддержке NFS O_EXCL, могут создать уникальный файл в той же файловой системе (например, включив имя хоста и PID), и использовать ссылку (2) для создания ссылки на lockfile. Если ссылка (2) возвраты 0, блокировка успешна. Иначе используйте статистику (2) на уникальном файле, чтобы проверить, увеличилось ли его число каналов до 2, в этом случае блокировка также успешна.
Конкретный ответ: Сразу же говоря, вы вызываете sysctl :: value, но значение не объявлено в вашем классе sysctl. См. этот пример , в котором используется объявление sysctl :: conf. Без define value
не существует подкласса sysctl :: value, который можно было бы вызвать.
Общий ответ и руководство: Конструкция Augeas (см. Также ее ] справочная документация по типу ), которая является частью текущих версий Puppet, позволяет поддерживать строки в файле конфигурации и даже учитывает контекст, поэтому он может управлять такими файлами, как конфигурация git. Приведенный ниже пример демонстрирует функциональность и указывает на отличную справочную коллекцию конфигураций Puppet - хранилище актуальных конфигураций для серверов Википедии.
Я использовал этот модуль в прошлом с RHEL5: puppet-sysctl
Чтобы использовать его, вам нужно установить модуль в папку модулей (возможно, / etc / puppet / modules / sysctl), включить класс на вашем узле: (включить sysctl), а затем вызвать ресурс def выглядит следующим образом:
class s_sysctl::rhel_defaults {
include sysctl
# Controls IP packet forwarding
sysctl::set_value { "net.ipv4.ip_forward":
value => 0
}
# Controls source route verification
sysctl::set_value { "net.ipv4.conf.default.rp_filter": value => 1 }
}
Итак, вам может быть интересно, куда же на самом деле идет этот код? Мне нравится организовывать свое дерево марионеток следующим образом:
site.pp -> nodes.pp -> roles.pp -> /etc/puppet/site-modules/s_sysctl -> /etc/puppet/modules/sysctl
Таким образом, модули сайтов содержат данные hiera или настраиваемые параметры, а модули остаются универсальными, подключаемыми и «модульными».
Как пока вам не нужно изменять значение (или вас устраивает добавление строк с новыми значениями), вы можете использовать Common строку
. При изменении значения можно использовать пару конфигураций присутствует
/ отсутствует
.
Чтобы изменить значение - при условии, что линия уже существует - можно использовать заменить
в том же модуле.
Или вы можете посмотреть, как эти определения написаны, чтобы сделать их подходящими для вашей задачи - что, заметьте, я действительно считаю простым и достаточно распространенным, чтобы его должны были обеспечивать типы Puppet по умолчанию.
Так почему бы и нет? Потому что Puppet ожидает, что вы будете полностью управлять тем, чем управляете. То есть вам следует распространить весь sysctl-файл, а не просто добавлять или удалять то или иное значение. Я не говорю, что это обязательно легко сделать, но если вам это сойдет с рук, значит, это самый простой способ сделать это.
вам следует распространить весь sysctl-файл, а не просто добавлять или удалять то или иное значение. Я не говорю, что это обязательно легко сделать, но если вам это сойдет с рук, значит, это самый простой способ сделать это. вам следует распространить весь sysctl-файл, а не просто добавлять или удалять то или иное значение. Я не говорю, что это обязательно легко сделать, но если вам это сойдет с рук, значит, это самый простой способ сделать это.