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

Ste*_*ett 70 rubygems chef-infra vagrant

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

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

mir*_*fer 104

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

vagrant plugin install vagrant-omnibus
Run Code Online (Sandbox Code Playgroud)

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

config.omnibus.chef_version = :latest
Run Code Online (Sandbox Code Playgroud)

您还可以指定特定版本:

config.omnibus.chef_version = '11.6.0'
Run Code Online (Sandbox Code Playgroud)

  • 这应该被投票,并且可能被标记为正确的答案,而不是旧的当前标记的正确答案. (11认同)

Bry*_*sen 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"
Run Code Online (Sandbox Code Playgroud)

阻止前的Vagrantfile config.vm.provision :chef_solo.

关于hauraki对http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/的评论的道具

编辑包括贾森梅菲尔德的评论.确保并给他一个upvote.我加入--no-upgrade了速度并匹配--conservative第二行.你可以改为做杰森所做的事,并删除--no-upgrade--conservative.

编辑以包括匿名用户建议的编辑228653


jti*_*man 31

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

vagrant up --no-provision 
vagrant ssh
Run Code Online (Sandbox Code Playgroud)

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

例如,我在Vagrant框中使用Opscode Omnibus Full Stack Installer(最初使用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
Run Code Online (Sandbox Code Playgroud)

不要忘记将磁盘"归零"以减小尺寸.

# 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
Run Code Online (Sandbox Code Playgroud)

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

vagrant package
vagrant box add mynewlucid32 package.box
Run Code Online (Sandbox Code Playgroud)

如果要使用相同的方框名称,则需要先删除现有方框(〜/ .vagrant.d/boxes/BOXNAME).


Sam*_*Sam 12

使用Chef进行配置时,您可以指定许多选项.其中之一是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
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这应该被标记为正确的答案.理由:(1)它独立于外部插件和操作系统(2),可以更轻松地标准化团队的开发环境. (2认同)

小智 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'
Run Code Online (Sandbox Code Playgroud)

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