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