我有以下内容:
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?
答案 0 :(得分: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',
}
通过这种方式,您可以重复使用它来删除其他特定的gem版本。