2013-07-20 155 views
4

我有以下幾點:木偶 - 控制安裝包版本

class compass { 
    package { 'ruby-dev': 
     ensure => installed, 
    } 
    package { ["rubygems"]: 
     ensure => 'installed' 
    } 

    package { ['sass']: 
     ensure => '3.2.0.alpha.277', 
     provider => 'gem', 
     require => Package['rubygems'] 
    }~> 
    package { ['compass']: 
     ensure => '0.12.2', 
     provider => 'gem', 
     require => Package['rubygems'] 
    } 
} 

當我做gem list它運行後,中sass兩個版本已安裝:

# gem list 

*** LOCAL GEMS *** 

chunky_png (1.2.8) 
compass (0.12.2) 
ffi (1.9.0) 
fssm (0.2.10) 
listen (1.1.6) 
rake (10.1.0) 
rb-fsevent (0.9.3) 
rb-inotify (0.9.0) 
rb-kqueue (0.2.0) 
sass (3.3.0.alpha.212, 3.2.0.alpha.277) 
zurb-foundation (3.0.6) 

爲了讓我的代碼要運行,只應安裝3.2.0.alpha.277。看起來sass包的要求已經滿足,但是compass包需要sass「〜> 3.1」。

我如何確保只安裝了3.2.0.alpha.277版本的sass?

回答

4

有趣的是,我在Ubuntu 12.04的一個非常乾淨的版本上運行了它,它只安裝了277版本。

另外我不認爲包資源可以爲你做這個。你可以在一個exec處理它雖然,如:

exec { 'remove-sass-3.3.0.alpha.212': 
    command => 'gem uninstall sass -v=3.3.0.alpha.212', 
    unless => 'test `gem list --local | grep -q 3.3.0.alpha.212; echo $?` -ne 0', 
    path => ['/usr/bin', '/bin'], 
} 

你甚至可以把它包起來作爲一個定義的類型:

define remove-gem ($version) { 
    exec { "remove-gem-${name}-version-${version}": 
    command => "gem uninstall ${name} -v=${version}", 
    unless => "test `gem list --local | grep -q \"${name}.*${version}\"; echo $?` -ne 0", 
    path => ['/usr/bin', '/bin'], 
    } 
} 


remove-gem {'sass': 
    version => '3.3.0.alpha.212', 
} 

這樣你可以重複使用它刪除其他特殊寶石版本。

+0

再次感謝。這像一個魅力。 – phidah