Как написать класс-оболочку / переопределить конфигурацию в уже существующем классе кукол

Я хотел бы переопределить значения другого класса в других модулях Puppet. Пожалуйста, помогите мне, предложив способы.

Существующий класс: (Имя модуля: MySQL)

class mysql::server (
  $config_file             = $mysql::params::config_file,
  $includedir              = $mysql::params::includedir)
{
  My Code Logics
}

Мой текущий класс: (Имя модуля: Профили)

Class profiles::mysql () {
    class { '::mysql::server':
        config_file => '/opt/arunraj',
        includedir  => true
    }
}

Когда я делаю, как описано выше, я получаю дубликат ошибки объявления класса. Какой лучший способ переопределить значения между двумя классами

1 ответ

Во-первых, ваш пример кода неполон. Вы представляете определения классов mysql::server а также profiles::mysql, а последний содержит объявление класса в стиле ресурса mysql::server, но вы ничего не говорите об одном или нескольких других объявлениях класса mysql::server что данный сталкивается с. То, что вы на самом деле представили, недостаточно, чтобы произвести ошибку, которую вы описываете.

Обратите также внимание на то, что использование объявлений классов в стиле ресурсов обычно является плохой формой, особенно для объявления открытых классов любого модуля, и особенно для объявления классов, принадлежащих к модулю, отличному от того, в котором появляется объявление. Причины носят технический характер, но в значительной степени они сводятся к риску выявления именно той ошибки, с которой вы столкнулись. Это происходит всякий раз, когда Puppet оценивает объявление в стиле ресурса для класса, для которого уже было оценено объявление (в любом стиле), поскольку значения параметров класса связаны как часть оценки первого обнаруженного объявления.

Лучший способ настроить значения параметров класса - в первую очередь полагаться на автоматическое связывание данных (Hiera) для привязки значений к этим параметрам. Если у вас есть странный автомат, которому нужны другие значения параметров, вы устанавливаете их на более высокий уровень приоритета иерархии данных, чем тот, из которого поступают обычные значения, и который ограничен достаточно узко, чтобы не влиять на машины, которые должны иметь обычные значения. параметры.

Более того, чтобы избежать описываемой вами ошибки, вы также должны быть уверены, что везде должны использоваться только объявления, похожие на include, для любого класса, который может быть объявлен более одного раза (т. Е. Любого открытого и некоторых закрытых). Это идет рука об руку с автоматическим связыванием, потому что, если вы не используете декларации, подобные ресурсам, то автоматическое связывание данных - ваш лучший доступный способ настройки значений параметров класса. Классическое объявление в стиле включения через include сама функция, но require, contain, а также hiera_include функции также предоставляют объявления в стиле include (с различными различиями в семантике). Если вы используете ENC для объявления классов, то он может создать любой стиль.

Другие вопросы по тегам