sle2docker 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.gitignore +1 -0
 - data/.rubocop.yml +2 -0
 - data/.travis.yml +8 -1
 - data/Changelog +12 -0
 - data/lib/sle2docker.rb +3 -1
 - data/lib/sle2docker/cli.rb +56 -15
 - data/lib/sle2docker/exceptions.rb +2 -2
 - data/lib/sle2docker/image.rb +43 -0
 - data/lib/sle2docker/native_image.rb +62 -0
 - data/lib/sle2docker/rootfs_image.rb +85 -0
 - data/lib/sle2docker/version.rb +1 -3
 - data/package/sle2docker.8.ronn +4 -0
 - data/sle2docker.gemspec +1 -0
 - data/test/command_test.rb +15 -0
 - data/test/native_image_test.rb +98 -0
 - data/test/rootfs_image_test.rb +158 -0
 - data/test/test_helper.rb +4 -4
 - metadata +22 -4
 - data/lib/sle2docker/prebuilt_image.rb +0 -114
 - data/test/prebuilt_image_test.rb +0 -91
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c12ca51c3ec19bc47d2f727a395123d06c18a1df
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 39e0763011fe5c1bfc8ef1bb5069ab4bb461d121
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f8a0761f532912585ed7dc09e32922b7c5646fbbc38cc1b1a1b057658048993a8e14f5e75b68da2dee47e32be2d5fd74ccbad34886ef1032e3edb11348b9dc5c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1a7880b5a9d09d8510ee7cd39c6b153d1785a33683873c642936c13e950e1c27291f291e7b0eedaf3e3e3e594bec59648b57fa902cd0354a155d48c1c37598b2
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    
    
        data/Changelog
    CHANGED
    
    | 
         @@ -1,3 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Wed Oct 05 11:05:30 CET 2016  Miquel Sabaté <msabate@suse.com>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            	* Version 0.5.0:
         
     | 
| 
      
 4 
     | 
    
         
            +
            		- Added the --all option to the activate command. With this
         
     | 
| 
      
 5 
     | 
    
         
            +
            		  options you can tell sle2docker to activate all the
         
     | 
| 
      
 6 
     | 
    
         
            +
            		  available images (see 43558fdcc9a4bc2f66f01ea8e5d9d2734722d0a6).
         
     | 
| 
      
 7 
     | 
    
         
            +
            		- Added the --tag_with_build flag to include the obs build
         
     | 
| 
      
 8 
     | 
    
         
            +
            		  number of kiwi generated images in the docker tag
         
     | 
| 
      
 9 
     | 
    
         
            +
            		  (see d577bab99b427de339b91182e708eaaab8d9ae87).
         
     | 
| 
      
 10 
     | 
    
         
            +
            		- Clarified error message on missing Docker images
         
     | 
| 
      
 11 
     | 
    
         
            +
            		  (see 591ac6c1aa60b089f6a09d608004514a59614882).
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       1 
13 
     | 
    
         
             
            Tue Nov 10 17:58:30 CET 2015  Flavio Castelli <fcastelli@suse.com>
         
     | 
| 
       2 
14 
     | 
    
         | 
| 
       3 
15 
     | 
    
         
             
            	* Version 0.4.2:
         
     | 
    
        data/lib/sle2docker.rb
    CHANGED
    
    | 
         @@ -9,5 +9,7 @@ require 'tmpdir' 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            require_relative 'sle2docker/cli'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require_relative 'sle2docker/exceptions'
         
     | 
| 
       12 
     | 
    
         
            -
            require_relative 'sle2docker/ 
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative 'sle2docker/image'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative 'sle2docker/rootfs_image'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative 'sle2docker/native_image'
         
     | 
| 
       13 
15 
     | 
    
         
             
            require_relative 'sle2docker/version'
         
     | 
    
        data/lib/sle2docker/cli.rb
    CHANGED
    
    | 
         @@ -1,32 +1,45 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Sle2Docker
         
     | 
| 
       2 
2 
     | 
    
         
             
              # Entry point of the command line interface
         
     | 
| 
       3 
3 
     | 
    
         
             
              class Cli < Thor
         
     | 
| 
      
 4 
     | 
    
         
            +
                check_unknown_options!
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       4 
6 
     | 
    
         
             
                desc 'list', 'List available pre-built images'
         
     | 
| 
       5 
7 
     | 
    
         
             
                def list
         
     | 
| 
       6 
8 
     | 
    
         
             
                  puts 'Available pre-built images:'
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
                  if  
     | 
| 
      
 9 
     | 
    
         
            +
                  images = RootFSImage.list + NativeImage.list
         
     | 
| 
      
 10 
     | 
    
         
            +
                  if images.empty?
         
     | 
| 
       9 
11 
     | 
    
         
             
                    puts 'No pre-built image found.'
         
     | 
| 
       10 
12 
     | 
    
         
             
                    puts "\nPre-built images can be installed from SLE12 Update " \
         
     | 
| 
       11 
13 
     | 
    
         
             
                      'repository using zypper:'
         
     | 
| 
       12 
14 
     | 
    
         
             
                    puts '  zypper install \"sle*-docker-image\"'
         
     | 
| 
       13 
15 
     | 
    
         
             
                  else
         
     | 
| 
       14 
     | 
    
         
            -
                     
     | 
| 
      
 16 
     | 
    
         
            +
                    images.each { |image| puts " - #{image}" }
         
     | 
| 
       15 
17 
     | 
    
         
             
                  end
         
     | 
| 
       16 
18 
     | 
    
         
             
                end
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
20 
     | 
    
         
             
                desc 'activate IMAGE_NAME', 'Activate a pre-built image'
         
     | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                method_option :all,
         
     | 
| 
      
 22 
     | 
    
         
            +
                              desc:    'Activate all the available pre-built images',
         
     | 
| 
      
 23 
     | 
    
         
            +
                              type:    :boolean,
         
     | 
| 
      
 24 
     | 
    
         
            +
                              default: false,
         
     | 
| 
      
 25 
     | 
    
         
            +
                              aliases: '-a'
         
     | 
| 
       21 
26 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
                method_option :tag_with_build,
         
     | 
| 
      
 28 
     | 
    
         
            +
                              desc:    'Include kiwi build number into tag',
         
     | 
| 
      
 29 
     | 
    
         
            +
                              type:    :boolean,
         
     | 
| 
      
 30 
     | 
    
         
            +
                              default: false,
         
     | 
| 
      
 31 
     | 
    
         
            +
                              aliases: '-b'
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                   
     | 
| 
      
 33 
     | 
    
         
            +
                def activate(image_name = nil)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  ensure_can_access_dockerd
         
     | 
| 
      
 35 
     | 
    
         
            +
                  if options['all']
         
     | 
| 
      
 36 
     | 
    
         
            +
                    activate_all(options)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  elsif !image_name.nil?
         
     | 
| 
      
 38 
     | 
    
         
            +
                    activate_image(image_name, options)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  else
         
     | 
| 
      
 40 
     | 
    
         
            +
                    puts 'You have to specify an image name.'
         
     | 
| 
      
 41 
     | 
    
         
            +
                    exit 1
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
       30 
43 
     | 
    
         
             
                end
         
     | 
| 
       31 
44 
     | 
    
         | 
| 
       32 
45 
     | 
    
         
             
                map '-v' => :version
         
     | 
| 
         @@ -37,10 +50,38 @@ module Sle2Docker 
     | 
|
| 
       37 
50 
     | 
    
         | 
| 
       38 
51 
     | 
    
         
             
                private
         
     | 
| 
       39 
52 
     | 
    
         | 
| 
      
 53 
     | 
    
         
            +
                def activate_all(options)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  images = RootFSImage
         
     | 
| 
      
 55 
     | 
    
         
            +
                           .list.map { |img| Sle2Docker::RootFSImage.new(img, options) }
         
     | 
| 
      
 56 
     | 
    
         
            +
                  images += NativeImage
         
     | 
| 
      
 57 
     | 
    
         
            +
                            .list.map { |img| Sle2Docker::NativeImage.new(img, options) }
         
     | 
| 
      
 58 
     | 
    
         
            +
                  activate_images(images)
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def activate_image(image_name, options)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  if RootFSImage.list.include?(image_name)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    activate_images([Sle2Docker::RootFSImage.new(image_name, options)])
         
     | 
| 
      
 64 
     | 
    
         
            +
                  elsif NativeImage.list.include?(image_name)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    activate_images([Sle2Docker::NativeImage.new(image_name, options)])
         
     | 
| 
      
 66 
     | 
    
         
            +
                  else
         
     | 
| 
      
 67 
     | 
    
         
            +
                    puts 'You have to specify an existing image name.'
         
     | 
| 
      
 68 
     | 
    
         
            +
                    exit 1
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
       40 
72 
     | 
    
         
             
                def ensure_can_access_dockerd
         
     | 
| 
       41 
     | 
    
         
            -
                  output = `docker info`
         
     | 
| 
       42 
     | 
    
         
            -
                  if $CHILD_STATUS.exitstatus 
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
                  output = `docker info 2>&1`
         
     | 
| 
      
 74 
     | 
    
         
            +
                  raise output if $CHILD_STATUS.exitstatus.nonzero?
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                def activate_images(images)
         
     | 
| 
      
 78 
     | 
    
         
            +
                  images.each do |image|
         
     | 
| 
      
 79 
     | 
    
         
            +
                    if image.activated?
         
     | 
| 
      
 80 
     | 
    
         
            +
                      warn "Image '#{image.image_id}' has already been activated."
         
     | 
| 
      
 81 
     | 
    
         
            +
                    else
         
     | 
| 
      
 82 
     | 
    
         
            +
                      image.activate
         
     | 
| 
      
 83 
     | 
    
         
            +
                      puts "#{image.image_id} activated"
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end
         
     | 
| 
       44 
85 
     | 
    
         
             
                  end
         
     | 
| 
       45 
86 
     | 
    
         
             
                end
         
     | 
| 
       46 
87 
     | 
    
         
             
              end
         
     | 
| 
         @@ -5,12 +5,12 @@ module Sle2Docker 
     | 
|
| 
       5 
5 
     | 
    
         
             
              class ConfigNotFoundError < RuntimeError
         
     | 
| 
       6 
6 
     | 
    
         
             
              end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              class  
     | 
| 
      
 8 
     | 
    
         
            +
              class ImageNotFoundError < RuntimeError
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              class DockerTagError < RuntimeError
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
              class  
     | 
| 
      
 14 
     | 
    
         
            +
              class ImageVerificationError < RuntimeError
         
     | 
| 
       15 
15 
     | 
    
         
             
              end
         
     | 
| 
       16 
16 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Sle2Docker
         
     | 
| 
      
 2 
     | 
    
         
            +
              # This class is the base class of native and prebulid images for
         
     | 
| 
      
 3 
     | 
    
         
            +
              # SUSE Linux Enterprise
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Image
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :image_id
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def activated?
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Docker::Image.exist?(image_id)
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def verify_image
         
     | 
| 
      
 12 
     | 
    
         
            +
                  check_image_exists
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  puts 'Verifying integrity of the pre-built image'
         
     | 
| 
      
 15 
     | 
    
         
            +
                  package_name = rpm_package_name
         
     | 
| 
      
 16 
     | 
    
         
            +
                  verification = `rpm --verify #{package_name}`
         
     | 
| 
      
 17 
     | 
    
         
            +
                  if $CHILD_STATUS.exitstatus.nonzero?
         
     | 
| 
      
 18 
     | 
    
         
            +
                    raise(ImageVerificationError,
         
     | 
| 
      
 19 
     | 
    
         
            +
                          "Verification of #{package_name} failed: #{verification}")
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  true
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def rpm_package_name
         
     | 
| 
      
 25 
     | 
    
         
            +
                  image_file = File.join(self.class::IMAGES_DIR, "#{@image_name}.tar.xz")
         
     | 
| 
      
 26 
     | 
    
         
            +
                  package_name = `rpm -qf #{image_file}`
         
     | 
| 
      
 27 
     | 
    
         
            +
                  if $CHILD_STATUS.exitstatus.nonzero?
         
     | 
| 
      
 28 
     | 
    
         
            +
                    raise(
         
     | 
| 
      
 29 
     | 
    
         
            +
                      ImageVerificationError,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      "Cannot find rpm package providing #{file}: #{package_name}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                    )
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  package_name
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def check_image_exists
         
     | 
| 
      
 37 
     | 
    
         
            +
                  msg = "Cannot find pre-built image #{@image_name}"
         
     | 
| 
      
 38 
     | 
    
         
            +
                  raise(ImageNotFoundError, msg) unless File.exist? File.join(
         
     | 
| 
      
 39 
     | 
    
         
            +
                    self.class::IMAGES_DIR, "#{@image_name}.tar.xz"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  )
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Sle2Docker
         
     | 
| 
      
 2 
     | 
    
         
            +
              # This class takes care of handling the native loadable images for
         
     | 
| 
      
 3 
     | 
    
         
            +
              # SUSE Linux Enterprise
         
     | 
| 
      
 4 
     | 
    
         
            +
              class NativeImage < Image
         
     | 
| 
      
 5 
     | 
    
         
            +
                IMAGES_DIR = '/usr/share/suse-docker-images/native'.freeze
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def self.list
         
     | 
| 
      
 8 
     | 
    
         
            +
                  if File.exist?(NativeImage::IMAGES_DIR)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    Dir[File.join(NativeImage::IMAGES_DIR, '*.tar.xz')].map do |image|
         
     | 
| 
      
 10 
     | 
    
         
            +
                      File.basename(image, '.tar.xz')
         
     | 
| 
      
 11 
     | 
    
         
            +
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  else
         
     | 
| 
      
 13 
     | 
    
         
            +
                    []
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def initialize(image_name, options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @image_name = image_name
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @options = options
         
     | 
| 
      
 20 
     | 
    
         
            +
                  compute_metadata_file
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def activate
         
     | 
| 
      
 24 
     | 
    
         
            +
                  verify_image
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  puts 'Loading image'
         
     | 
| 
      
 27 
     | 
    
         
            +
                  Docker::Image.load(File.join(IMAGES_DIR, "#{@image_name}.tar.xz"))
         
     | 
| 
      
 28 
     | 
    
         
            +
                  image = Docker::Image.get(@image_id)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  image.tag('repo' => @repository, 'tag' => 'latest')
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @options['tag_with_build'] &&
         
     | 
| 
      
 31 
     | 
    
         
            +
                    image.tag('repo' => @repository, 'tag' => "#{@tag}-#{@build}")
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                private
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def compute_metadata_file
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # example of image name and metadata file:
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # kiwi >= 8.30
         
     | 
| 
      
 39 
     | 
    
         
            +
                  #      sles12sp3-container.x86_64-2.0.1-Build2.3.docker (image basename)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  #      sles12sp3-container.x86_64-2.0.1.metadata
         
     | 
| 
      
 41 
     | 
    
         
            +
                  regexp = /(?<metadata_file>.*\d+\.\d+\.\d+)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    (-Build(?<build>\d+\.\d+)\.docker)?/x
         
     | 
| 
      
 43 
     | 
    
         
            +
                  match = regexp.match(@image_name)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  match.nil? &&
         
     | 
| 
      
 45 
     | 
    
         
            +
                    raise(DockerTagError,
         
     | 
| 
      
 46 
     | 
    
         
            +
                          "Docker image #{@image_name} not found. \
         
     | 
| 
      
 47 
     | 
    
         
            +
                           Run sle2docker list to check which docker images are available.")
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @metadata     = parse_metadata_file("#{match['metadata_file']}.metadata")
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @repository   = @metadata['image']['name']
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @tag          = @metadata['image']['tags'][0]
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @build        = match['build']
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @image_id     = "#{@repository}:#{@tag}"
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def parse_metadata_file(metadata)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  file = File.read(
         
     | 
| 
      
 57 
     | 
    
         
            +
                    File.join(NativeImage::IMAGES_DIR, metadata)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  )
         
     | 
| 
      
 59 
     | 
    
         
            +
                  JSON.parse(file)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Sle2Docker
         
     | 
| 
      
 2 
     | 
    
         
            +
              # This class takes care of handling the pre-build images for
         
     | 
| 
      
 3 
     | 
    
         
            +
              # SUSE Linux Enterprise
         
     | 
| 
      
 4 
     | 
    
         
            +
              class RootFSImage < Image
         
     | 
| 
      
 5 
     | 
    
         
            +
                IMAGES_DIR = '/usr/share/suse-docker-images'.freeze
         
     | 
| 
      
 6 
     | 
    
         
            +
                DOCKERFILE_TEMPLATE = File.join(
         
     | 
| 
      
 7 
     | 
    
         
            +
                  File.expand_path('../../templates/docker_build', __FILE__),
         
     | 
| 
      
 8 
     | 
    
         
            +
                  'dockerfile.erb'
         
     | 
| 
      
 9 
     | 
    
         
            +
                )
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def self.list
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if File.exist?(RootFSImage::IMAGES_DIR)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    Dir[File.join(RootFSImage::IMAGES_DIR, '*.tar.xz')].map do |image|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      File.basename(image, '.tar.xz')
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  else
         
     | 
| 
      
 17 
     | 
    
         
            +
                    []
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def initialize(image_name, options)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @image_name = image_name
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @options    = options
         
     | 
| 
      
 24 
     | 
    
         
            +
                  compute_repository_and_tag
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def activate
         
     | 
| 
      
 28 
     | 
    
         
            +
                  verify_image
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  tmp_dir = prepare_docker_build_root
         
     | 
| 
      
 31 
     | 
    
         
            +
                  puts 'Activating image'
         
     | 
| 
      
 32 
     | 
    
         
            +
                  image = Docker::Image.build_from_dir(tmp_dir)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  image.tag('repo' => @repository, 'tag' => @tag)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  image.tag('repo' => @repository, 'tag' => 'latest')
         
     | 
| 
      
 35 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 36 
     | 
    
         
            +
                  FileUtils.rm_rf(tmp_dir) if tmp_dir && File.exist?(tmp_dir)
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def prepare_docker_build_root
         
     | 
| 
      
 40 
     | 
    
         
            +
                  tmp_dir = Dir.mktmpdir("sle2docker-#{@image_name}-dockerfile")
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  create_dockerfile(tmp_dir)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  copy_prebuilt_image(tmp_dir)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  tmp_dir
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def create_dockerfile(tmp_dir)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  prebuilt_image = @image_name + '.tar.xz'
         
     | 
| 
      
 49 
     | 
    
         
            +
                  template = ERB.new(File.read(DOCKERFILE_TEMPLATE), nil, '<>')
         
     | 
| 
      
 50 
     | 
    
         
            +
                                .result(binding)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  File.open(File.join(tmp_dir, 'Dockerfile'), 'w') do |file|
         
     | 
| 
      
 53 
     | 
    
         
            +
                    file.write(template)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def copy_prebuilt_image(tmp_dir)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  prebuilt_image = File.join(IMAGES_DIR, "#{@image_name}.tar.xz")
         
     | 
| 
      
 59 
     | 
    
         
            +
                  destination = File.join(tmp_dir, "#{@image_name}.tar.xz")
         
     | 
| 
      
 60 
     | 
    
         
            +
                  FileUtils.cp(prebuilt_image, destination)
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                private
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def compute_repository_and_tag
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # example of image name:
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # kiwi < 8.0 :
         
     | 
| 
      
 68 
     | 
    
         
            +
                  #      sles12-docker.x86_64-1.0.0-Build7.2
         
     | 
| 
      
 69 
     | 
    
         
            +
                  # kiwi >= 8.0
         
     | 
| 
      
 70 
     | 
    
         
            +
                  #      obs-source-service.x86_64-1.0.0-Build3.1.docker
         
     | 
| 
      
 71 
     | 
    
         
            +
                  regexp = /\A(?<name>.*)(-docker)?\..*-(?<version>\d+\.\d+\.\d+)
         
     | 
| 
      
 72 
     | 
    
         
            +
                   (-Build(?<build>\d+\.\d+)?)?/x
         
     | 
| 
      
 73 
     | 
    
         
            +
                  match = regexp.match(@image_name)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  match.nil? &&
         
     | 
| 
      
 75 
     | 
    
         
            +
                    raise(DockerTagError,
         
     | 
| 
      
 76 
     | 
    
         
            +
                          "Docker image #{@image_name} not found. \
         
     | 
| 
      
 77 
     | 
    
         
            +
                           Run sle2docker list to check which docker images are available.")
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  @repository = "suse/#{match['name']}"
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @tag        = match['version']
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @options['tag_with_build'] && @tag << '-' + (match['build'] || '0.0')
         
     | 
| 
      
 82 
     | 
    
         
            +
                  @image_id = "#{@repository}:#{@tag}"
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/sle2docker/version.rb
    CHANGED
    
    
    
        data/package/sle2docker.8.ronn
    CHANGED
    
    | 
         @@ -39,6 +39,10 @@ To activate the pre-built image use the following command: 
     | 
|
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
            `sle2docker activate IMAGE_NAME`
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
      
 42 
     | 
    
         
            +
            To activate all the available pre-built images use the following command:
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            `sle2docker activate --all` or `sle2docker activate -a`
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
       42 
46 
     | 
    
         
             
            ## Customizing the images
         
     | 
| 
       43 
47 
     | 
    
         | 
| 
       44 
48 
     | 
    
         
             
            To create custom Docker images based on the official ones use
         
     | 
    
        data/sle2docker.gemspec
    CHANGED
    
    
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class CommandTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe 'Wrong flag' do
         
     | 
| 
      
 5 
     | 
    
         
            +
                it 'returns the proper name of the given flag' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  argv = ['--flag']
         
     | 
| 
      
 7 
     | 
    
         
            +
                  out, err = capture_io do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    Sle2Docker::Cli.start(argv)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  assert out.empty?
         
     | 
| 
      
 12 
     | 
    
         
            +
                  assert_equal "Unknown switches '--flag'\n", err
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,98 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # rubocop:disable Metrics/BlockLength
         
     | 
| 
      
 4 
     | 
    
         
            +
            class NativeImageTest < MiniTest::Test
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe 'NativeImage' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                after do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  FakeFS::FileSystem.clear
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                describe 'listing' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  it 'works when no pre-built image is available' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    actual = Sle2Docker::NativeImage.list
         
     | 
| 
      
 13 
     | 
    
         
            +
                    expected = []
         
     | 
| 
      
 14 
     | 
    
         
            +
                    assert_equal expected, actual
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  it 'lists the names of the available images' do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    FakeFS do
         
     | 
| 
      
 19 
     | 
    
         
            +
                      expected = [
         
     | 
| 
      
 20 
     | 
    
         
            +
                        'sles11sp3-docker.x86_64-1.0.0-Build1.3',
         
     | 
| 
      
 21 
     | 
    
         
            +
                        'sles12-docker.x86_64-1.0.0-Build7.2'
         
     | 
| 
      
 22 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                      FileUtils.mkdir_p(Sle2Docker::NativeImage::IMAGES_DIR)
         
     | 
| 
      
 25 
     | 
    
         
            +
                      expected.each do |image|
         
     | 
| 
      
 26 
     | 
    
         
            +
                        FileUtils.touch(
         
     | 
| 
      
 27 
     | 
    
         
            +
                          File.join(
         
     | 
| 
      
 28 
     | 
    
         
            +
                            Sle2Docker::NativeImage::IMAGES_DIR,
         
     | 
| 
      
 29 
     | 
    
         
            +
                            "#{image}.tar.xz"
         
     | 
| 
      
 30 
     | 
    
         
            +
                          )
         
     | 
| 
      
 31 
     | 
    
         
            +
                        )
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                      actual = Sle2Docker::NativeImage.list
         
     | 
| 
      
 35 
     | 
    
         
            +
                      assert_equal expected, actual
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            class NativeImageTest < MiniTest::Test
         
     | 
| 
      
 43 
     | 
    
         
            +
              describe 'NativeImage' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                before do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @options = { tag_with_build: false }
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                describe 'activation' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  it 'triggers docker load' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                    image_file = '/usr/share/suse-docker-images/native/'\
         
     | 
| 
      
 51 
     | 
    
         
            +
                                 'sles12sp3-container.x86_64-2.0.1-Build2.3.docker.tar.xz'
         
     | 
| 
      
 52 
     | 
    
         
            +
                    File.stubs(:exist?).returns(false)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    File.stubs(:exist?).with(image_file).returns(true)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    Docker::Image.expects(:load).with(image_file).once.returns(true)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    File.stubs(:read).returns(
         
     | 
| 
      
 56 
     | 
    
         
            +
                      '{"image": {"name": "repo", "tags": ["tag1","tag2"]}}'
         
     | 
| 
      
 57 
     | 
    
         
            +
                    )
         
     | 
| 
      
 58 
     | 
    
         
            +
                    mocked_image = mock
         
     | 
| 
      
 59 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 60 
     | 
    
         
            +
                                .with('repo' => 'repo', 'tag' => 'latest')
         
     | 
| 
      
 61 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 62 
     | 
    
         
            +
                    Docker::Image.expects(:get).with('repo:tag1').once.returns(mocked_image)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    native_image = Sle2Docker::NativeImage.new(
         
     | 
| 
      
 64 
     | 
    
         
            +
                      'sles12sp3-container.x86_64-2.0.1-Build2.3.docker',
         
     | 
| 
      
 65 
     | 
    
         
            +
                      @options
         
     | 
| 
      
 66 
     | 
    
         
            +
                    )
         
     | 
| 
      
 67 
     | 
    
         
            +
                    native_image.expects(:verify_image).once
         
     | 
| 
      
 68 
     | 
    
         
            +
                    native_image.activate
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  it 'triggers docker load and tags with build' do
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @options['tag_with_build'] = true
         
     | 
| 
      
 73 
     | 
    
         
            +
                    image_file = '/usr/share/suse-docker-images/native/'\
         
     | 
| 
      
 74 
     | 
    
         
            +
                                 'sles12sp3-container.x86_64-2.0.1-Build2.3.docker.tar.xz'
         
     | 
| 
      
 75 
     | 
    
         
            +
                    File.stubs(:exist?).returns(false)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    File.stubs(:exist?).with(image_file).returns(true)
         
     | 
| 
      
 77 
     | 
    
         
            +
                    Docker::Image.expects(:load).with(image_file).once.returns(true)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    File.stubs(:read).returns(
         
     | 
| 
      
 79 
     | 
    
         
            +
                      '{"image": {"name": "repo", "tags": ["tag1","tag2"]}}'
         
     | 
| 
      
 80 
     | 
    
         
            +
                    )
         
     | 
| 
      
 81 
     | 
    
         
            +
                    mocked_image = mock
         
     | 
| 
      
 82 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 83 
     | 
    
         
            +
                                .with('repo' => 'repo', 'tag' => 'latest')
         
     | 
| 
      
 84 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 85 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 86 
     | 
    
         
            +
                                .with('repo' => 'repo', 'tag' => 'tag1-2.3')
         
     | 
| 
      
 87 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 88 
     | 
    
         
            +
                    Docker::Image.expects(:get).with('repo:tag1').once.returns(mocked_image)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    native_image = Sle2Docker::NativeImage.new(
         
     | 
| 
      
 90 
     | 
    
         
            +
                      'sles12sp3-container.x86_64-2.0.1-Build2.3.docker',
         
     | 
| 
      
 91 
     | 
    
         
            +
                      @options
         
     | 
| 
      
 92 
     | 
    
         
            +
                    )
         
     | 
| 
      
 93 
     | 
    
         
            +
                    native_image.expects(:verify_image).once
         
     | 
| 
      
 94 
     | 
    
         
            +
                    native_image.activate
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,158 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # rubocop:disable Metrics/LineLength, Metrics/BlockLength
         
     | 
| 
      
 4 
     | 
    
         
            +
            class RootFSImageTest < MiniTest::Test
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe 'RootFSImage' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                before do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @options = { password: '', tag_with_build: false }
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                after do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  FakeFS::FileSystem.clear
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                describe 'listing' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  it 'works when no pre-built image is available' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    actual = Sle2Docker::RootFSImage.list
         
     | 
| 
      
 17 
     | 
    
         
            +
                    expected = []
         
     | 
| 
      
 18 
     | 
    
         
            +
                    assert_equal expected, actual
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  it 'lists the names of the available images' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    FakeFS do
         
     | 
| 
      
 23 
     | 
    
         
            +
                      expected = [
         
     | 
| 
      
 24 
     | 
    
         
            +
                        'sles11sp3-docker.x86_64-1.0.0-Build1.3',
         
     | 
| 
      
 25 
     | 
    
         
            +
                        'sles12-docker.x86_64-1.0.0-Build7.2'
         
     | 
| 
      
 26 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      FileUtils.mkdir_p(Sle2Docker::RootFSImage::IMAGES_DIR)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      expected.each do |image|
         
     | 
| 
      
 30 
     | 
    
         
            +
                        FileUtils.touch(
         
     | 
| 
      
 31 
     | 
    
         
            +
                          File.join(
         
     | 
| 
      
 32 
     | 
    
         
            +
                            Sle2Docker::RootFSImage::IMAGES_DIR,
         
     | 
| 
      
 33 
     | 
    
         
            +
                            "#{image}.tar.xz"
         
     | 
| 
      
 34 
     | 
    
         
            +
                          )
         
     | 
| 
      
 35 
     | 
    
         
            +
                        )
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                      actual = Sle2Docker::RootFSImage.list
         
     | 
| 
      
 39 
     | 
    
         
            +
                      assert_equal expected, actual
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            # rubocop:disable Style/IndentHeredoc
         
     | 
| 
      
 47 
     | 
    
         
            +
            class RootFSImageTest < MiniTest::Test
         
     | 
| 
      
 48 
     | 
    
         
            +
              describe 'RootFSImage' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                before do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @options = { password: '', tag_with_build: false }
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                after do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  FakeFS::FileSystem.clear
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                describe 'activation' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  it 'creates a Dockerfile and builds the image' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 60 
     | 
    
         
            +
                      image = 'sles12-docker.x86_64-1.0.0-Build7.2'
         
     | 
| 
      
 61 
     | 
    
         
            +
                      prebuilt_image = Sle2Docker::RootFSImage.new(image, @options)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      expected = <<DOCKERFILE
         
     | 
| 
      
 63 
     | 
    
         
            +
            FROM scratch
         
     | 
| 
      
 64 
     | 
    
         
            +
            MAINTAINER "Flavio Castelli <fcastelli@suse.com>"
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            ADD sles12-docker.x86_64-1.0.0-Build7.2.tar.xz /
         
     | 
| 
      
 67 
     | 
    
         
            +
            DOCKERFILE
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                      tmp_dir = Dir.mktmpdir('sle2docker-test')
         
     | 
| 
      
 70 
     | 
    
         
            +
                      prebuilt_image.create_dockerfile(tmp_dir)
         
     | 
| 
      
 71 
     | 
    
         
            +
                      dockerfile = File.join(tmp_dir, 'Dockerfile')
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                      assert File.exist?(dockerfile)
         
     | 
| 
      
 74 
     | 
    
         
            +
                      assert_equal(expected, File.read(dockerfile))
         
     | 
| 
      
 75 
     | 
    
         
            +
                    ensure
         
     | 
| 
      
 76 
     | 
    
         
            +
                      FileUtils.rm_rf(tmp_dir) if tmp_dir && File.exist?(tmp_dir)
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  it 'triggers docker build' do
         
     | 
| 
      
 81 
     | 
    
         
            +
                    File.stubs(:exist?).returns(true)
         
     | 
| 
      
 82 
     | 
    
         
            +
                    tmp_dir = '/foo'
         
     | 
| 
      
 83 
     | 
    
         
            +
                    mocked_image = mock
         
     | 
| 
      
 84 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 85 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => '1.0.0')
         
     | 
| 
      
 86 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 87 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 88 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => 'latest')
         
     | 
| 
      
 89 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                    prebuilt_image = Sle2Docker::RootFSImage.new(
         
     | 
| 
      
 92 
     | 
    
         
            +
                      'sles12-docker.x86_64-1.0.0-Build7.2',
         
     | 
| 
      
 93 
     | 
    
         
            +
                      @options
         
     | 
| 
      
 94 
     | 
    
         
            +
                    )
         
     | 
| 
      
 95 
     | 
    
         
            +
                    img_file = File.join(
         
     | 
| 
      
 96 
     | 
    
         
            +
                      Sle2Docker::RootFSImage::IMAGES_DIR,
         
     | 
| 
      
 97 
     | 
    
         
            +
                      'sles12-docker.x86_64-1.0.0-Build7.2.tar.xz'
         
     | 
| 
      
 98 
     | 
    
         
            +
                    )
         
     | 
| 
      
 99 
     | 
    
         
            +
                    prebuilt_image.expects(:prepare_docker_build_root).once.returns(tmp_dir)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    prebuilt_image.expects(:`).with("rpm -qf #{img_file}")
         
     | 
| 
      
 101 
     | 
    
         
            +
                                  .once.returns('sles12-docker')
         
     | 
| 
      
 102 
     | 
    
         
            +
                    prebuilt_image.expects(:`).with('rpm --verify sles12-docker').once
         
     | 
| 
      
 103 
     | 
    
         
            +
                    Docker::Image.expects(:build_from_dir).with(tmp_dir).once.returns(mocked_image)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    FileUtils.expects(:rm_rf).with(tmp_dir).once
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                    prebuilt_image.activate
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  it 'triggers docker build and tags with build #' do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    @options['tag_with_build'] = true
         
     | 
| 
      
 111 
     | 
    
         
            +
                    File.stubs(:exist?).returns(true)
         
     | 
| 
      
 112 
     | 
    
         
            +
                    tmp_dir = '/foo'
         
     | 
| 
      
 113 
     | 
    
         
            +
                    mocked_image = mock
         
     | 
| 
      
 114 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 115 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => '1.0.0-7.2')
         
     | 
| 
      
 116 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 117 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 118 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => 'latest')
         
     | 
| 
      
 119 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                    prebuilt_image = Sle2Docker::RootFSImage.new(
         
     | 
| 
      
 122 
     | 
    
         
            +
                      'sles12-docker.x86_64-1.0.0-Build7.2',
         
     | 
| 
      
 123 
     | 
    
         
            +
                      @options
         
     | 
| 
      
 124 
     | 
    
         
            +
                    )
         
     | 
| 
      
 125 
     | 
    
         
            +
                    prebuilt_image.expects(:prepare_docker_build_root).once.returns(tmp_dir)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    prebuilt_image.expects(:verify_image).once
         
     | 
| 
      
 127 
     | 
    
         
            +
                    Docker::Image.expects(:build_from_dir).with(tmp_dir).once.returns(mocked_image)
         
     | 
| 
      
 128 
     | 
    
         
            +
                    FileUtils.expects(:rm_rf).with(tmp_dir).once
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                    prebuilt_image.activate
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                  it 'triggers docker build and tags with build# (build# empty)' do
         
     | 
| 
      
 134 
     | 
    
         
            +
                    @options['tag_with_build'] = true
         
     | 
| 
      
 135 
     | 
    
         
            +
                    File.stubs(:exist?).returns(true)
         
     | 
| 
      
 136 
     | 
    
         
            +
                    tmp_dir = '/foo'
         
     | 
| 
      
 137 
     | 
    
         
            +
                    mocked_image = mock
         
     | 
| 
      
 138 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 139 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => '1.0.0-0.0')
         
     | 
| 
      
 140 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 141 
     | 
    
         
            +
                    mocked_image.expects(:tag)
         
     | 
| 
      
 142 
     | 
    
         
            +
                                .with('repo' => 'suse/sles12-docker', 'tag' => 'latest')
         
     | 
| 
      
 143 
     | 
    
         
            +
                                .once
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                    prebuilt_image = Sle2Docker::RootFSImage.new(
         
     | 
| 
      
 146 
     | 
    
         
            +
                      'sles12-docker.x86_64-1.0.0-Build',
         
     | 
| 
      
 147 
     | 
    
         
            +
                      @options
         
     | 
| 
      
 148 
     | 
    
         
            +
                    )
         
     | 
| 
      
 149 
     | 
    
         
            +
                    prebuilt_image.expects(:prepare_docker_build_root).once.returns(tmp_dir)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    prebuilt_image.expects(:verify_image).once
         
     | 
| 
      
 151 
     | 
    
         
            +
                    Docker::Image.expects(:build_from_dir).with(tmp_dir).once.returns(mocked_image)
         
     | 
| 
      
 152 
     | 
    
         
            +
                    FileUtils.expects(:rm_rf).with(tmp_dir).once
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                    prebuilt_image.activate
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
              end
         
     | 
| 
      
 158 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_helper.rb
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require ' 
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require 'simplecov'
         
     | 
| 
      
 2 
     | 
    
         
            +
            SimpleCov.start
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require File.expand_path('../../lib/sle2docker', __FILE__)
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
         @@ -7,8 +7,7 @@ require 'minitest/autorun' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            require 'stringio'
         
     | 
| 
       8 
8 
     | 
    
         
             
            require 'fakefs/safe'
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            # rubocop:disable  
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
            # rubocop:disable Security/Eval
         
     | 
| 
       12 
11 
     | 
    
         
             
            class Object
         
     | 
| 
       13 
12 
     | 
    
         
             
              def capture(stream)
         
     | 
| 
       14 
13 
     | 
    
         
             
                begin
         
     | 
| 
         @@ -22,6 +21,7 @@ class Object 
     | 
|
| 
       22 
21 
     | 
    
         
             
                result
         
     | 
| 
       23 
22 
     | 
    
         
             
              end
         
     | 
| 
       24 
23 
     | 
    
         
             
            end
         
     | 
| 
      
 24 
     | 
    
         
            +
            # rubocop:enable Security/Eval
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
            module MiniTest
         
     | 
| 
       27 
27 
     | 
    
         
             
              class Test
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sle2docker
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Flavio Castelli
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-10-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: docker-api
         
     | 
| 
         @@ -38,6 +38,20 @@ dependencies: 
     | 
|
| 
       38 
38 
     | 
    
         
             
                - - ">="
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
40 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: json
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       41 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
56 
     | 
    
         
             
              name: bundler
         
     | 
| 
       43 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -180,12 +194,16 @@ files: 
     | 
|
| 
       180 
194 
     | 
    
         
             
            - lib/sle2docker.rb
         
     | 
| 
       181 
195 
     | 
    
         
             
            - lib/sle2docker/cli.rb
         
     | 
| 
       182 
196 
     | 
    
         
             
            - lib/sle2docker/exceptions.rb
         
     | 
| 
       183 
     | 
    
         
            -
            - lib/sle2docker/ 
     | 
| 
      
 197 
     | 
    
         
            +
            - lib/sle2docker/image.rb
         
     | 
| 
      
 198 
     | 
    
         
            +
            - lib/sle2docker/native_image.rb
         
     | 
| 
      
 199 
     | 
    
         
            +
            - lib/sle2docker/rootfs_image.rb
         
     | 
| 
       184 
200 
     | 
    
         
             
            - lib/sle2docker/version.rb
         
     | 
| 
       185 
201 
     | 
    
         
             
            - lib/templates/docker_build/dockerfile.erb
         
     | 
| 
       186 
202 
     | 
    
         
             
            - package/sle2docker.8.ronn
         
     | 
| 
       187 
203 
     | 
    
         
             
            - sle2docker.gemspec
         
     | 
| 
       188 
     | 
    
         
            -
            - test/ 
     | 
| 
      
 204 
     | 
    
         
            +
            - test/command_test.rb
         
     | 
| 
      
 205 
     | 
    
         
            +
            - test/native_image_test.rb
         
     | 
| 
      
 206 
     | 
    
         
            +
            - test/rootfs_image_test.rb
         
     | 
| 
       189 
207 
     | 
    
         
             
            - test/test_helper.rb
         
     | 
| 
       190 
208 
     | 
    
         
             
            homepage: https://github.com/SUSE/sle2docker
         
     | 
| 
       191 
209 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -1,114 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Sle2Docker
         
     | 
| 
       2 
     | 
    
         
            -
              # This class takes care of handling the pre-build images for
         
     | 
| 
       3 
     | 
    
         
            -
              # SUSE Linux Enterprise
         
     | 
| 
       4 
     | 
    
         
            -
              class PrebuiltImage
         
     | 
| 
       5 
     | 
    
         
            -
                IMAGES_DIR = '/usr/share/suse-docker-images'
         
     | 
| 
       6 
     | 
    
         
            -
                DOCKERFILE_TEMPLATE = File.join(
         
     | 
| 
       7 
     | 
    
         
            -
                  File.expand_path('../../templates/docker_build', __FILE__),
         
     | 
| 
       8 
     | 
    
         
            -
                  'dockerfile.erb')
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                attr_reader :image_id
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                def self.list
         
     | 
| 
       13 
     | 
    
         
            -
                  if File.exist?(PrebuiltImage::IMAGES_DIR)
         
     | 
| 
       14 
     | 
    
         
            -
                    Dir[File.join(IMAGES_DIR, '*.tar.xz')].map do |image|
         
     | 
| 
       15 
     | 
    
         
            -
                      File.basename(image, '.tar.xz')
         
     | 
| 
       16 
     | 
    
         
            -
                    end
         
     | 
| 
       17 
     | 
    
         
            -
                  else
         
     | 
| 
       18 
     | 
    
         
            -
                    []
         
     | 
| 
       19 
     | 
    
         
            -
                  end
         
     | 
| 
       20 
     | 
    
         
            -
                end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                def initialize(image_name, options)
         
     | 
| 
       23 
     | 
    
         
            -
                  @image_name = image_name
         
     | 
| 
       24 
     | 
    
         
            -
                  @options    = options
         
     | 
| 
       25 
     | 
    
         
            -
                  compute_repository_and_tag
         
     | 
| 
       26 
     | 
    
         
            -
                end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                def activated?
         
     | 
| 
       29 
     | 
    
         
            -
                  Docker::Image.exist?(image_id)
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                def activate
         
     | 
| 
       33 
     | 
    
         
            -
                  unless File.exist?(File.join(IMAGES_DIR, "#{@image_name}.tar.xz"))
         
     | 
| 
       34 
     | 
    
         
            -
                    fail PrebuiltImageNotFoundError,
         
     | 
| 
       35 
     | 
    
         
            -
                         "Cannot find pre-built image #{@image_name}"
         
     | 
| 
       36 
     | 
    
         
            -
                  end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                  verify_image
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  tmp_dir = prepare_docker_build_root
         
     | 
| 
       41 
     | 
    
         
            -
                  puts 'Activating image'
         
     | 
| 
       42 
     | 
    
         
            -
                  image = Docker::Image.build_from_dir(tmp_dir)
         
     | 
| 
       43 
     | 
    
         
            -
                  image.tag('repo' =>  @repository, 'tag' => @tag)
         
     | 
| 
       44 
     | 
    
         
            -
                  image.tag('repo' =>  @repository, 'tag' => 'latest')
         
     | 
| 
       45 
     | 
    
         
            -
                ensure
         
     | 
| 
       46 
     | 
    
         
            -
                  FileUtils.rm_rf(tmp_dir) if tmp_dir && File.exist?(tmp_dir)
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                def prepare_docker_build_root
         
     | 
| 
       50 
     | 
    
         
            -
                  tmp_dir = Dir.mktmpdir("sle2docker-#{@image_name}-dockerfile")
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                  create_dockerfile(tmp_dir)
         
     | 
| 
       53 
     | 
    
         
            -
                  copy_prebuilt_image(tmp_dir)
         
     | 
| 
       54 
     | 
    
         
            -
                  tmp_dir
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                # rubocop:disable Lint/UselessAssignment
         
     | 
| 
       58 
     | 
    
         
            -
                def create_dockerfile(tmp_dir)
         
     | 
| 
       59 
     | 
    
         
            -
                  prebuilt_image = @image_name + '.tar.xz'
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  template = ERB.new(File.read(DOCKERFILE_TEMPLATE), nil, '<>')
         
     | 
| 
       62 
     | 
    
         
            -
                             .result(binding)
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                  File.open(File.join(tmp_dir, 'Dockerfile'), 'w') do |file|
         
     | 
| 
       65 
     | 
    
         
            -
                    file.write(template)
         
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
                # rubocop:enable Lint/UselessAssignment
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                def copy_prebuilt_image(tmp_dir)
         
     | 
| 
       71 
     | 
    
         
            -
                  prebuilt_image = File.join(IMAGES_DIR, "#{@image_name}.tar.xz")
         
     | 
| 
       72 
     | 
    
         
            -
                  destination = File.join(tmp_dir, "#{@image_name}.tar.xz")
         
     | 
| 
       73 
     | 
    
         
            -
                  FileUtils.cp(prebuilt_image, destination)
         
     | 
| 
       74 
     | 
    
         
            -
                end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                def rpm_package_name
         
     | 
| 
       77 
     | 
    
         
            -
                  file = File.join(IMAGES_DIR, "#{@image_name}.tar.xz")
         
     | 
| 
       78 
     | 
    
         
            -
                  package_name = `rpm -qf #{file}`
         
     | 
| 
       79 
     | 
    
         
            -
                  if $CHILD_STATUS.exitstatus != 0
         
     | 
| 
       80 
     | 
    
         
            -
                    fail PrebuiltImageVerificationError,
         
     | 
| 
       81 
     | 
    
         
            -
                         "Cannot find rpm package providing #{file}: #{package_name}"
         
     | 
| 
       82 
     | 
    
         
            -
                  end
         
     | 
| 
       83 
     | 
    
         
            -
                  package_name
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                def verify_image
         
     | 
| 
       87 
     | 
    
         
            -
                  puts 'Verifying integrity of the pre-built image'
         
     | 
| 
       88 
     | 
    
         
            -
                  package_name = rpm_package_name
         
     | 
| 
       89 
     | 
    
         
            -
                  verification = `rpm --verify #{package_name}`
         
     | 
| 
       90 
     | 
    
         
            -
                  if $CHILD_STATUS.exitstatus != 0
         
     | 
| 
       91 
     | 
    
         
            -
                    fail PrebuiltImageVerificationError,
         
     | 
| 
       92 
     | 
    
         
            -
                         "Verification of #{package_name} failed: #{verification}"
         
     | 
| 
       93 
     | 
    
         
            -
                  end
         
     | 
| 
       94 
     | 
    
         
            -
                  true
         
     | 
| 
       95 
     | 
    
         
            -
                end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                private
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                def compute_repository_and_tag
         
     | 
| 
       100 
     | 
    
         
            -
                  # example of image name: sles12-docker.x86_64-1.0.0-Build7.2
         
     | 
| 
       101 
     | 
    
         
            -
                  regexp = /\A(?<name>.*)-docker\..*-(?<version>\d+\.\d+\.\d+)/
         
     | 
| 
       102 
     | 
    
         
            -
                  match = regexp.match(@image_name)
         
     | 
| 
       103 
     | 
    
         
            -
                  if match.nil?
         
     | 
| 
       104 
     | 
    
         
            -
                    fail DockerTagError,
         
     | 
| 
       105 
     | 
    
         
            -
                         "Cannot calculate the Docker tag for #{@image_name}"
         
     | 
| 
       106 
     | 
    
         
            -
                  end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                  @repository = "suse/#{match['name']}"
         
     | 
| 
       109 
     | 
    
         
            -
                  @tag        = match['version']
         
     | 
| 
       110 
     | 
    
         
            -
                  @image_id   = "#{@repository}:#{@tag}"
         
     | 
| 
       111 
     | 
    
         
            -
                end
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
              end
         
     | 
| 
       114 
     | 
    
         
            -
            end
         
     | 
    
        data/test/prebuilt_image_test.rb
    DELETED
    
    | 
         @@ -1,91 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require_relative 'test_helper'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # rubocop:disable Metrics/ClassLength, Style/Documentation, Metrics/LineLength, Style/MethodCallParentheses:
         
     | 
| 
       4 
     | 
    
         
            -
            class PrebuiltImageTest < MiniTest::Test
         
     | 
| 
       5 
     | 
    
         
            -
              describe 'PrebuiltImage' do
         
     | 
| 
       6 
     | 
    
         
            -
                before do
         
     | 
| 
       7 
     | 
    
         
            -
                  @options = { password: '' }
         
     | 
| 
       8 
     | 
    
         
            -
                end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                after do
         
     | 
| 
       11 
     | 
    
         
            -
                  FakeFS::FileSystem.clear
         
     | 
| 
       12 
     | 
    
         
            -
                end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                describe 'listing' do
         
     | 
| 
       15 
     | 
    
         
            -
                  it 'works when no pre-built image is available' do
         
     | 
| 
       16 
     | 
    
         
            -
                    actual = Sle2Docker::PrebuiltImage.list
         
     | 
| 
       17 
     | 
    
         
            -
                    expected = []
         
     | 
| 
       18 
     | 
    
         
            -
                    assert_equal expected, actual
         
     | 
| 
       19 
     | 
    
         
            -
                  end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                  it 'lists the names of the available images' do
         
     | 
| 
       22 
     | 
    
         
            -
                    FakeFS do
         
     | 
| 
       23 
     | 
    
         
            -
                      expected = [
         
     | 
| 
       24 
     | 
    
         
            -
                        'sles11sp3-docker.x86_64-1.0.0-Build1.3',
         
     | 
| 
       25 
     | 
    
         
            -
                        'sles12-docker.x86_64-1.0.0-Build7.2'
         
     | 
| 
       26 
     | 
    
         
            -
                      ]
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                      FileUtils.mkdir_p(Sle2Docker::PrebuiltImage::IMAGES_DIR)
         
     | 
| 
       29 
     | 
    
         
            -
                      expected.each do |image|
         
     | 
| 
       30 
     | 
    
         
            -
                        FileUtils.touch(
         
     | 
| 
       31 
     | 
    
         
            -
                          File.join(
         
     | 
| 
       32 
     | 
    
         
            -
                            Sle2Docker::PrebuiltImage::IMAGES_DIR,
         
     | 
| 
       33 
     | 
    
         
            -
                            "#{image}.tar.xz"
         
     | 
| 
       34 
     | 
    
         
            -
                          )
         
     | 
| 
       35 
     | 
    
         
            -
                        )
         
     | 
| 
       36 
     | 
    
         
            -
                      end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                      actual = Sle2Docker::PrebuiltImage.list
         
     | 
| 
       39 
     | 
    
         
            -
                      assert_equal expected, actual
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                describe 'activation' do
         
     | 
| 
       45 
     | 
    
         
            -
                  it 'creates a Dockerfile and builds the image' do
         
     | 
| 
       46 
     | 
    
         
            -
                    begin
         
     | 
| 
       47 
     | 
    
         
            -
                      image = 'sles12-docker.x86_64-1.0.0-Build7.2'
         
     | 
| 
       48 
     | 
    
         
            -
                      prebuilt_image = Sle2Docker::PrebuiltImage.new(image, @options)
         
     | 
| 
       49 
     | 
    
         
            -
                      expected = <<EOF
         
     | 
| 
       50 
     | 
    
         
            -
            FROM scratch
         
     | 
| 
       51 
     | 
    
         
            -
            MAINTAINER "Flavio Castelli <fcastelli@suse.com>"
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
            ADD sles12-docker.x86_64-1.0.0-Build7.2.tar.xz /
         
     | 
| 
       54 
     | 
    
         
            -
            EOF
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                      tmp_dir = Dir.mktmpdir('sle2docker-test')
         
     | 
| 
       57 
     | 
    
         
            -
                      prebuilt_image.create_dockerfile(tmp_dir)
         
     | 
| 
       58 
     | 
    
         
            -
                      dockerfile = File.join(tmp_dir, 'Dockerfile')
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                      assert File.exist?(dockerfile)
         
     | 
| 
       61 
     | 
    
         
            -
                      assert_equal(expected, File.read(dockerfile))
         
     | 
| 
       62 
     | 
    
         
            -
                    ensure
         
     | 
| 
       63 
     | 
    
         
            -
                      FileUtils.rm_rf(tmp_dir) if File.exist?(tmp_dir)
         
     | 
| 
       64 
     | 
    
         
            -
                    end
         
     | 
| 
       65 
     | 
    
         
            -
                  end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                  it 'triggers docker build' do
         
     | 
| 
       68 
     | 
    
         
            -
                    File.stubs(:exist?).returns(true)
         
     | 
| 
       69 
     | 
    
         
            -
                    tmp_dir = '/foo'
         
     | 
| 
       70 
     | 
    
         
            -
                    mocked_image = mock()
         
     | 
| 
       71 
     | 
    
         
            -
                    mocked_image.expects(:tag)
         
     | 
| 
       72 
     | 
    
         
            -
                      .with('repo' => 'suse/sles12', 'tag' => '1.0.0')
         
     | 
| 
       73 
     | 
    
         
            -
                      .once
         
     | 
| 
       74 
     | 
    
         
            -
                    mocked_image.expects(:tag)
         
     | 
| 
       75 
     | 
    
         
            -
                      .with('repo' => 'suse/sles12', 'tag' => 'latest')
         
     | 
| 
       76 
     | 
    
         
            -
                      .once
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                    prebuilt_image = Sle2Docker::PrebuiltImage.new(
         
     | 
| 
       79 
     | 
    
         
            -
                      'sles12-docker.x86_64-1.0.0-Build7.2',
         
     | 
| 
       80 
     | 
    
         
            -
                      @options
         
     | 
| 
       81 
     | 
    
         
            -
                    )
         
     | 
| 
       82 
     | 
    
         
            -
                    prebuilt_image.expects(:prepare_docker_build_root).once.returns(tmp_dir)
         
     | 
| 
       83 
     | 
    
         
            -
                    prebuilt_image.expects(:verify_image).once
         
     | 
| 
       84 
     | 
    
         
            -
                    Docker::Image.expects(:build_from_dir).with(tmp_dir).once.returns(mocked_image)
         
     | 
| 
       85 
     | 
    
         
            -
                    FileUtils.expects(:rm_rf).with(tmp_dir).once
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                    prebuilt_image.activate
         
     | 
| 
       88 
     | 
    
         
            -
                  end
         
     | 
| 
       89 
     | 
    
         
            -
                end
         
     | 
| 
       90 
     | 
    
         
            -
              end
         
     | 
| 
       91 
     | 
    
         
            -
            end
         
     |