Skip to content

Commit

Permalink
Merge pull request #145 from laferrieren/master
Browse files Browse the repository at this point in the history
Basic support for docker 1.7 and 1.8 (and retaining support for 1.5)
  • Loading branch information
Daniel Selans committed Nov 4, 2015
2 parents cb7c5b6 + b013b61 commit 1c3c686
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 36 deletions.
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Your name could be here!
* [Suren Karapetyan][skarap]
* [Jon Wood][jellybob]
* [Mark Borcherding][markborcherding]
* [Nick Laferriere][laferrieren]

Pre-release
-----------
Expand Down
2 changes: 1 addition & 1 deletion lib/centurion/docker_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def old_containers_for_name(wanted_name)

def docker_via_api
@docker_via_api ||= Centurion::DockerViaApi.new(@hostname, @port,
@tls_params)
@tls_params, nil)
end

def docker_via_cli
Expand Down
21 changes: 11 additions & 10 deletions lib/centurion/docker_via_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@
module Centurion; end

class Centurion::DockerViaApi
def initialize(hostname, port, tls_args = {})
def initialize(hostname, port, tls_args = {}, api_version = nil)
@tls_args = default_tls_args(tls_args[:tls]).merge(tls_args.reject { |k, v| v.nil? }) # Required by tls_enable?
@base_uri = "http#{'s' if tls_enable?}://#{hostname}:#{port}"

api_version ||= "/v1.12"
@docker_api_version = api_version
configure_excon_globally
end

def ps(options={})
path = "/v1.7/containers/json"
path = @docker_api_version + "/containers/json"
path += "?all=1" if options[:all]
response = Excon.get(@base_uri + path, tls_excon_arguments)

Expand All @@ -24,7 +25,7 @@ def ps(options={})

def inspect_image(image, tag = "latest")
repository = "#{image}:#{tag}"
path = "/v1.7/images/#{repository}/json"
path = @docker_api_version + "/images/#{repository}/json"

response = Excon.get(
@base_uri + path,
Expand All @@ -35,7 +36,7 @@ def inspect_image(image, tag = "latest")
end

def remove_container(container_id)
path = "/v1.7/containers/#{container_id}"
path = @docker_api_version + "/containers/#{container_id}"
response = Excon.delete(
@base_uri + path,
tls_excon_arguments
Expand All @@ -45,7 +46,7 @@ def remove_container(container_id)
end

def stop_container(container_id, timeout = 30)
path = "/v1.7/containers/#{container_id}/stop?t=#{timeout}"
path = @docker_api_version + "/containers/#{container_id}/stop?t=#{timeout}"
response = Excon.post(
@base_uri + path,
tls_excon_arguments
Expand All @@ -55,7 +56,7 @@ def stop_container(container_id, timeout = 30)
end

def create_container(configuration, name = nil)
path = "/v1.10/containers/create"
path = @docker_api_version + "/containers/create"
response = Excon.post(
@base_uri + path,
tls_excon_arguments.merge(
Expand All @@ -69,7 +70,7 @@ def create_container(configuration, name = nil)
end

def start_container(container_id, configuration)
path = "/v1.10/containers/#{container_id}/start"
path = @docker_api_version + "/containers/#{container_id}/start"
response = Excon.post(
@base_uri + path,
tls_excon_arguments.merge(
Expand All @@ -88,7 +89,7 @@ def start_container(container_id, configuration)
end

def restart_container(container_id, timeout = 30)
path = "/v1.10/containers/#{container_id}/restart?t=#{timeout}"
path = @docker_api_version + "/containers/#{container_id}/restart?t=#{timeout}"
response = Excon.post(
@base_uri + path,
tls_excon_arguments
Expand All @@ -106,7 +107,7 @@ def restart_container(container_id, timeout = 30)
end

def inspect_container(container_id)
path = "/v1.7/containers/#{container_id}/json"
path = @docker_api_version + "/containers/#{container_id}/json"
response = Excon.get(
@base_uri + path,
tls_excon_arguments
Expand Down
2 changes: 1 addition & 1 deletion lib/centurion/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Centurion
VERSION = '1.8.2'
VERSION = '1.8.3'
end
49 changes: 25 additions & 24 deletions spec/docker_via_api_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
describe Centurion::DockerViaApi do
let(:hostname) { 'example.com' }
let(:port) { '2375' }
let(:api_version) { '1.12' }
let(:json_string) { '[{ "Hello": "World" }]' }
let(:json_value) { JSON.load(json_string) }

Expand All @@ -13,14 +14,14 @@

it 'lists processes' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/json', {}).
with(excon_uri + "v1.12" + "/containers/json", {}).
and_return(double(body: json_string, status: 200))
expect(api.ps).to eq(json_value)
end

it 'lists all processes' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/json?all=1', {}).
with(excon_uri + "v1.12" + "/containers/json?all=1", {}).
and_return(double(body: json_string, status: 200))
expect(api.ps(all: true)).to eq(json_value)
end
Expand All @@ -29,7 +30,7 @@
configuration_as_json = double
configuration = double(to_json: configuration_as_json)
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/create",
with(excon_uri + "v1.12" + "/containers/create",
query: nil,
body: configuration_as_json,
headers: {'Content-Type' => 'application/json'}).
Expand All @@ -41,7 +42,7 @@
configuration_as_json = double
configuration = double(to_json: configuration_as_json)
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/create",
with(excon_uri + "v1.12" + "/containers/create",
query: { name: match(/^app1-[a-f0-9]+$/) },
body: configuration_as_json,
headers: {'Content-Type' => 'application/json'}).
Expand All @@ -53,7 +54,7 @@
configuration_as_json = double
configuration = double(to_json: configuration_as_json)
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/12345/start",
with(excon_uri + "v1.12" + "/containers/12345/start",
body: configuration_as_json,
headers: {'Content-Type' => 'application/json'}).
and_return(double(body: json_string, status: 204))
Expand All @@ -62,49 +63,49 @@

it 'stops a container' do
expect(Excon).to receive(:post).
with(excon_uri + 'v1.7/containers/12345/stop?t=300', {}).
with(excon_uri + "v1.12" + "/containers/12345/stop?t=300", {}).
and_return(double(status: 204))
api.stop_container('12345', 300)
end

it 'stops a container with a custom timeout' do
expect(Excon).to receive(:post).
with(excon_uri + 'v1.7/containers/12345/stop?t=30', {}).
with(excon_uri + "v1.12" + "/containers/12345/stop?t=30", {}).
and_return(double(status: 204))
api.stop_container('12345')
end

it 'restarts a container' do
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/12345/restart?t=30", {}).
with(excon_uri + "v1.12" + "/containers/12345/restart?t=30", {}).
and_return(double(body: json_string, status: 204))
api.restart_container('12345')
end

it 'restarts a container with a custom timeout' do
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/12345/restart?t=300", {}).
with(excon_uri + "v1.12" + "/containers/12345/restart?t=300", {}).
and_return(double(body: json_string, status: 204))
api.restart_container('12345', 300)
end

it 'inspects a container' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/12345/json', {}).
with(excon_uri + "v1.12" + "/containers/12345/json", {}).
and_return(double(body: json_string, status: 200))
expect(api.inspect_container('12345')).to eq(json_value)
end

it 'removes a container' do
expect(Excon).to receive(:delete).
with(excon_uri + 'v1.7/containers/12345', {}).
with(excon_uri + "v1.12" + "/containers/12345", {}).
and_return(double(status: 204))
expect(api.remove_container('12345')).to eq(true)
end

it 'inspects an image' do
expect(Excon).to receive(:get).
with(excon_uri + "v1.7" + "/images/foo:bar/json",
with(excon_uri + "v1.12" + "/images/foo:bar/json",
headers: {'Accept' => 'application/json'}).
and_return(double(body: json_string, status: 200))
expect(api.inspect_image('foo', 'bar')).to eq(json_value)
Expand All @@ -120,7 +121,7 @@

it 'lists processes' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/json',
with(excon_uri + "v1.12" + "/containers/json",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(body: json_string, status: 200))
Expand All @@ -129,7 +130,7 @@

it 'lists all processes' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/json?all=1',
with(excon_uri + "v1.12" + "/containers/json?all=1",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(body: json_string, status: 200))
Expand All @@ -138,7 +139,7 @@

it 'inspects an image' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/images/foo:bar/json',
with(excon_uri + "v1.12" + "/images/foo:bar/json",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem',
headers: {'Accept' => 'application/json'}).
Expand All @@ -150,7 +151,7 @@
configuration_as_json = double
configuration = double(to_json: configuration_as_json)
expect(Excon).to receive(:post).
with(excon_uri + 'v1.10/containers/create',
with(excon_uri + "v1.12" + "/containers/create",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem',
query: nil,
Expand All @@ -164,7 +165,7 @@
configuration_as_json = double
configuration = double(to_json: configuration_as_json)
expect(Excon).to receive(:post).
with(excon_uri + 'v1.10/containers/12345/start',
with(excon_uri + "v1.12" + "/containers/12345/start",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem',
body: configuration_as_json,
Expand All @@ -175,7 +176,7 @@

it 'stops a container' do
expect(Excon).to receive(:post).
with(excon_uri + 'v1.7/containers/12345/stop?t=300',
with(excon_uri + "v1.12" + "/containers/12345/stop?t=300",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(status: 204))
Expand All @@ -184,7 +185,7 @@

it 'stops a container with a custom timeout' do
expect(Excon).to receive(:post).
with(excon_uri + 'v1.7/containers/12345/stop?t=30',
with(excon_uri + "v1.12" + "/containers/12345/stop?t=30",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(status: 204))
Expand All @@ -193,7 +194,7 @@

it 'restarts a container' do
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/12345/restart?t=30",
with(excon_uri + "v1.12" + "/containers/12345/restart?t=30",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(body: json_string, status: 204))
Expand All @@ -202,7 +203,7 @@

it 'restarts a container with a custom timeout' do
expect(Excon).to receive(:post).
with(excon_uri + "v1.10" + "/containers/12345/restart?t=300",
with(excon_uri + "v1.12" + "/containers/12345/restart?t=300",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(body: json_string, status: 204))
Expand All @@ -211,7 +212,7 @@

it 'inspects a container' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/12345/json',
with(excon_uri + "v1.12" + "/containers/12345/json",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(body: json_string, status: 200))
Expand All @@ -220,7 +221,7 @@

it 'removes a container' do
expect(Excon).to receive(:delete).
with(excon_uri + 'v1.7/containers/12345',
with(excon_uri + "v1.12" + "/containers/12345",
client_cert: '/certs/cert.pem',
client_key: '/certs/key.pem').
and_return(double(status: 204))
Expand All @@ -235,7 +236,7 @@

it 'lists processes' do
expect(Excon).to receive(:get).
with(excon_uri + 'v1.7/containers/json',
with(excon_uri + "v1.12" + "/containers/json",
client_cert: File.expand_path('~/.docker/cert.pem'),
client_key: File.expand_path('~/.docker/key.pem')).
and_return(double(body: json_string, status: 200))
Expand Down

0 comments on commit 1c3c686

Please sign in to comment.