使用 Chef Solo 和 Vagrant 安装给定版本的 MongoDB

Install a given version of MongoDB with Chef Solo and Vagrant

出于教育目的,我正在和 Vagrant 和 Chef Solo 一起玩。我会养一台 Ubuntu 机器给定的 MongoDB 版本(以后我会和我的同事分享机器来做开发机器,所以我们都需要 运行相同的环境)。 这是我的 Vagrantfile,它可以工作并使用 this MongoDB recipe(以及所有相关的依赖项):

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision "chef_solo" do |chef|
    chef.add_recipe "mongodb"

    chef.json = {
      "mongodb" => {
        "package_version" => "2.6.4"
      }
    }
  end

  config.vm.network "forwarded_port", guest: 27017, host: 27017
end

vagrant up 之后,结果是不可预测的,因为安装的版本不反映 package_version。错误在哪里?我可以指定要安装的版本吗?

默认情况下,它会尝试安装 ubuntu 仓库中提供的 mongo deb 包。您指定的要安装的版本不在此存储库中:

==> default: STDERR: E: Version '2.6.4' for 'mongodb' was not found

如果您想安装与 ubuntu 提供的版本不同的替代版本,您需要在 mongodb-org 存储库中添加。您可以通过添加以下配方来做到这一点:

chef.add_recipe "mongodb::mongodb_org_repo"

所以你的 Vagrantfile 现在看起来像:

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision "chef_solo" do |chef|
    chef.add_recipe "mongodb::mongodb_org_repo"
    chef.add_recipe "mongodb"
    chef.json = {
      "mongodb" => {
        "package_version" => "2.6.4"
      }
    }
  end

  config.vm.network "forwarded_port", guest: 27017, host: 27017
end

您可以确认安装的 mongodb-org 包的版本:

vagrant@precise64:~$ dpkg -l | grep mongodb-org
ii  mongodb-org                              2.6.4                      MongoDB open source document-oriented database system (metapackage)
ii  mongodb-org-mongos                       2.6.11                     MongoDB sharded cluster query router
ii  mongodb-org-server                       2.6.11                     MongoDB database server
ii  mongodb-org-shell                        2.6.11                     MongoDB shell client
ii  mongodb-org-tools                        2.6.11                     MongoDB tools