Назад | Перейти на главную страницу

Как получить доступ к имени среды в Puppetfile

Я использую R10K с Puppet. В Puppetfile это в основном DSL:

Поскольку формат Puppetfile фактически реализован с использованием Ruby DSL, можно использовать любое допустимое выражение Ruby.

Ссылка: https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd

Исходя из этого, я могу написать код Ruby в Puppetfile. Я пробовал, и это работает. Но я не нахожу и не знаю, как получить доступ к некоторым переменным.

В конечном итоге я пытаюсь сделать что-то вроде этого:

mod 'app',
  :git    => 'https://github.com/apps/app.git',
  :branch => ${environment}

Таким образом, чтобы извлеченная ветвь модуля была такой же, как и среда, для которой она извлечена. Очевидно ${environment} неправильный синтаксис и не настоящее имя переменной.

Таким образом, лучший ответ на этот вопрос - как получить переменную среды, а второй лучший ответ - как ссылаться на переменную (и какие переменные доступны) в Puppetfile.

Конечно, через 10 минут после того, как я задаю вопрос, я понял ответ (часами пытался это решить) ...

в Puppetfile у вас есть доступ к переменным DSL класс (см. Класс DLS в GitHub. Таким образом, у вас есть доступ к @librarian который является примером Puppetfile класс (см. puppetfile.rb). И оттуда у вас есть доступ к его атрибутам.

Итак, ответ на получение ветки имени текущей среды:

mod 'app',
  :git    => 'https://github.com/apps/app.git',
  :branch => @librarian.basedir.split('/').last

Не элегантно, и я желаю puppetfile.rb даст нам прямой доступ к окружающей среде, но это работает для меня.