Sha256: 5630b758f41113d101e88327a5225e3d3bfaefb20688431967f26746ef44af67

Contents?: true

Size: 1.85 KB

Versions: 104

Compression:

Stored size: 1.85 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'avm/executables'
require 'avm/patches/object/template'

module Avm
  module Docker
    class Image
      attr_reader :registry
      attr_accessor :snapshot
      attr_accessor :version

      def initialize(registry)
        @registry = registry
        self.snapshot = true
        self.version = true
      end

      def build(extra_args = [])
        on_build_dir do
          template.apply(self, build_dir)
          run_docker_build(extra_args)
        end
      end

      def generator_version
        ::Avm::Tools::VERSION
      end

      def push
        ::Avm::Executables.docker.command.append(['push', tag]).system!
      end

      def read_entry(path, _options = {})
        method = path.gsub('.', '_')
        return send(method) if respond_to?(path, true)

        raise "Method \"#{method}\" not found for entry \"#{path}\""
      end

      def run(instance)
        run_run(instance) if container_exist?(instance)
      end

      def tag
        r = tag_name
        r += ":#{tag_version}" if tag_version.present?
        r
      end

      def tag_name
        return registry.name if registry.name.present?

        raise 'Registry name is blank'
      end

      def tag_version
        [tag_version_version, stereotype_tag].reject(&:blank?).join('_')
      end

      def tag_version_version
        return nil unless version

        r = generator_version
        r += '-snapshot' if snapshot
        r
      end

      private

      attr_reader :build_dir

      def run_docker_build(extra_args)
        ::Avm::Executables.docker.command.append(
          ['build', '-t', tag] + extra_args + [build_dir]
        ).system!
      end

      def on_build_dir
        @build_dir = ::Dir.mktmpdir
        yield
      ensure
        ::FileUtils.rm_rf(@build_dir)
      end
    end
  end
end

Version data entries

104 entries across 104 versions & 1 rubygems

Version Path
avm-tools-0.100.0 lib/avm/docker/image.rb
avm-tools-0.99.1 lib/avm/docker/image.rb
avm-tools-0.99.0 lib/avm/docker/image.rb
avm-tools-0.98.0 lib/avm/docker/image.rb
avm-tools-0.97.0 lib/avm/docker/image.rb
avm-tools-0.96.0 lib/avm/docker/image.rb
avm-tools-0.95.0 lib/avm/docker/image.rb
avm-tools-0.94.3 lib/avm/docker/image.rb
avm-tools-0.94.2 lib/avm/docker/image.rb
avm-tools-0.94.1 lib/avm/docker/image.rb
avm-tools-0.94.0 lib/avm/docker/image.rb
avm-tools-0.93.0 lib/avm/docker/image.rb
avm-tools-0.92.0 lib/avm/docker/image.rb
avm-tools-0.91.0 lib/avm/docker/image.rb
avm-tools-0.90.0 lib/avm/docker/image.rb
avm-tools-0.89.0 lib/avm/docker/image.rb
avm-tools-0.88.0 lib/avm/docker/image.rb
avm-tools-0.87.1 lib/avm/docker/image.rb
avm-tools-0.87.0 lib/avm/docker/image.rb
avm-tools-0.86.0 lib/avm/docker/image.rb