Sha256: afa51a5d2382b8693a59e95c16e4f88f9a1d331bf67a9a48e113272f2aed9c63

Contents?: true

Size: 1.88 KB

Versions: 52

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module EacDocker
  class Container
    enable_immutable
    immutable_accessor :interactive, :temporary, :tty, type: :boolean
    immutable_accessor :env, type: :hash
    immutable_accessor :capability, :command_arg, :volume, type: :array
    attr_reader :id
    common_constructor :image

    def immutable_constructor_args
      [image]
    end

    alias immutable_volume volume

    def hostname
      ::EacDocker::Executables.docker.command(
        'inspect', '--format={{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}',
        id
      ).execute!.strip
    end

    def on_detached
      command = ::EacDocker::Executables.docker.command(*(%w[run --detach] + run_command_args))
      self.id = command.execute!.strip
      begin
        yield(self)
      ensure
        stop
      end
    end

    def volume(left_part, right_part = null)
      immutable_volume(right_part.if_present(left_part) { |v| "#{left_part}:#{v}" })
    end

    def run_command
      ::EacDocker::Executables.docker.command('run', *run_command_args)
    end

    def run_command_args
      run_command_boolean_args + run_command_capabilities_args + run_command_envs_args +
        run_command_volumes_args + [image.provide.id] + command_args
    end

    def stop
      ::EacDocker::Executables.docker.command('stop', id).execute!
    end

    private

    attr_writer :id

    def run_command_boolean_args
      r = []
      r << '--interactive' if interactive?
      r << '--tty' if tty?
      r << '--rm' if temporary?
      r
    end

    def run_command_capabilities_args
      capabilities.flat_map { |capability| ['--cap-add', capability] }
    end

    def run_command_volumes_args
      volumes.flat_map { |volume| ['--volume', volume] }
    end

    def run_command_envs_args
      envs.flat_map { |name, value| ['--env', "#{name}=#{value}"] }
    end
  end
end

Version data entries

52 entries across 52 versions & 4 rubygems

Version Path
avm-tools-0.123.0 sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.9.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.122.0 sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.8.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.7.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.6.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.121.2 sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.5.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.4.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.3.0 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
eac_tools-0.2.2 sub/avm-tools/sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.121.1 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.121.0 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.120.2 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.120.1 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.120.0 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.119.0 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.118.0 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.117.3 sub/eac_docker/lib/eac_docker/container.rb
avm-tools-0.117.2 sub/eac_docker/lib/eac_docker/container.rb