vagrant-cachier 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +59 -34
- data/LICENSE.txt +1 -1
- data/README.md +27 -10
- data/development/Cheffile.lock +1 -5
- data/development/Vagrantfile +81 -71
- data/docs/buckets/apt-lists.md +18 -0
- data/docs/how-does-it-work.md +5 -6
- data/docs/index.md +24 -5
- data/docs/template.html +1 -0
- data/docs/usage.md +81 -28
- data/lib/vagrant-cachier/action/clean.rb +1 -1
- data/lib/vagrant-cachier/action/configure_bucket_root.rb +46 -0
- data/lib/vagrant-cachier/action/install_buckets.rb +47 -0
- data/lib/vagrant-cachier/bucket.rb +55 -0
- data/lib/vagrant-cachier/bucket/apt.rb +3 -12
- data/lib/vagrant-cachier/bucket/apt_cacher.rb +1 -13
- data/lib/vagrant-cachier/bucket/apt_lists.rb +24 -0
- data/lib/vagrant-cachier/bucket/chef.rb +1 -14
- data/lib/vagrant-cachier/bucket/composer.rb +1 -14
- data/lib/vagrant-cachier/bucket/gem.rb +4 -17
- data/lib/vagrant-cachier/bucket/npm.rb +1 -14
- data/lib/vagrant-cachier/bucket/pacman.rb +1 -14
- data/lib/vagrant-cachier/bucket/rvm.rb +4 -17
- data/lib/vagrant-cachier/bucket/yum.rb +4 -15
- data/lib/vagrant-cachier/bucket/zypper.rb +4 -15
- data/lib/vagrant-cachier/cap/debian/apt_lists_dir.rb +13 -0
- data/lib/vagrant-cachier/capabilities.rb +64 -0
- data/lib/vagrant-cachier/config.rb +35 -10
- data/lib/vagrant-cachier/hooks.rb +27 -0
- data/lib/vagrant-cachier/plugin.rb +12 -80
- data/lib/vagrant-cachier/version.rb +1 -1
- data/locales/en.yml +3 -7
- data/vagrant-cachier.gemspec +11 -1
- metadata +20 -12
- data/lib/vagrant-cachier/action/ensure_single_cache_root.rb +0 -64
- data/lib/vagrant-cachier/errors.rb +0 -9
- data/lib/vagrant-cachier/provision_ext.rb +0 -74
@@ -9,22 +9,10 @@ module VagrantPlugins
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def install
|
12
|
-
machine = @env[:machine]
|
13
|
-
guest = machine.guest
|
14
|
-
|
15
12
|
if guest.capability?(:apt_cacher_dir)
|
16
13
|
if guest_path = guest.capability(:apt_cacher_dir)
|
17
14
|
if machine.config.cache.enable_nfs
|
18
|
-
|
19
|
-
|
20
|
-
machine.communicate.tap do |comm|
|
21
|
-
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}")
|
22
|
-
unless comm.test("test -L #{guest_path}")
|
23
|
-
comm.sudo("rm -rf #{guest_path}")
|
24
|
-
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
25
|
-
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
26
|
-
end
|
27
|
-
end
|
15
|
+
symlink(guest_path)
|
28
16
|
else
|
29
17
|
@env[:ui].info I18n.t('vagrant_cachier.nfs_required', bucket: 'apt-cacher')
|
30
18
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cachier
|
3
|
+
class Bucket
|
4
|
+
class AptLists < Bucket
|
5
|
+
def self.capability
|
6
|
+
:apt_lists_dir
|
7
|
+
end
|
8
|
+
|
9
|
+
def install
|
10
|
+
if guest.capability?(:apt_lists_dir)
|
11
|
+
guest_path = guest.capability(:apt_lists_dir)
|
12
|
+
|
13
|
+
return if @env[:cache_dirs].include?(guest_path)
|
14
|
+
|
15
|
+
symlink(guest_path)
|
16
|
+
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}/partial")
|
17
|
+
else
|
18
|
+
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'apt-lists')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -7,22 +7,9 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:chef_file_cache_path)
|
14
11
|
guest_path = guest.capability(:chef_file_cache_path)
|
15
|
-
|
16
|
-
@env[:cache_dirs] << guest_path
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}")
|
20
|
-
unless comm.test("test -L #{guest_path}")
|
21
|
-
comm.sudo("rm -rf #{guest_path}")
|
22
|
-
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
23
|
-
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
24
|
-
end
|
25
|
-
end
|
12
|
+
symlink(guest_path) if guest_path
|
26
13
|
else
|
27
14
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Chef')
|
28
15
|
end
|
@@ -7,22 +7,9 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:composer_path)
|
14
11
|
if composer_path = guest.capability(:composer_path)
|
15
|
-
|
16
|
-
@env[:cache_dirs] << composer_path
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
comm.execute("mkdir -p #{bucket_path}")
|
20
|
-
|
21
|
-
unless comm.test("test -L #{composer_path}")
|
22
|
-
comm.sudo("rm -rf #{composer_path}")
|
23
|
-
comm.sudo("ln -s #{bucket_path} #{composer_path}")
|
24
|
-
end
|
25
|
-
end
|
12
|
+
symlink(composer_path, create_parent: false)
|
26
13
|
end
|
27
14
|
else
|
28
15
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Composer')
|
@@ -7,26 +7,13 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:gemdir)
|
14
11
|
if gemdir_path = guest.capability(:gemdir)
|
15
|
-
prefix
|
16
|
-
bucket_path
|
17
|
-
|
18
|
-
comm.execute("mkdir -p #{bucket_path}")
|
19
|
-
|
20
|
-
gem_cache_path = "#{gemdir_path}/cache"
|
21
|
-
|
22
|
-
@env[:cache_dirs] << gem_cache_path
|
12
|
+
prefix = gemdir_path.split('/').last
|
13
|
+
bucket_path = "/tmp/vagrant-cache/#{@name}/#{prefix}"
|
14
|
+
gem_cache_path = "#{gemdir_path}/cache"
|
23
15
|
|
24
|
-
|
25
|
-
comm.sudo("rm -rf #{gem_cache_path}")
|
26
|
-
comm.sudo("mkdir -p `dirname #{gem_cache_path}`")
|
27
|
-
comm.sudo("ln -s #{bucket_path} #{gem_cache_path}")
|
28
|
-
end
|
29
|
-
end
|
16
|
+
symlink(gem_cache_path, bucket_path)
|
30
17
|
end
|
31
18
|
else
|
32
19
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'RubyGems')
|
@@ -7,22 +7,9 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:npm_cache_dir)
|
14
11
|
guest_path = guest.capability(:npm_cache_dir)
|
15
|
-
|
16
|
-
@env[:cache_dirs] << guest_path
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}")
|
20
|
-
unless comm.test("test -L #{guest_path}")
|
21
|
-
comm.execute("rm -rf #{guest_path}")
|
22
|
-
comm.execute("mkdir -p `dirname #{guest_path}`")
|
23
|
-
comm.execute("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
24
|
-
end
|
25
|
-
end
|
12
|
+
user_symlink(guest_path) if guest_path
|
26
13
|
else
|
27
14
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'npm')
|
28
15
|
end
|
@@ -7,22 +7,9 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:pacman_cache_dir)
|
14
11
|
guest_path = guest.capability(:pacman_cache_dir)
|
15
|
-
|
16
|
-
@env[:cache_dirs] << guest_path
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}")
|
20
|
-
unless comm.test("test -L #{guest_path}")
|
21
|
-
comm.sudo("rm -rf #{guest_path}")
|
22
|
-
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
23
|
-
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
24
|
-
end
|
25
|
-
end
|
12
|
+
symlink(guest_path)
|
26
13
|
else
|
27
14
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Pacman')
|
28
15
|
end
|
@@ -7,26 +7,13 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:rvm_path)
|
14
11
|
if rvm_path = guest.capability(:rvm_path)
|
15
|
-
prefix
|
16
|
-
bucket_path
|
17
|
-
|
18
|
-
comm.execute("mkdir -p #{bucket_path}")
|
19
|
-
|
20
|
-
rvm_cache_path = "#{rvm_path}/archives"
|
21
|
-
|
22
|
-
@env[:cache_dirs] << rvm_cache_path
|
12
|
+
prefix = rvm_path.split('/').last
|
13
|
+
bucket_path = "/tmp/vagrant-cache/#{@name}/#{prefix}"
|
14
|
+
rvm_cache_path = "#{rvm_path}/archives"
|
23
15
|
|
24
|
-
|
25
|
-
comm.sudo("rm -rf #{rvm_cache_path}")
|
26
|
-
comm.sudo("mkdir -p `dirname #{rvm_cache_path}`")
|
27
|
-
comm.sudo("ln -s #{bucket_path} #{rvm_cache_path}")
|
28
|
-
end
|
29
|
-
end
|
16
|
+
symlink(rvm_cache_path, bucket_path)
|
30
17
|
end
|
31
18
|
else
|
32
19
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'RVM')
|
@@ -7,25 +7,14 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:yum_cache_dir)
|
14
11
|
guest_path = guest.capability(:yum_cache_dir)
|
12
|
+
return if @env[:cache_dirs].include?(guest_path)
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
# Ensure caching is enabled
|
20
|
-
comm.sudo("sed -i 's/keepcache=0/keepcache=1/g' /etc/yum.conf")
|
14
|
+
# Ensure caching is enabled
|
15
|
+
comm.sudo("sed -i 's/keepcache=0/keepcache=1/g' /etc/yum.conf")
|
21
16
|
|
22
|
-
|
23
|
-
unless comm.test("test -L #{guest_path}")
|
24
|
-
comm.sudo("rm -rf #{guest_path}")
|
25
|
-
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
26
|
-
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
27
|
-
end
|
28
|
-
end
|
17
|
+
symlink(guest_path)
|
29
18
|
else
|
30
19
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Yum')
|
31
20
|
end
|
@@ -7,25 +7,14 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def install
|
10
|
-
machine = @env[:machine]
|
11
|
-
guest = machine.guest
|
12
|
-
|
13
10
|
if guest.capability?(:zypper_cache_dir)
|
14
11
|
guest_path = guest.capability(:zypper_cache_dir)
|
12
|
+
return if @env[:cache_dirs].include?(guest_path)
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
machine.communicate.tap do |comm|
|
19
|
-
# Ensure caching is enabled
|
20
|
-
comm.sudo("zypper modifyrepo --keep-packages --all")
|
14
|
+
# Ensure caching is enabled
|
15
|
+
comm.sudo("zypper modifyrepo --keep-packages --all")
|
21
16
|
|
22
|
-
|
23
|
-
unless comm.test("test -L #{guest_path}")
|
24
|
-
comm.sudo("rm -rf #{guest_path}")
|
25
|
-
comm.sudo("mkdir -p `dirname #{guest_path}`")
|
26
|
-
comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}")
|
27
|
-
end
|
28
|
-
end
|
17
|
+
symlink(guest_path)
|
29
18
|
else
|
30
19
|
@env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'Zypper')
|
31
20
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cachier
|
3
|
+
class Plugin < Vagrant.plugin('2')
|
4
|
+
guest_capability 'linux', 'gemdir' do
|
5
|
+
require_relative 'cap/linux/gemdir'
|
6
|
+
Cap::Linux::Gemdir
|
7
|
+
end
|
8
|
+
|
9
|
+
guest_capability 'linux', 'rvm_path' do
|
10
|
+
require_relative 'cap/linux/rvm_path'
|
11
|
+
Cap::Linux::RvmPath
|
12
|
+
end
|
13
|
+
|
14
|
+
guest_capability 'linux', 'composer_path' do
|
15
|
+
require_relative 'cap/linux/composer_path'
|
16
|
+
Cap::Linux::ComposerPath
|
17
|
+
end
|
18
|
+
|
19
|
+
guest_capability 'linux', 'chef_file_cache_path' do
|
20
|
+
require_relative 'cap/linux/chef_file_cache_path'
|
21
|
+
Cap::Linux::ChefFileCachePath
|
22
|
+
end
|
23
|
+
|
24
|
+
guest_capability 'linux', 'npm_cache_dir' do
|
25
|
+
require_relative 'cap/linux/npm_cache_dir'
|
26
|
+
Cap::Linux::NpmCacheDir
|
27
|
+
end
|
28
|
+
|
29
|
+
guest_capability 'debian', 'apt_cache_dir' do
|
30
|
+
require_relative 'cap/debian/apt_cache_dir'
|
31
|
+
Cap::Debian::AptCacheDir
|
32
|
+
end
|
33
|
+
|
34
|
+
guest_capability 'debian', 'apt_cacher_dir' do
|
35
|
+
require_relative 'cap/debian/apt_cacher_dir'
|
36
|
+
Cap::Debian::AptCacherDir
|
37
|
+
end
|
38
|
+
|
39
|
+
guest_capability 'debian', 'apt_lists_dir' do
|
40
|
+
require_relative 'cap/debian/apt_lists_dir'
|
41
|
+
Cap::Debian::AptListsDir
|
42
|
+
end
|
43
|
+
|
44
|
+
guest_capability 'redhat', 'yum_cache_dir' do
|
45
|
+
require_relative 'cap/redhat/yum_cache_dir'
|
46
|
+
Cap::RedHat::YumCacheDir
|
47
|
+
end
|
48
|
+
|
49
|
+
guest_capability 'suse', 'yum_cache_dir' do
|
50
|
+
# Disable Yum on suse guests
|
51
|
+
end
|
52
|
+
|
53
|
+
guest_capability 'arch', 'pacman_cache_dir' do
|
54
|
+
require_relative 'cap/arch/pacman_cache_dir'
|
55
|
+
Cap::Arch::PacmanCacheDir
|
56
|
+
end
|
57
|
+
|
58
|
+
guest_capability 'suse', 'zypper_cache_dir' do
|
59
|
+
require_relative 'cap/suse/zypper_cache_dir'
|
60
|
+
Cap::SuSE::ZypperCacheDir
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,24 +1,39 @@
|
|
1
1
|
module VagrantPlugins
|
2
2
|
module Cachier
|
3
3
|
class Config < Vagrant.plugin(2, :config)
|
4
|
-
attr_accessor :scope, :auto_detect, :
|
4
|
+
attr_accessor :scope, :auto_detect, :synced_folder_opts
|
5
5
|
attr_reader :buckets
|
6
6
|
|
7
7
|
ALLOWED_SCOPES = %w( box machine )
|
8
8
|
|
9
9
|
def initialize
|
10
|
-
@scope
|
10
|
+
@scope = UNSET_VALUE
|
11
11
|
@auto_detect = UNSET_VALUE
|
12
|
-
@
|
12
|
+
@synced_folder_opts = UNSET_VALUE
|
13
|
+
@ui = Vagrant::UI::Colored.new
|
13
14
|
end
|
14
15
|
|
15
16
|
def enable(bucket, opts = {})
|
16
17
|
(@buckets ||= {})[bucket] = opts
|
17
18
|
end
|
18
19
|
|
20
|
+
def enable_nfs=(value)
|
21
|
+
@ui.warn "The `enable_nfs` config for vagrant-cachier has been deprecated " \
|
22
|
+
"and will be removed on 0.7.0, please use " \
|
23
|
+
"`synced_folder_opts = { type: :nfs }` instead.\n"
|
24
|
+
|
25
|
+
@synced_folder_opts = { type: :nfs } if value
|
26
|
+
end
|
27
|
+
|
19
28
|
def validate(machine)
|
20
29
|
errors = _detected_errors
|
21
30
|
|
31
|
+
if enabled? && backed_by_cloud_provider?(machine)
|
32
|
+
machine.ui.warn(I18n.t('vagrant_cachier.backed_by_cloud_provider',
|
33
|
+
provider: machine.provider_name))
|
34
|
+
disable!
|
35
|
+
end
|
36
|
+
|
22
37
|
if enabled? && ! ALLOWED_SCOPES.include?(@scope.to_s)
|
23
38
|
errors << I18n.t('vagrant_cachier.unknown_cache_scope',
|
24
39
|
allowed: ALLOWED_SCOPES.inspect,
|
@@ -28,18 +43,28 @@ module VagrantPlugins
|
|
28
43
|
{ "vagrant cachier" => errors }
|
29
44
|
end
|
30
45
|
|
46
|
+
def enabled?
|
47
|
+
return @enabled unless @enabled.nil?
|
48
|
+
|
49
|
+
@enabled = @scope != UNSET_VALUE
|
50
|
+
end
|
51
|
+
|
52
|
+
def disable!
|
53
|
+
@enabled = false
|
54
|
+
end
|
55
|
+
|
31
56
|
def finalize!
|
32
57
|
return unless enabled?
|
33
58
|
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@
|
37
|
-
@buckets = @buckets ? @buckets.dup : {}
|
59
|
+
@auto_detect = true if @auto_detect == UNSET_VALUE
|
60
|
+
@synced_folder_opts = nil if @synced_folder_opts == UNSET_VALUE
|
61
|
+
@buckets = @buckets ? @buckets.dup : {}
|
38
62
|
end
|
39
63
|
|
40
|
-
|
41
|
-
|
42
|
-
|
64
|
+
private
|
65
|
+
|
66
|
+
def backed_by_cloud_provider?(machine)
|
67
|
+
CLOUD_PROVIDERS.include?(machine.provider_name.to_s)
|
43
68
|
end
|
44
69
|
end
|
45
70
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cachier
|
3
|
+
class Plugin < Vagrant.plugin('2')
|
4
|
+
action_hook VagrantPlugins::Cachier::Plugin::ALL_ACTIONS do |hook|
|
5
|
+
require_relative 'action/configure_bucket_root'
|
6
|
+
require_relative 'action/install_buckets'
|
7
|
+
|
8
|
+
hook.before Vagrant::Action::Builtin::Provision, Action::ConfigureBucketRoot
|
9
|
+
# This will do the initial buckets installation
|
10
|
+
hook.after Vagrant::Action::Builtin::Provision, Action::InstallBuckets, chmod: true
|
11
|
+
end
|
12
|
+
|
13
|
+
# This ensure buckets are reconfigured after provisioners runs
|
14
|
+
action_hook :provisioner_run do |hook|
|
15
|
+
require_relative 'action/install_buckets'
|
16
|
+
hook.after :run_provisioner, Action::InstallBuckets
|
17
|
+
end
|
18
|
+
|
19
|
+
clean_action_hook = lambda do |hook|
|
20
|
+
require_relative 'action/clean'
|
21
|
+
hook.before Vagrant::Action::Builtin::GracefulHalt, Action::Clean
|
22
|
+
end
|
23
|
+
action_hook 'remove-guest-symlinks-on-halt', :machine_action_halt, &clean_action_hook
|
24
|
+
action_hook 'remove-guest-symlinks-on-package', :machine_action_package, &clean_action_hook
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|