Марионетка передает параметры из профиля в модуль - PullRequest
0 голосов
/ 14 января 2020

У меня есть модуль "base" с классом init.pp, который имеет некоторые параметры как таковые:

class base (
   $listen_ip = "xx.xx.xx.xx",
   $listen_port = 3306,

   $admin_username = 'admin',
   $admin_password = 'admin',
)
{
...
}

Затем я создал профиль "base", где я хочу установить некоторые параметры :

class profile::base {
    class { 'base':
      $listen_ip = "xxx.xxx.xx.xx",
      $listen_port => 6033,
  }
}

Тогда это вторичный профиль, в котором я хочу установить имя пользователя и пароль:

class profile::department::sales::base {
    class { '::profile::base':
      $admin_username = "some_user",
      $admin_password => "some_pw",
  }
}

Однако невозможно установить параметры из профиля "sales". Идея состоит в том, что некоторые значения всегда будут одинаковыми для базового класса, а некоторые отличаются в зависимости от отдела.

1 Ответ

0 голосов
/ 14 января 2020

Однако установить параметры из профиля "sales" невозможно.

Не совсем. То, что не разрешено, это использование двух разных ресурсоподобных объявлений для одного и того же класса при создании одного манифеста. Если вы используете хотя бы один, тогда вы должны убедиться, что это первое (или единственное) объявление этого класса, которое оценивает построитель каталога.

Чтобы понять это, вы должны понимать, что присвоение значений параметров не является Основная цель объявлений, которые вы используете. Основная цель состоит скорее в том, чтобы указать, что данный класс должен быть включен в каталог в первую очередь. Для достижения этой цели значения связаны с all параметрами класса в точке, где оценивается его первое объявление. Таким образом, ваши объявления двух классов не дополняют друг друга. Вместо этого они конфликтуют друг с другом.

Даже если значения параметров, которые он указал для класса base, были идентичны значениям, объявленным классом profile::base, Puppet все равно будет возражать против любого использования класса * 1013. *. Чтобы упростить оценку и быть абсолютно уверенным во избежании несоответствия, в нем реализовано более строгое ограничение, чем требуется на самом деле: ресурсом может быть только первое оцененное объявление любого данного класса.

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

Идея состоит в том, что некоторые значения всегда будут одинаковыми для базового класса, а некоторые отличаются в зависимости от отдела.

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

Поэтому я предлагаю использовать Hiera присвоить соответствующие значения параметров классу base. Есть много способов, которыми может разыграться конкретика.

...