Sha256: 3a4221c245cd869bf622597212f91da95be1cf7bb12eac7cf7820e7335789e30

Contents?: true

Size: 1.72 KB

Versions: 87

Compression:

Stored size: 1.72 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 :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_envs_args + run_command_volumes_args + [image.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_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

87 entries across 87 versions & 3 rubygems

Version Path
avm-tools-0.104.0 vendor/eac_docker/lib/eac_docker/container.rb
ehbrs-tools-0.23.1 vendor/eac_docker/lib/eac_docker/container.rb
ehbrs-tools-0.23.0 vendor/eac_docker/lib/eac_docker/container.rb
eac_docker-0.3.0 lib/eac_docker/container.rb
avm-tools-0.103.1 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.103.0 vendor/eac_docker/lib/eac_docker/container.rb
ehbrs-tools-0.22.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.102.2 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.102.1 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.102.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.101.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.100.0 vendor/eac_docker/lib/eac_docker/container.rb
ehbrs-tools-0.21.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.99.1 vendor/eac_docker/lib/eac_docker/container.rb
eac_docker-0.2.2 lib/eac_docker/container.rb
avm-tools-0.99.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.98.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.97.0 vendor/eac_docker/lib/eac_docker/container.rb
avm-tools-0.96.0 vendor/eac_docker/lib/eac_docker/container.rb
eac_docker-0.2.1 lib/eac_docker/container.rb