class BoxGrinder::Kickstart

Public Class Methods

new(config, appliance_config, dir, options = {}) click to toggle source
# File lib/boxgrinder-build/plugins/os/rpm-based/kickstart.rb, line 27
def initialize(config, appliance_config, dir, options = {})
  @config           = config
  @appliance_config = appliance_config
  @dir              = dir
  @log              = options[:log] || Logger.new(STDOUT)

  @linux_helper     = LinuxHelper.new(:log => @log)

  @kickstart_file   = "#{@dir.tmp}/#{@appliance_config.name}.ks"
end

Public Instance Methods

build_definition() click to toggle source
# File lib/boxgrinder-build/plugins/os/rpm-based/kickstart.rb, line 46
def build_definition
  definition = {}

  definition['appliance_config']  = @appliance_config
  definition['repos']             = []
  definition['graphical']         = (@appliance_config.packages.include?( '@base-x' ) or @appliance_config.packages.include?( '@X Window System' )) ? true : false

  def definition.method_missing(sym, * args)
    self[sym.to_s]
  end

  def definition.get_binding
    binding 
  end

  cost = 40

  definition['mount_points'] = @linux_helper.partition_mount_points(@appliance_config.hardware.partitions)

  for repo in @appliance_config.repos
    if repo.keys.include?('mirrorlist')
      urltype = 'mirrorlist'
    else
      urltype = 'baseurl'
    end

    substitutions = {
        /#ARCH#/        => @appliance_config.hardware.arch,
        /#BASE_ARCH#/   => @appliance_config.hardware.base_arch,
        /#OS_VERSION#/  => @appliance_config.os.version,
        /#OS_NAME#/     => @appliance_config.os.name
    }

    url   = repo[urltype]
    name  = repo['name']

    substitutions.each do |key, value|
      url   = url.gsub(key, value)
      name  = name.gsub(key, value)
    end

    definition['repos'] << "repo --name=#{name} --cost=#{cost} --#{urltype}=#{url}"

    cost += 1
  end

  definition
end
create() click to toggle source
# File lib/boxgrinder-build/plugins/os/rpm-based/kickstart.rb, line 38
def create
  template = "#{File.dirname(__FILE__)}/src/appliance.ks.erb"
  kickstart = ERB.new(File.read(template)).result(build_definition.get_binding)
  File.open(@kickstart_file, 'w') { |f| f.write(kickstart) }

  @kickstart_file
end