class Mist::LXCTemplate

Public Class Methods

new(distro, release) click to toggle source
# File lib/mist/lxc_template.rb, line 19
def initialize(distro, release)
  @distro = distro
  @release = release
  @template_name = "template-#{distro}-#{release}"

  @template = LXC::Container.new(@template_name)
end

Public Instance Methods

clone(name) click to toggle source
# File lib/mist/lxc_template.rb, line 48
def clone(name)
  container = @template.clone(name, flags: LXC::LXC_CLONE_SNAPSHOT, bdev_type: 'overlayfs')
  container.wait(:stopped, 10)
  return container
rescue StandardError => ex
  Mist.logger.error "Failed to clone template #{@template_name}: #{ex}"
  raise
end
create(config) click to toggle source
# File lib/mist/lxc_template.rb, line 31
def create(config)
  Mist.logger.info "Creating #{@template_name}..."

  # Create our own user with a known key & strong random password
  username = config.username
  pubkey = config.ssh_public_key
  password = SecureRandom.urlsafe_base64(32)

  @template.create(@distro, nil, {}, 0, ['--release', @release,
                                         '--user', username,
                                         '--auth-key', pubkey,
                                         '--password', password])
rescue StandardError => ex
  Mist.logger.error "Failed to create template #{@template_name}: #{ex}"
  raise
end
exists?() click to toggle source
# File lib/mist/lxc_template.rb, line 27
def exists?
  @template.defined?
end