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_pathattribute 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