class PackerFiles::Virtual::VirtualBoxConverter
Attributes
value[R]
Hash Value
Public Class Methods
new(os, gen)
click to toggle source
Constructor
# File lib/PackerFiles/Virtual/VirtualBoxConverter.rb, line 14 def initialize(os, gen) @value = convert(os, gen).to_hash end
Public Instance Methods
convert(os, gen)
click to toggle source
Convert OS object into a hash
# File lib/PackerFiles/Virtual/VirtualBoxConverter.rb, line 19 def convert(os, gen) VirtualBox.new do |vbox| # Fill in output directory and builder name rel = os.CDImage.release arch = os.CDImage.arch name = os.name.gsub('::', '-') vbox.output_directory = "output-#{name}-#{rel}-#{arch}-#{vbox.type}" vbox.name = "#{name}-#{rel}-#{arch}-#{vbox.type}" # Fill in image details, Some amount of url handling # is really required to handle various corner cases. # thus making the code a bit harder to understand vbox.iso_checksum_type = os.CDImage.check_sum_type vbox.iso_checksum = os.CDImage.check_sum # The code below creates a user variable called mirror # whose base value is the URL fragment w/o the file-name. url = URI::parse(os.CDImage.iso_url) file = File.basename(url.path) url.path = File.dirname(url.path) gen.variables['mirror'] = url.to_s vbox.iso_url = "{{user `mirror`}}/#{file}" # Fill in SSH specifics vbox.ssh_username = os.User.login vbox.ssh_password = os.User.password vbox.ssh_wait_timeout = '10000s' # Fill in other specifics vbox.disk_size = os.Disk.size vbox.http_directory = File.basename(os.http_dir) vbox.guest_os_type = os.guest_os_type # Fill in boot command and boot_wait timeout gen.variables['host'] = '' gen.variables['port'] = '' user_var_name = name + "-#{vbox.type}-boot-wait" gen.variables[user_var_name] = "10s" vbox.boot_command = os.boot_command vbox.boot_wait = "{{user `#{user_var_name}`}}" # Fill in shutdown command vbox.shutdown_command = os.shutdown_command # Generate VBoxManage commands vbox.Hypervisor(os.Hypervisors.VirtualBox) # Finally do a Merge with custom vbox.merge_hs(os.Hypervisors.VirtualBox.custom) end end