Кукольный манифест: переопределение переменных по умолчанию в хэше

#puppet #manifest

#кукольный #манифест

Вопрос:

Мне передали код для кукольного модуля, который был написан кем-то другим. Мне было поручено заставить его работать в реальной кукольной среде.

Я изо всех сил пытаюсь переопределить значения по умолчанию в модуле в manifest файле. Надеюсь, это проблема синтаксиса, а не проблема с классом init .

В init.pp :

 class our_module(
  # Defaults to be overridden in the manifest file 
  Hash $config = {
    'id' => '38e18a',
    'secret' => 'donttellanyone',
    'path' => '/test/path'
  }
){
# Logic here...
}
  

Как я могу переопределить эти атрибуты? Я попробовал следующее, что дает мой InvalidCredentialsException :

 node 'my_node' {
  class { 'our_module':
    config => {
      id => 'newid',
      secret => 'newsecret',
      path => '/newpath
  }
}
  

Я новичок в Puppet и все еще разбираюсь в документах и синтаксисе.

Комментарии:

1. В определении узла отсутствует закрывающая кавычка после '/newpath , а также закрывающая фигурная скобка для значения хэша. Но является ли это точным представлением кода, который вы на самом деле используете? Я бы ожидал, что Puppet отклонит его с синтаксической ошибкой во время построения каталога, но этого не происходит. Похоже, что вместо этого либо компонент puppetserver Puppet завершается сбоем еще до начала создания каталога, либо ваш класс завершается сбоем при применении на стороне клиента после успешного создания каталога.

2. Или, если это происходит во время создания каталога, я склонен думать, что исключение связано с чем-то в вашем наборе манифестов, что вы пропустили в вопросе.

3. Недостающая цитата была просто моей ошибкой при добавлении фрагмента кода примера.

Ответ №1:

Учитывая класс our_module , представленный в вопросе, это изменение в блоке узла допустимо для объявления этого класса и настройки его config параметра:

 node 'my_node' {
  class { 'our_module':
    config => {
      id => 'newid',
      secret => 'newsecret',
      path => '/newpath'
    }
  }
}
  

Надеюсь, это проблема синтаксиса, а не проблема с классом init .

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

Я попробовал следующее, что дает мой InvalidCredentialsException

Я не склонен думать, что это возникает во время создания каталога. Я не могу полностью исключить такую возможность, но это выглядит как исключение Java, тогда как конструктор каталогов реализован в основном на Ruby. Это может исходить из puppetserver интерфейса сервера Puppet на основе Java, но это не будет зависеть от того, объявляют ли ваши манифесты определенный класс. Мой хрустальный шар предполагает, что our_module реализация является Exec Java-программой, когда она применяется к клиенту, и что именно эта программа выдает исключение.

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

Комментарии:

1. Спасибо за ваш ответ. Модуль использует ruby SDK, который выполняет некоторые вызовы HTTP / Oauth2. Итак, нет Java. Я забыл включить полную ошибку, поэтому я сделаю это сейчас. Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Function Call, InvalidCredentialsException (file: <path to module init.pp> on node <puppet-client.home> При запуске со значениями по умолчанию (т.Е. Просто class { 'my_module' : } ) Модуль работает нормально. Только когда я пытаюсь переопределить переменные конфигурации, он выдает ошибки.