rake-tasks-docker 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +34 -0
- data/Rakefile +1 -0
- data/lib/rake-tasks-docker.rb +2 -0
- data/lib/rake-tasks-docker/rake_task.rb +44 -0
- data/lib/rake-tasks-docker/services.rb +57 -0
- data/lib/rake-tasks-docker/version.rb +3 -0
- data/rake-tasks-docker.gemspec +24 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 119f1621e3e67d4a1f4d2435881dc7963c2fd8ca
|
4
|
+
data.tar.gz: 5e486310416959a0d4c46be1edc9c655d57398b8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 315fd879188238fa0c0232eedbc0a793342320f1ff1c47018d278fe35e6bef5b9fc6cc6ead8ed32c8eaf3bc1cc29fd2e2d5f3c18b0429899a4b3cdf999daf208
|
7
|
+
data.tar.gz: 61d7b02414adb36a9c4f583f81c51d3a056339888eacd2a4ac40fb45f69b729a335437470179fee24aef3718ef5cbcff394c03b5298751bbeffc0622346ca581
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rake-tasks-docker (0.1.0)
|
5
|
+
rake (>= 10.0, <= 12)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.3)
|
11
|
+
rake (12.0.0)
|
12
|
+
rspec (3.6.0)
|
13
|
+
rspec-core (~> 3.6.0)
|
14
|
+
rspec-expectations (~> 3.6.0)
|
15
|
+
rspec-mocks (~> 3.6.0)
|
16
|
+
rspec-core (3.6.0)
|
17
|
+
rspec-support (~> 3.6.0)
|
18
|
+
rspec-expectations (3.6.0)
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
20
|
+
rspec-support (~> 3.6.0)
|
21
|
+
rspec-mocks (3.6.0)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.6.0)
|
24
|
+
rspec-support (3.6.0)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
rake-tasks-docker!
|
31
|
+
rspec (~> 3.6)
|
32
|
+
|
33
|
+
BUNDLED WITH
|
34
|
+
1.12.5
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
require_relative 'services'
|
5
|
+
|
6
|
+
namespace :docker do
|
7
|
+
task :status, :services do |task, args|
|
8
|
+
services = RakeTasksDocker::Services.new(args[:services] ? args[:services].split(' ') : [])
|
9
|
+
puts services.status
|
10
|
+
exit(1) if services.status != 'started'
|
11
|
+
end
|
12
|
+
|
13
|
+
task :up, :services do |task, args|
|
14
|
+
services = RakeTasksDocker::Services.new(args[:services] ? args[:services].split(' ') : [])
|
15
|
+
pid = nil
|
16
|
+
|
17
|
+
begin
|
18
|
+
Timeout::timeout(ENV['RAKE_DOCKER_TIMEOUT'].to_i || 0) do
|
19
|
+
Process.wait(services.up)
|
20
|
+
if $?.exitstatus > 0
|
21
|
+
STDERR.puts 'The project failed to start'
|
22
|
+
exit(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
pid = services.logs
|
26
|
+
|
27
|
+
loop do
|
28
|
+
services.refresh
|
29
|
+
case services.status
|
30
|
+
when 'failed'
|
31
|
+
STDERR.puts 'The project failed to start'
|
32
|
+
exit(1)
|
33
|
+
when 'started'
|
34
|
+
STDERR.puts 'The project completed startup'
|
35
|
+
exit(0)
|
36
|
+
end
|
37
|
+
sleep 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
ensure
|
41
|
+
Process.kill('TERM', pid) unless pid.nil?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module RakeTasksDocker
|
4
|
+
class Services
|
5
|
+
def initialize(services = [])
|
6
|
+
@services = services
|
7
|
+
end
|
8
|
+
|
9
|
+
def refresh
|
10
|
+
containers = `docker-compose ps -q #{@services.join(' ')}`.split("\n")
|
11
|
+
@inspections = []
|
12
|
+
containers.each do |container_ref|
|
13
|
+
@inspections << JSON.parse(`docker inspect #{container_ref}`).first
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def states
|
18
|
+
states = {}
|
19
|
+
@inspections.each do |inspection|
|
20
|
+
if inspection['State']
|
21
|
+
state = inspection['State']
|
22
|
+
if state['Running'] && state['Health']
|
23
|
+
states[inspection['Name']] = "#{state['Status']} (#{state['Health']['Status']})"
|
24
|
+
elsif state['ExitCode'] > 0
|
25
|
+
states[inspection['Name']] = "#{state['Status']} (non-zero exit code)"
|
26
|
+
else
|
27
|
+
states[inspection['Name']] = state['Status']
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
states
|
32
|
+
end
|
33
|
+
|
34
|
+
def status_from_states(states)
|
35
|
+
if states.empty? || !(states.values & ['exited (non-zero exit code)', 'running (unhealthy)', 'restarting', 'dead']).empty?
|
36
|
+
return 'failed'
|
37
|
+
elsif !(states.values & ['created', 'running (starting)']).empty?
|
38
|
+
return 'starting'
|
39
|
+
else
|
40
|
+
return 'started'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def status
|
45
|
+
refresh unless @inspections
|
46
|
+
status_from_states(states)
|
47
|
+
end
|
48
|
+
|
49
|
+
def up
|
50
|
+
Process.spawn 'docker-compose', 'up', '-d', *@services
|
51
|
+
end
|
52
|
+
|
53
|
+
def logs
|
54
|
+
Process.spawn 'docker-compose', 'logs', '-f', *@services
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'rake-tasks-docker/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "rake-tasks-docker"
|
9
|
+
spec.version = RakeTasksDocker::VERSION
|
10
|
+
spec.authors = ["Andy Thompson"]
|
11
|
+
spec.email = ["athompson@inviqa.com"]
|
12
|
+
|
13
|
+
spec.summary = %q{Docker tasks for Rake}
|
14
|
+
spec.description = %q{Docker tasks for Rake}
|
15
|
+
spec.homepage = ""
|
16
|
+
spec.licenses = ["MIT"]
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rake", ">= 10.0", "<= 12"
|
22
|
+
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.6"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rake-tasks-docker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andy Thompson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.0'
|
20
|
+
- - "<="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '12'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '10.0'
|
30
|
+
- - "<="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '12'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rspec
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '3.6'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.6'
|
47
|
+
description: Docker tasks for Rake
|
48
|
+
email:
|
49
|
+
- athompson@inviqa.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- ".rspec"
|
55
|
+
- Gemfile
|
56
|
+
- Gemfile.lock
|
57
|
+
- Rakefile
|
58
|
+
- lib/rake-tasks-docker.rb
|
59
|
+
- lib/rake-tasks-docker/rake_task.rb
|
60
|
+
- lib/rake-tasks-docker/services.rb
|
61
|
+
- lib/rake-tasks-docker/version.rb
|
62
|
+
- rake-tasks-docker.gemspec
|
63
|
+
homepage: ''
|
64
|
+
licenses:
|
65
|
+
- MIT
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.4.8
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: Docker tasks for Rake
|
87
|
+
test_files: []
|