Class: Rexec::ContainerService

Inherits:
Object
  • Object
show all
Defined in:
lib/rexec/container.rb

Overview

Service for managing containers.

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ ContainerService

Returns a new instance of ContainerService.



30
31
32
# File 'lib/rexec/container.rb', line 30

def initialize(client)
  @client = client
end

Instance Method Details

#create(image:, name: nil, environment: {}, labels: {}) ⇒ Container

Create a new container.

Examples:

container = client.containers.create(
  image: "ubuntu:24.04",
  name: "my-sandbox",
  environment: { "MY_VAR" => "value" }
)

Parameters:

  • image (String)

    Docker image to use

  • name (String, nil) (defaults to: nil)

    Optional container name

  • environment (Hash) (defaults to: {})

    Environment variables

  • labels (Hash) (defaults to: {})

    Container labels

Returns:



67
68
69
70
71
72
73
74
75
# File 'lib/rexec/container.rb', line 67

def create(image:, name: nil, environment: {}, labels: {})
  body = { image: image }
  body[:name] = name if name
  body[:environment] = environment unless environment.empty?
  body[:labels] = labels unless labels.empty?

  data = @client.request(:post, "/api/containers", body: body)
  Container.new(data)
end

#delete(id) ⇒ Object

Delete a container.

Parameters:

  • id (String)

    Container ID



80
81
82
83
# File 'lib/rexec/container.rb', line 80

def delete(id)
  @client.request(:delete, "/api/containers/#{id}")
  nil
end

#get(id) ⇒ Container

Get a container by ID.

Parameters:

  • id (String)

    Container ID

Returns:



48
49
50
51
# File 'lib/rexec/container.rb', line 48

def get(id)
  data = @client.request(:get, "/api/containers/#{id}")
  Container.new(data)
end

#listArray<Container>

List all containers.

Returns:



37
38
39
40
41
42
# File 'lib/rexec/container.rb', line 37

def list
  data = @client.request(:get, "/api/containers")
  # API returns { "containers" => [...], "count" => N, "limit" => M }
  items = data.is_a?(Array) ? data : (data && data["containers"]) || []
  items.map { |c| Container.new(c) }
end

#start(id) ⇒ Object

Start a container.

Parameters:

  • id (String)

    Container ID



88
89
90
91
# File 'lib/rexec/container.rb', line 88

def start(id)
  @client.request(:post, "/api/containers/#{id}/start")
  nil
end

#stop(id) ⇒ Object

Stop a container.

Parameters:

  • id (String)

    Container ID



96
97
98
99
# File 'lib/rexec/container.rb', line 96

def stop(id)
  @client.request(:post, "/api/containers/#{id}/stop")
  nil
end