2016-03-06 2 views
1

Я написал модуль для менеджера версий Ruby для chruby. Это отлично работает с Puppet v3, но я только начал использовать Puppet v4, а параметр $version не получил интерполяцию в строке $source_url.Параметры по умолчанию, которые зависят от других параметров

class chruby(
    $version, 
    $source_url = "https://github.com/postmodern/chruby/archive/v${version}.tar.gz", 
) { 

Я всегда хочу версия прошла, и я могу хотеть источник URL передается, хотя обычно не - не правила изменились, что это больше не допускается, и как я могу получить эту работу с v4? Я пробовал:

unless $source_url { 
    $source_url = "https://github.com/postmodern/chruby/archive/v${version}.tar.gz" 
    } 

В корпусе класса, но он также не интерполируется. Я проверил, есть $version, используя notice. Я не могу найти, как это сделать из документации:

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

Любая помощь или понимание были бы высоко оценены.

+0

Он никогда надежно работал в кукольном, чтобы сослаться на значении одного класса или параметр определяется типа в значении по умолчанию другой, где «надежно» означает возможность предсказать, будет ли он будет работать, прежде чем попробовать его в первый раз для данной версии данного класса. Не делай этого. Если бы вам показалось, что вам это удалось, то вам просто повезло. Имея только два параметра класса, у вас был 50% -ный шанс на это. Если он перестает работать, когда вы обновляетесь, ваша неудача не удалась. –

+0

Чтобы быть справедливым для меня, он работал надежно для меня в течение нескольких лет с несколькими параметрами с помощью Puppet 3, и я получил его от кого-то другого (я не помню, где это было), поэтому я буду обвинять их. Чтобы быть честным с Puppetlabs, [они переписали синтаксический анализатор, чтобы быть более строгим и сказали, что это было потрясающее изменение] (https://docs.puppetlabs.com/puppet/4.0/reference/release_notes.html#break-next-version-of -puppet-language), поэтому я не буду стонать об этом. Много :) – iain

ответ

2

Используйте другие переменный:

class chruby(
    $version, 
    $source_url = undef, 
) { 
    $actual_source_url = $source_url ? { 
    undef => "https://github.com/postmodern/chruby/archive/v${version}.tar.gz", 
    default => $source_url, 
    } 
    notice($actual_source_url) 
} 
+0

Спасибо, очень полезно. – iain

Смежные вопросы