Во-первых, ваш пример кода неполный. Вы представляете определения классов mysql::server
и profiles::mysql
, а последний содержит декларацию класса mysql::server
в стиле ресурса, но ничего не говорите об одном или нескольких других объявления класса mysql::server
, с которыми сталкивается данный. То, что вы на самом деле представили, недостаточно для возникновения описанной вами ошибки.
Также обратите внимание, что использование объявлений классов в стиле ресурсов обычно является плохой формой, особенно для объявления общедоступных классов любого модуля, и особенно для объявления классов, принадлежащих другому модулю, чем тот, в котором появляется объявление. Причины немного технические, но в значительной степени они сводятся к риску вызвать именно ту ошибку, с которой вы столкнулись. Это происходит всякий раз, когда Puppet оценивает объявление в стиле ресурса класса, для которого объявление (в любом стиле) уже было оценено, потому что значения параметров класса связаны как часть оценки первого обнаруженного объявления.
Лучший способ настроить значения параметров класса — полагаться на автоматическую привязку данных (Hiera) для привязки значений к этим параметрам в первую очередь. Если у вас есть странная машина, которой нужны другие значения параметров, вы устанавливаете их на более высоком уровне иерархии данных, чем тот, из которого берутся обычные значения, и который имеет достаточно узкую область действия, чтобы не влиять на машины, которые должны иметь обычные значения. параметры.
Более того, чтобы избежать описанной вами ошибки, вы также должны быть уверены, что везде используете только включения-подобные объявления для любого класса, который может быть объявлен более одного раза (т. е. любой общедоступный и некоторые частные). Это идет рука об руку с автоматической привязкой, потому что, если вы не используете ресурсоподобные объявления, то автоматическая привязка данных является вашим лучшим доступным средством для настройки значений параметров класса. Классическое объявление стиля включения осуществляется через саму функцию include
, но функции require
, contain
и hiera_include
также предоставляют объявления стиля включения (с различными различиями в семантике). Если вы используете ENC для объявления классов, он может создать любой стиль.
person
John Bollinger
schedule
04.02.2016