Password and sensitive information strategies when using Vagrant and Chef-solo for personal use
Data bags
This is the best option when working within a team but is too complicated for personal use.
Password Shadow Hash
Not as complicated as data bags but required that ruby-shadow is installed on your provision target. Another drawback is that you need to repeat the mkpasswd/openssl passwd
command and copy & paste to recipe steps each time there is a change in the sensitive information.
ENV variables (BEST OPTION)
Since Vagrant is serving up the provision you can leverage local ENV
settings within the Vagrantfile. This approach doesn't require ruby-shadow and when sensitive information changes you simply edit your environmental variables and they will be picked up on the next vagrant run. Don't forget to run source ~/.profile
in the shell where the vagrant
command is executed.
export AWS_ACCESS_KEY_ID="***********************" export AWS_SECRET_ACCESS_KEY="******************************" export MY_PUBLIC_SSH_KEY_PATH=$HOME/.ssh/id_rsa.pub export MY_PRIVATE_SSH_KEY_PATH=$HOME/.ssh/id_rsa
Vagrant.configure("2") do |config| config.vm.hostname = "test_server" config.vm.box = "precise64" config.vm.network :private_network, ip: "33.33.33.10" config.vm.provision :chef_solo do |chef| chef.json = { misc: { ssh_key: File.read(ENV['MY_PUBLIC_SSH_KEY_PATH']), ssh_private_key: File.read(ENV['MY_PRIVATE_SSH_KEY_PATH']), }, aws: { access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] } } end end
gitolite_user node.gitolite.username do ...omitted ssh_key node.misc.ssh_key end
- Pushed on 09/23/2013 by Christian