Merge pull request #14 from patcon/14-chef-file-cache-path
Adds `file_cache_path` support for Chef
This commit is contained in:
commit
a5b01d2060
11 changed files with 177 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -15,3 +15,4 @@ test/tmp
|
||||||
test/version_tmp
|
test/version_tmp
|
||||||
tmp
|
tmp
|
||||||
.vagrant
|
.vagrant
|
||||||
|
development/cookbooks
|
||||||
|
|
4
Gemfile
4
Gemfile
|
@ -4,8 +4,10 @@ source 'https://rubygems.org'
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
gem 'vagrant', github: 'mitchellh/vagrant'
|
gem 'vagrant', github: 'mitchellh/vagrant', ref: 'v1.2.4'
|
||||||
|
gem 'vagrant-librarian-chef'
|
||||||
gem 'vagrant-lxc', github: 'fgrehm/vagrant-lxc'
|
gem 'vagrant-lxc', github: 'fgrehm/vagrant-lxc'
|
||||||
|
gem 'vagrant-omnibus'
|
||||||
gem 'vagrant-pristine', github: 'fgrehm/vagrant-pristine'
|
gem 'vagrant-pristine', github: 'fgrehm/vagrant-pristine'
|
||||||
gem 'rake'
|
gem 'rake'
|
||||||
end
|
end
|
||||||
|
|
60
Gemfile.lock
60
Gemfile.lock
|
@ -12,9 +12,10 @@ GIT
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/mitchellh/vagrant.git
|
remote: git://github.com/mitchellh/vagrant.git
|
||||||
revision: cf0e302e34f3def9d5405bb14847b4b0cb67de01
|
revision: 0219bb87725aac28a97c0e924c310cc97831fd9d
|
||||||
|
ref: v1.2.4
|
||||||
specs:
|
specs:
|
||||||
vagrant (1.2.5.dev)
|
vagrant (1.2.4)
|
||||||
childprocess (~> 0.3.7)
|
childprocess (~> 0.3.7)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
i18n (~> 0.6.0)
|
i18n (~> 0.6.0)
|
||||||
|
@ -30,16 +31,69 @@ PATH
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
|
archive-tar-minitar (0.5.2)
|
||||||
|
chef (11.4.4)
|
||||||
|
erubis
|
||||||
|
highline (>= 1.6.9)
|
||||||
|
json (>= 1.4.4, <= 1.7.7)
|
||||||
|
mixlib-authentication (>= 1.3.0)
|
||||||
|
mixlib-cli (~> 1.3.0)
|
||||||
|
mixlib-config (>= 1.1.2)
|
||||||
|
mixlib-log (>= 1.3.0)
|
||||||
|
mixlib-shellout
|
||||||
|
net-ssh (~> 2.6)
|
||||||
|
net-ssh-multi (~> 1.1.0)
|
||||||
|
ohai (>= 0.6.0)
|
||||||
|
rest-client (>= 1.0.4, < 1.7.0)
|
||||||
|
yajl-ruby (~> 1.1)
|
||||||
childprocess (0.3.9)
|
childprocess (0.3.9)
|
||||||
ffi (~> 1.0, >= 1.0.11)
|
ffi (~> 1.0, >= 1.0.11)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
ffi (1.9.0)
|
ffi (1.9.0)
|
||||||
|
highline (1.6.19)
|
||||||
i18n (0.6.4)
|
i18n (0.6.4)
|
||||||
|
ipaddress (0.8.0)
|
||||||
|
json (1.7.7)
|
||||||
|
librarian (0.1.0)
|
||||||
|
highline
|
||||||
|
thor (~> 0.15)
|
||||||
|
librarian-chef (0.0.1)
|
||||||
|
archive-tar-minitar (>= 0.5.2)
|
||||||
|
chef (>= 0.10)
|
||||||
|
librarian (~> 0.1.0)
|
||||||
log4r (1.1.10)
|
log4r (1.1.10)
|
||||||
|
mime-types (1.23)
|
||||||
|
mixlib-authentication (1.3.0)
|
||||||
|
mixlib-log
|
||||||
|
mixlib-cli (1.3.0)
|
||||||
|
mixlib-config (1.1.2)
|
||||||
|
mixlib-log (1.6.0)
|
||||||
|
mixlib-shellout (1.2.0)
|
||||||
net-scp (1.1.2)
|
net-scp (1.1.2)
|
||||||
net-ssh (>= 2.6.5)
|
net-ssh (>= 2.6.5)
|
||||||
net-ssh (2.6.8)
|
net-ssh (2.6.8)
|
||||||
|
net-ssh-gateway (1.2.0)
|
||||||
|
net-ssh (>= 2.6.5)
|
||||||
|
net-ssh-multi (1.1)
|
||||||
|
net-ssh (>= 2.1.4)
|
||||||
|
net-ssh-gateway (>= 0.99.0)
|
||||||
|
ohai (6.18.0)
|
||||||
|
ipaddress
|
||||||
|
mixlib-cli
|
||||||
|
mixlib-config
|
||||||
|
mixlib-log
|
||||||
|
mixlib-shellout
|
||||||
|
systemu
|
||||||
|
yajl-ruby
|
||||||
rake (10.1.0)
|
rake (10.1.0)
|
||||||
|
rest-client (1.6.7)
|
||||||
|
mime-types (>= 1.16)
|
||||||
|
systemu (2.5.2)
|
||||||
|
thor (0.18.1)
|
||||||
|
vagrant-librarian-chef (0.1.2)
|
||||||
|
librarian-chef
|
||||||
|
vagrant-omnibus (1.1.0)
|
||||||
|
yajl-ruby (1.1.0)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
@ -48,5 +102,7 @@ DEPENDENCIES
|
||||||
rake
|
rake
|
||||||
vagrant!
|
vagrant!
|
||||||
vagrant-cachier!
|
vagrant-cachier!
|
||||||
|
vagrant-librarian-chef
|
||||||
vagrant-lxc!
|
vagrant-lxc!
|
||||||
|
vagrant-omnibus
|
||||||
vagrant-pristine!
|
vagrant-pristine!
|
||||||
|
|
13
README.md
13
README.md
|
@ -168,6 +168,18 @@ end
|
||||||
|
|
||||||
Used by Arch Linux, will get configured under guest's `/var/cache/pacman/pkg`.
|
Used by Arch Linux, will get configured under guest's `/var/cache/pacman/pkg`.
|
||||||
|
|
||||||
|
#### Chef
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
config.vm.box = 'some-box-using-chef-provisioner'
|
||||||
|
config.cache.enable :chef
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
When a Chef provisioner is detected, this bucket caches the default
|
||||||
|
`file_cache_path` directory, `/var/chef/cache`. Requires Vagrant 1.2.4+.
|
||||||
|
|
||||||
#### RubyGems
|
#### RubyGems
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -183,7 +195,6 @@ folder under the result of running `gem env gemdir` as the default SSH user (usu
|
||||||
it is already installed before enabling the bucket, otherwise you won't benefit
|
it is already installed before enabling the bucket, otherwise you won't benefit
|
||||||
from this plugin.
|
from this plugin.
|
||||||
|
|
||||||
|
|
||||||
#### RVM
|
#### RVM
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
|
6
development/Cheffile
Normal file
6
development/Cheffile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
#^syntax detection
|
||||||
|
|
||||||
|
site 'http://community.opscode.com/api/v1'
|
||||||
|
|
||||||
|
cookbook 'java'
|
12
development/Cheffile.lock
Normal file
12
development/Cheffile.lock
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
SITE
|
||||||
|
remote: http://community.opscode.com/api/v1
|
||||||
|
specs:
|
||||||
|
chef_handler (1.1.4)
|
||||||
|
java (1.12.0)
|
||||||
|
windows (>= 0.0.0)
|
||||||
|
windows (1.10.0)
|
||||||
|
chef_handler (>= 0.0.0)
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
java (>= 0)
|
||||||
|
|
14
development/Vagrantfile
vendored
14
development/Vagrantfile
vendored
|
@ -2,7 +2,9 @@
|
||||||
# vi: set ft=ruby :
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
Vagrant.require_plugin 'vagrant-cachier'
|
Vagrant.require_plugin 'vagrant-cachier'
|
||||||
|
Vagrant.require_plugin 'vagrant-librarian-chef'
|
||||||
Vagrant.require_plugin 'vagrant-lxc'
|
Vagrant.require_plugin 'vagrant-lxc'
|
||||||
|
Vagrant.require_plugin 'vagrant-omnibus'
|
||||||
Vagrant.require_plugin 'vagrant-pristine'
|
Vagrant.require_plugin 'vagrant-pristine'
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
Vagrant.configure("2") do |config|
|
||||||
|
@ -16,6 +18,18 @@ Vagrant.configure("2") do |config|
|
||||||
vb.vm.network :private_network, ip: "192.168.50.123"
|
vb.vm.network :private_network, ip: "192.168.50.123"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.omnibus.chef_version = :latest
|
||||||
|
config.vm.provision :chef_solo do |chef|
|
||||||
|
chef.add_recipe "java::oracle"
|
||||||
|
chef.json = {
|
||||||
|
:java => {
|
||||||
|
:oracle => {
|
||||||
|
:accept_oracle_download_terms => true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
debian_like_configs = lambda do |debian|
|
debian_like_configs = lambda do |debian|
|
||||||
debian.vm.provision :shell, inline: '
|
debian.vm.provision :shell, inline: '
|
||||||
if ! (which bundle > /dev/null); then
|
if ! (which bundle > /dev/null); then
|
||||||
|
|
|
@ -34,6 +34,7 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
require_relative "bucket/apt"
|
require_relative "bucket/apt"
|
||||||
|
require_relative "bucket/chef"
|
||||||
require_relative "bucket/gem"
|
require_relative "bucket/gem"
|
||||||
require_relative "bucket/pacman"
|
require_relative "bucket/pacman"
|
||||||
require_relative "bucket/yum"
|
require_relative "bucket/yum"
|
||||||
|
|
34
lib/vagrant-cachier/bucket/chef.rb
Normal file
34
lib/vagrant-cachier/bucket/chef.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module Cachier
|
||||||
|
class Bucket
|
||||||
|
class Chef < Bucket
|
||||||
|
def self.capability
|
||||||
|
:chef_file_cache_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def install
|
||||||
|
machine = @env[:machine]
|
||||||
|
guest = machine.guest
|
||||||
|
|
||||||
|
if guest.capability?(:chef_file_cache_path)
|
||||||
|
guest_path = guest.capability(:chef_file_cache_path)
|
||||||
|
|
||||||
|
@env[:cache_dirs] << guest_path
|
||||||
|
|
||||||
|
machine.communicate.tap do |comm|
|
||||||
|
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}")
|
||||||
|
unless comm.test("test -L #{guest_path}")
|
||||||
|
comm.sudo("rm -rf #{guest_path}")
|
||||||
|
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
||||||
|
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# TODO: Raise a better error
|
||||||
|
raise "You've configured a Chef cache for a guest machine that does not support it!"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
31
lib/vagrant-cachier/cap/linux/chef_file_cache_path.rb
Normal file
31
lib/vagrant-cachier/cap/linux/chef_file_cache_path.rb
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module Cachier
|
||||||
|
module Cap
|
||||||
|
module Linux
|
||||||
|
module ChefFileCachePath
|
||||||
|
def self.chef_provisioner?(machine)
|
||||||
|
provisioners = machine.config.vm.provisioners
|
||||||
|
chef_provisioners = [:chef_solo, :chef_client]
|
||||||
|
compat_provisioners = provisioners.keep_if { |p| chef_provisioners.include? p.name }
|
||||||
|
|
||||||
|
if compat_provisioners.size > 1
|
||||||
|
raise "One machine is using multiple chef provisioners, which is unsupported."
|
||||||
|
end
|
||||||
|
|
||||||
|
using_chef = compat_provisioners.empty? ? false : true
|
||||||
|
|
||||||
|
using_chef
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.chef_file_cache_path(machine)
|
||||||
|
chef_file_cache_path = nil
|
||||||
|
# TODO: Determine paths rather than using default.
|
||||||
|
chef_file_cache_path = '/var/chef/cache' if chef_provisioner?(machine)
|
||||||
|
|
||||||
|
return chef_file_cache_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -18,6 +18,11 @@ module VagrantPlugins
|
||||||
Cap::Linux::RvmPath
|
Cap::Linux::RvmPath
|
||||||
end
|
end
|
||||||
|
|
||||||
|
guest_capability 'linux', 'chef_file_cache_path' do
|
||||||
|
require_relative 'cap/linux/chef_file_cache_path'
|
||||||
|
Cap::Linux::ChefFileCachePath
|
||||||
|
end
|
||||||
|
|
||||||
guest_capability 'debian', 'apt_cache_dir' do
|
guest_capability 'debian', 'apt_cache_dir' do
|
||||||
require_relative 'cap/debian/apt_cache_dir'
|
require_relative 'cap/debian/apt_cache_dir'
|
||||||
Cap::Debian::AptCacheDir
|
Cap::Debian::AptCacheDir
|
||||||
|
|
Loading…
Reference in a new issue