class PackerFiles::Virtual::KVMConverter

Attributes

value[R]

Hash Value

Public Class Methods

new(os, gen) click to toggle source

Constructor

# File lib/PackerFiles/Virtual/KVMConverter.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/KVMConverter.rb, line 19
def convert(os, gen)
  KVM.new do |kvm|
  
     # Fill in output directory
     rel  = os.CDImage.release
     arch = os.CDImage.arch
     name = os.name.gsub('::', '-')
     kvm.output_directory = "output-#{name}-#{rel}-#{arch}-#{kvm.type}"
     kvm.name = "#{name}-#{rel}-#{arch}-#{kvm.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
     kvm.iso_checksum_type = os.CDImage.check_sum_type
     kvm.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
     kvm.iso_url             = "{{user `mirror`}}/#{file}"

     # Fill in SSH specifics
     kvm.ssh_username     = os.User.login
     kvm.ssh_password     = os.User.password
     kvm.ssh_wait_timeout = '10000s'

     # Fill in other specifics
     kvm.disk_size       = os.Disk.size
     kvm.http_directory  = File.basename(os.http_dir)

     # Fill in boot command and boot_wait command
     gen.variables['host']        = ''
     gen.variables['port']        = ''
     user_var_name                = name + "-#{kvm.type}-boot-wait"
     gen.variables[user_var_name] = "10s"
     kvm.boot_command            = os.boot_command
     kvm.boot_wait               = "{{user `#{user_var_name}`}}"

     # Fill in shutdown command
     kvm.shutdown_command = os.shutdown_command

     # If the guest OS type contains 64 bit OS, then we need to enable
     # a 64 bit CPU.
     if os.guest_os_type.match("64")
        kvm.Hypervisor(os.Hypervisors.KVM, true)
     else
        kvm.Hypervisor(os.Hypervisors.KVM, false)
     end

     # Merge with Custom attributes
     kvm.merge_hs(os.Hypervisors.KVM.custom)
  end

end