0
votes

I have had a number of issues recently with vagrant-berkshelf not syncing Chef cookbooks on an existing machine reliably. And, basically, when doing research on workarounds, I see something like:

vagrant-berkshelf is deprecated, use Test Kitchen instead.

My use case is that I have Vagrantfiles, used to build VMs and DigitalOcean droplets, that are hand-written and only use Chef to provision the VMs. I am most definitely approaching Chef as a user, not an author or tester of cookbooks.

So, I am in a case of Vagrant -> Chef, not Chef -> Vagrant.

When looking at Kitche-Vagrant, I see that:

The kitchen-vagrant driver for Kitchen generates a single Vagrantfile for each instance of Kitchen in a sandboxed directory..

My question is: if my workflow relies on hand-written, complex, Vagrantfiles, can I continue to use Chef as a provisioner without having to rely on vagrant-berkshelf?

Some of the possible alternatives I see are:

  • mangle Test Kitchen configuration to work with my exiting Vagrantfile. I fear that this is not the intent of this tool and will not end well.

  • use chef.cookbooks_path attribute in vagrant and let it take the place of vagrant-berkshelf.

  • switch out provisioners and use say Vagrant->Ansible.

The Vagrantfile below is somewhat simplified, but the gist is that the Vagrantfile is in charge and Chef is just used to provision.

# -*- mode: ruby -*-
# vi: set ft=ruby :

#...grab some variables from my host environment...
DJANGO_SECRET_KEY = ENV['BUILD_DJANGO_SECRET_KEY']

Vagrant.configure('2') do |config|

  config.vm.define "myserver" do |config|
      config.vm.provider :digital_ocean do |provider, override|
        override.ssh.private_key_path = digoconf.private_key_path
        override.vm.box_url = "https://github.com/devopsgroup-io/vagrant-digitalocean/raw/master/box/digital_ocean.box"
        provider.token = digoconf.TOKEN
        ...
      end

      #had chef_client before, that worked too.
      config.vm.provision "chef_zero" do |chef|

        chef.log_level = "info"

        #I haven't tested these out
        #chef.cookbooks_path = ["../community/cookbooks","../.berkshelf/cookbooks"]

        env_for_chef = " DJANGO_SECRET_KEY='#{DJANGO_SECRET_KEY}'"
        chef.binary_env = env_for_chef

        chef.environment = "digitalocean"
        chef.add_recipe "base::install"
      end
  end
end
1

1 Answers

1
votes

It isn't deprecated per se, but it does no longer have a maintainer and does highly recommend against its use. There is no replacement for the workflow you describe. Sorry. If you are interested in taking over as maintainer, I can put you in contact with the team.