diff --git a/lib/vagrant-cachier/action/install.rb b/lib/vagrant-cachier/action/install.rb deleted file mode 100644 index 2106146..0000000 --- a/lib/vagrant-cachier/action/install.rb +++ /dev/null @@ -1,54 +0,0 @@ -module VagrantPlugins - module Cachier - class Action - class Install - def initialize(app, env) - @app = app - @logger = Log4r::Logger.new("vagrant::cachier::action::install") - end - - def call(env) - return @app.call(env) unless env[:machine].config.cache.enabled? - - @env = env - - FileUtils.mkdir_p(cache_root.to_s) unless cache_root.exist? - - nfs_flag = env[:machine].config.cache.enable_nfs - env[:machine].config.vm.synced_folder cache_root, '/tmp/vagrant-cache', id: "vagrant-cache", nfs: nfs_flag - - @app.call env - - env[:cache_dirs] = [] - - if env[:machine].config.cache.auto_detect - Bucket.auto_detect(env) - end - - if env[:machine].config.cache.buckets.any? - env[:ui].info 'Configuring cache buckets...' - cache_config = env[:machine].config.cache - cache_config.buckets.each do |bucket_name, configs| - @logger.debug "Installing #{bucket_name} with configs #{configs.inspect}" - Bucket.install(bucket_name, env, configs) - end - - data_file = env[:machine].data_dir.join('cache_dirs') - data_file.open('w') { |f| f.print env[:cache_dirs].join("\n") } - end - end - - def cache_root - @cache_root ||= case @env[:machine].config.cache.scope - when :box - @env[:home_path].join('cache', @env[:machine].box.name) - when :machine - @env[:machine].data_dir.join('cache') - else - raise "Unknown cache scope: '#{@env[:machine].config.cache.scope}'" - end - end - end - end - end -end diff --git a/lib/vagrant-cachier/action/provision_ext.rb b/lib/vagrant-cachier/action/provision_ext.rb new file mode 100644 index 0000000..d03a307 --- /dev/null +++ b/lib/vagrant-cachier/action/provision_ext.rb @@ -0,0 +1,70 @@ +require_relative '../bucket' + +module VagrantPlugins + module Cachier + module Action + module ProvisionExt + def self.included(base) + base.class_eval do + def cachier_debug(msg) + @logger.debug "[CACHIER] #{msg}" + end + + alias :old_call :call + def call(env) + return old_call(env) unless env[:machine].config.cache.enabled? + + @env = env + + FileUtils.mkdir_p(cache_root.to_s) unless cache_root.exist? + + nfs_flag = env[:machine].config.cache.enable_nfs + env[:machine].config.vm.synced_folder cache_root, '/tmp/vagrant-cache', id: "vagrant-cache", nfs: nfs_flag + + env[:cache_dirs] = [] + + old_call(env) + + configure_cache_buckets + end + + alias :old_run_provisioner :run_provisioner + def run_provisioner(*args) + configure_cache_buckets + old_run_provisioner(*args) + end + + def configure_cache_buckets + if @env[:machine].config.cache.auto_detect + Bucket.auto_detect(@env) + end + + return unless @env[:machine].config.cache.buckets.any? + + @env[:ui].info 'Configuring cache buckets...' + cache_config = @env[:machine].config.cache + cache_config.buckets.each do |bucket_name, configs| + cachier_debug "Installing #{bucket_name} with configs #{configs.inspect}" + Bucket.install(bucket_name, @env, configs) + end + + data_file = @env[:machine].data_dir.join('cache_dirs') + data_file.open('w') { |f| f.print @env[:cache_dirs].uniq.join("\n") } + end + + def cache_root + @cache_root ||= case @env[:machine].config.cache.scope + when :box + @env[:home_path].join('cache', @env[:machine].box.name) + when :machine + @env[:machine].data_dir.join('cache') + else + raise "Unknown cache scope: '#{@env[:machine].config.cache.scope}'" + end + end + end + end + end + end + end +end diff --git a/lib/vagrant-cachier/plugin.rb b/lib/vagrant-cachier/plugin.rb index 11b7ad7..c337090 100644 --- a/lib/vagrant-cachier/plugin.rb +++ b/lib/vagrant-cachier/plugin.rb @@ -1,3 +1,8 @@ +require_relative 'action/provision_ext' +Vagrant::Action::Builtin::Provision.class_eval do + include VagrantPlugins::Cachier::Action::ProvisionExt +end + module VagrantPlugins module Cachier class Plugin < Vagrant.plugin('2') @@ -38,13 +43,6 @@ module VagrantPlugins Cap::Arch::PacmanCacheDir end - install_action_hook = lambda do |hook| - require_relative 'action/install' - hook.after Vagrant::Action::Builtin::Provision, VagrantPlugins::Cachier::Action::Install - end - action_hook 'set-shared-cache-on-machine-up', :machine_action_up, &install_action_hook - action_hook 'set-shared-cache-on-machine-reload', :machine_action_reload, &install_action_hook - clean_action_hook = lambda do |hook| require_relative 'action/clean' hook.before Vagrant::Action::Builtin::GracefulHalt, VagrantPlugins::Cachier::Action::Clean