如何控制Vagrant用于配置VM的Chef版本?

时间:2012-07-04 08:41:56

标签: rubygems chef vagrant

由于版本0.10.10中的错误,当前的Chef配方未运行。如何将Vagrant使用的Chef版本升级到0.10.12?

我不想只为VM的当前实例更新它 - 我一直在破坏和重建它们。我需要在Vagrant基本框中更改某些内容,还是在我的(物理)系统安装中更改某些内容?

6 个答案:

答案 0 :(得分:103)

使用Vagrant插件vagrant-omnibus对我很有用:

vagrant plugin install vagrant-omnibus

然后,您可以在进行配置之前在Vagrantfile中简单配置您的厨师版本:

config.omnibus.chef_version = :latest

您还可以指定特定版本:

config.omnibus.chef_version = '11.6.0'

答案 1 :(得分:40)

添加行

config.vm.provision :shell, :inline => 'apt-get install build-essential ruby1.9.1-dev --no-upgrade --yes'
config.vm.provision :shell, :inline => "gem install chef --version 11.4.2 --no-rdoc --no-ri --conservative"
config.vm.provision :chef_solo阻止之前

到您的Vagrant文​​件。

支持hauraki对http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

的评论

编辑以包括Jason Mayfield的评论。确保并给他一个upvote。我添加了--no-upgrade以加快速度并匹配第二行的--conservative。您可以改为执行Jason所做的操作,同时删除--no-upgrade--conservative

已修改为包含匿名用户建议编辑228653

答案 2 :(得分:31)

重建基础框。首先,在没有配置和SSH的情况下启动它。

vagrant up --no-provision 
vagrant ssh

然后,执行更新框所需的命令。这可以包括更新Chef和Ruby。 (可选)更新操作系统等的软件包。您应该清除所有不需要的软件包,例如下载的软件包文件或缓存。

例如,我在我的Vagrant框中使用Opscode Omnibus Full Stack Installer for Chef(最初使用VeeWee构建),并且我也更新了包。

sudo dpkg --purge chef chef-full
sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash
sudo apt-get update && sudo aptitude safe-upgrade
sudo rm /var/cache/apt/archives/*.deb

不要忘记将磁盘“归零”以减小尺寸。

# a bunch of commands like gem install chef, apt-get upgrade, whatever
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm /EMPTY
exit

然后,将盒子打包并将其添加到您的Vagrant环境中以供使用。

vagrant package
vagrant box add mynewlucid32 package.box

如果你想使用相同的盒子名称,你需要先删除现有的盒子(〜/ .vagrant.d / boxes / BOXNAME)。

答案 3 :(得分:12)

使用Chef进行配置时,您可以指定一些options。其中一个是version,它允许您指定所需的Chef版本。

例如,请参阅我chef.version的摘录中的Vagrantfile行:

config.vm.provision :chef_solo do |chef|
   chef.version = "10.14.2"
   chef.cookbooks_path = "cookbooks"
   chef.add_recipe("vagrant_main")
 end

答案 4 :(得分:11)

我无法对答案发表评论,但我想在上面给Bryan Larsen的答案添加一条说明。为了使他的配置命令工作,我需要在它之前添加一行,以便能够在安装新的Chef版本期间构建gem原生扩展。因此,它成了:

config.vm.provision :shell, inline: 'apt-get install ruby1.9.1-dev'
config.vm.provision :shell, inline: 'gem install chef --version 11.4.4 --no-rdoc --no-ri'

这是在Ubuntu 13.04,如果对任何人都很重要。

答案 5 :(得分:0)

如果您正在使用Chef Test Kitchen,那么您可以在{{1}}文件中指定Chef版本,如下所示:

{{1}}