Implement generic bucket

This bucket must be explicitly enabled and may be useful for users
wanting a generic caching mechanism that they can use directly instead
of via some predefined packaging system.

For instance, this enables one to implement a cache for packages
downloaded via wget or curl.
This commit is contained in:
Gustavo L. de M. Chaves 2014-03-23 17:16:18 -03:00
parent 2df1e31940
commit a63156e482
3 changed files with 61 additions and 0 deletions

41
docs/buckets/generic.md Normal file
View file

@ -0,0 +1,41 @@
# Generic
This bucket is never enabled by default. You have to enable it explicitly like
this:
```ruby
Vagrant.configure("2") do |config|
config.cache.enable :generic, { :cache_dir => "/var/cache/some" }
end
```
The :cache_dir parameter is required. It specifies the directory on the guest
that will be cached under the "generic" bucket.
You may enable more than one generic bucket by giving them different names via
the :name parameter, like this:
```ruby
Vagrant.configure("2") do |config|
config.cache.enable :generic, { :name => "one", :cache_dir => "/var/cache/one" }
config.cache.enable :generic, { :name => "two", :cache_dir => "/var/cache/two" }
end
```
In this case you get two buckets called "generic-one" and "generic-two".
The Generic bucket is useful if you want to implement a caching mechanism by
hand. For instance, if you want to cache your wget downloads under
/var/cache/wget you can do this:
```ruby
Vagrant.configure("2") do |config|
config.cache.enable :generic, { :name => wget, :cache_dir => "/var/cache/wget" }
end
```
Then, you invoke wget like this:
```sh
wget -N -P /var/cache/wget URL
```

View file

@ -98,3 +98,4 @@ require_relative "bucket/apt_lists"
require_relative "bucket/composer" require_relative "bucket/composer"
require_relative "bucket/npm" require_relative "bucket/npm"
require_relative "bucket/zypper" require_relative "bucket/zypper"
require_relative "bucket/generic"

View file

@ -0,0 +1,19 @@
module VagrantPlugins
module Cachier
class Bucket
class Generic < Bucket
def self.capability
:generic_cache_dir
end
def install
if @configs.has_key?(:cache_dir)
@name = @configs.has_key?(:name) ? "generic-#{@configs[:name]}" : "generic"
symlink(@configs[:cache_dir])
else
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Generic')
end
end
end
end
end