class Mist::LxcHandler

Public Class Methods

new(config) click to toggle source
# File lib/mist/handlers/lxc.rb, line 20
def initialize(config)
  @config = config
end

Public Instance Methods

create(args) click to toggle source
# File lib/mist/handlers/lxc.rb, line 24
def create(args)
  Mist.logger.debug "create: args=#{args}"

  hostname = Socket.gethostname

  distro = args['distro'] || @config.default_distro
  release = args['release'] || @config.default_release
  name = args['name'] || create_name

  begin
    Mist.logger.info "creating container #{name} with #{distro}-#{release}"

    container = Mist::LXCContainer.new(name, distro, release)
    raise "container with the name #{name} already exists!" if container.exists?

    startup_script = File.join(@config.startup_script_path, 'lxc', distro)

    container.create(@config, startup_script)
    ip = container.ips.first
  rescue StandardError => ex
    Mist.logger.error "Create request failed: #{ex}"
    return { status: false, server: hostname, message: "create request failed: #{ex}" }
  end

  return { status: true,
           server: hostname,
           message: 'created new container',
           name: name,
           ip: ip,
           username: @config.username }
end
destroy(args) click to toggle source
# File lib/mist/handlers/lxc.rb, line 56
def destroy(args)
  Mist.logger.debug "destroy: args=#{args}"

  begin
    name = args['name']
    container = Mist::LXCContainer.new(name)

    Mist.logger.info "destroying #{name}"
    container.destroy
  rescue StandardError => ex
    Mist.logger.error "Destroy request failed: #{ex}"
    return { status: false, message: "destroy request failed: #{ex}" }
  end

  return { status: true, message: 'destroyed container', name: name }
end

Private Instance Methods

create_name() click to toggle source
# File lib/mist/handlers/lxc.rb, line 75
def create_name
  base = @config.instance_name
  "#{base}-#{SecureRandom.hex(16)}"
end