Class: Vagrant::Actions::Box::Download
- Inherits:
-
Vagrant::Actions::Base
- Object
- Vagrant::Actions::Base
- Vagrant::Actions::Box::Download
- Defined in:
- lib/vagrant/actions/box/download.rb
Overview
An action which acts on a box by downloading the box file from the given URI into a temporary location. This action parses a given URI and handles downloading it via one of the many Vagrant downloads (such as Downloaders::File).
This action cleans itself up by removing the downloaded box file.
Constant Summary collapse
- BASENAME =
"box"
- BUFFERSIZE =
1 MB
1048576
Instance Attribute Summary collapse
-
#downloader ⇒ Object
readonly
Returns the value of attribute downloader.
Attributes inherited from Vagrant::Actions::Base
Instance Method Summary collapse
- #cleanup ⇒ Object
- #download_to(f) ⇒ Object
- #execute! ⇒ Object
- #prepare ⇒ Object
- #rescue(exception) ⇒ Object
- #with_tempfile ⇒ Object
Methods inherited from Vagrant::Actions::Base
#follows, #initialize, #precedes
Methods included from Util
#error_and_exit, included, #logger, #wrap_output
Constructor Details
This class inherits a constructor from Vagrant::Actions::Base
Instance Attribute Details
#downloader ⇒ Object (readonly)
Returns the value of attribute downloader.
14 15 16 |
# File 'lib/vagrant/actions/box/download.rb', line 14 def downloader @downloader end |
Instance Method Details
#cleanup ⇒ Object
41 42 43 44 45 46 |
# File 'lib/vagrant/actions/box/download.rb', line 41 def cleanup if @runner.temp_path && File.exist?(@runner.temp_path) logger.info "Cleaning up downloaded box..." File.unlink(@runner.temp_path) end end |
#download_to(f) ⇒ Object
59 60 61 62 |
# File 'lib/vagrant/actions/box/download.rb', line 59 def download_to(f) logger.info "Copying box to temporary location..." downloader.download!(@runner.uri, f) end |
#execute! ⇒ Object
34 35 36 37 38 39 |
# File 'lib/vagrant/actions/box/download.rb', line 34 def execute! with_tempfile do |tempfile| download_to(tempfile) @runner.temp_path = tempfile.path end end |
#prepare ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/vagrant/actions/box/download.rb', line 16 def prepare # Parse the URI given and prepare a downloader uri = URI.parse(@runner.uri) uri_map = [[URI::HTTP, Downloaders::HTTP], [URI::Generic, Downloaders::File]] uri_map.find do |uri_type, downloader_klass| if uri.is_a?(uri_type) logger.info "#{uri_type} for URI, downloading via #{downloader_klass}..." @downloader = downloader_klass.new end end raise ActionException.new("Unknown URI type for box download.") unless @downloader # Prepare the downloader @downloader.prepare(@runner.uri) end |
#rescue(exception) ⇒ Object
48 49 50 |
# File 'lib/vagrant/actions/box/download.rb', line 48 def rescue(exception) cleanup end |