class Sle2Docker::NativeImage

This class takes care of handling the native loadable images for SUSE Linux Enterprise

Constants

IMAGES_DIR

Public Class Methods

list() click to toggle source
# File lib/sle2docker/native_image.rb, line 7
def self.list
  if File.exist?(NativeImage::IMAGES_DIR)
    Dir[File.join(NativeImage::IMAGES_DIR, '*.tar.xz')].map do |image|
      File.basename(image, '.tar.xz')
    end
  else
    []
  end
end
new(image_name, options) click to toggle source
# File lib/sle2docker/native_image.rb, line 17
def initialize(image_name, options)
  @image_name = image_name
  @options = options
  compute_metadata_file
end

Public Instance Methods

activate() click to toggle source
# File lib/sle2docker/native_image.rb, line 23
def activate
  verify_image

  puts 'Loading image'
  Docker::Image.load(File.join(IMAGES_DIR, "#{@image_name}.tar.xz"))
  image = Docker::Image.get(@image_id)
  image.tag('repo' => @repository, 'tag' => 'latest')
  @options['tag_with_build'] &&
    image.tag('repo' => @repository, 'tag' => "#{@tag}-#{@build}")
end

Private Instance Methods

compute_metadata_file() click to toggle source
# File lib/sle2docker/native_image.rb, line 36
def compute_metadata_file
  # example of image name and metadata file:
  # kiwi >= 8.30
  #      sles12sp3-container.x86_64-2.0.1-Build2.3.docker (image basename)
  #      sles12sp3-container.x86_64-2.0.1.metadata
  regexp = /(?<metadata_file>.*\d+\.\d+\.\d+)
    (-Build(?<build>\d+\.\d+)\.docker)?/x
  match = regexp.match(@image_name)
  match.nil? &&
    raise(DockerTagError,
          "Docker image #{@image_name} not found. \
           Run sle2docker list to check which docker images are available.")
  @metadata     = parse_metadata_file("#{match['metadata_file']}.metadata")
  @repository   = @metadata['image']['name']
  @tag          = @metadata['image']['tags'][0]
  @build        = match['build']
  @image_id     = "#{@repository}:#{@tag}"
end
parse_metadata_file(metadata) click to toggle source
# File lib/sle2docker/native_image.rb, line 55
def parse_metadata_file(metadata)
  file = File.read(
    File.join(NativeImage::IMAGES_DIR, metadata)
  )
  JSON.parse(file)
end