require "json"
require "./models/container"
require "./models/create_container_response"
require "./models/container_summary"
require "./models/wait_response"
module Docker::Api::Containers
def containers(all : Bool? = nil, limit : Int? = nil, size : Bool? = nil, filters : Hash? = nil)
transformed_filters = filters.try &.transform_values { |v| v.is_a?(Array) ? v : [v] }
params = HTTP::Params.build do |param|
param.add "all", all.to_s unless all.nil?
param.add "limit", limit.to_s unless limit.nil?
param.add "size", size.to_s unless size.nil?
param.add "filters", transformed_filters.to_json unless transformed_filters.nil?
end
response = get "/containers/json?#{params}"
Array(Models::ContainerSummary).from_json response.body
end
def create_container(name : String? = nil, **props)
params = HTTP::Params.build do |param|
param.add "name", name unless name.nil?
end
response = post "/containers/create?#{params}", body: props
Models::CreateContainerResponse.from_json response.body
end
def inspect_container(id : String)
response = get "/containers/#{id}/json"
Models::Container.from_json response.body
end
def start(id : String)
puts "start container id: #{id}\n"
response = post "/containers/#{id}/start"
p! response
nil
end
def stop(id : String, timeout : Int? = nil)
params = HTTP::Params.build do |param|
param.add "timeout", timeout unless timeout.nil?
end
post "/containers/#{id}/stop?#{params}"
nil
end
def restart(id : String, timeout : Int? = nil)
params = HTTP::Params.build do |param|
param.add "timeout", timeout unless timeout.nil?
end
post "/containers/#{id}/restart?#{params}"
nil
end
def kill(id : String, signal : String? = nil)
params = HTTP::Params.build do |param|
param.add "signal", signal unless signal.nil?
end
post "/containers/#{id}/kill?#{params}"
nil
end
def update(id : String, **props)
post "/containers/#{id}/update", body: props
nil
end
def rename(id : String, name : String)
params = HTTP::Params.build do |param|
param.add "name", name
end
post "/containers/#{id}/rename?#{params}"
nil
end
def pause(id : String)
post "/containers/#{id}/pause"
nil
end
def unpause(id : String)
post "/containers/#{id}/unpause"
nil
end
def wait(id : String, condition : String? = nil)
params = HTTP::Params.build do |param|
param.add "condition", condition unless condition.nil?
end
response = post "/containers/#{id}/wait?#{params}"
Models::WaitResponse.from_json response.body
end
def remove_container(id : String, v : Bool? = nil, force : Bool? = nil, link : Bool? = nil)
params = HTTP::Params.build do |param|
param.add "v", v.to_s unless v.nil?
param.add "force", force.to_s unless force.nil?
param.add "link", link.to_s unless link.nil?
end
delete "/containers/#{id}?#{params}"
nil
end
end