2016-03-06 58 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