percheron 0.2.3 → 0.2.4
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 +4 -4
- data/Gemfile +1 -1
- data/README.md +1 -0
- data/bin/percheron +1 -1
- data/lib/percheron/container/actions/create.rb +6 -2
- data/lib/percheron/container/actions/stop.rb +1 -0
- data/lib/percheron/container/main.rb +51 -12
- data/lib/percheron/formatters/stack/table.rb +1 -1
- data/lib/percheron/validators/container.rb +4 -1
- data/lib/percheron/version.rb +1 -1
- data/lib/percheron.rb +1 -0
- data/percheron.gemspec +2 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b2f1f9c52b7ccd444bd59daed1a2c5deeee49d1
|
4
|
+
data.tar.gz: efcdb60313993319297a27521355529e987fb664
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593dc6d5b9cc520eeaaf570d9a45a21b5c47a2a649a0537cd41f484460b1474575135fccefaa6c30fd3fc7fba25ac32771b4aa02f9fab9d7e20cfb202cedebfc
|
7
|
+
data.tar.gz: 30b83d1150ccde52bc2b5bbbb7c57a4db8566d5d55c325238b01e440886fe2d44c1c8480cab392de7fcb946f5a2aff32fde3d0fc2616646bc82d18f24c297152
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](http://badge.fury.io/rb/percheron)
|
4
4
|
[](https://travis-ci.org/ashmckenzie/percheron)
|
5
5
|
[](https://codeclimate.com/github/ashmckenzie/percheron)
|
6
|
+
[](https://gemnasium.com/ashmckenzie/percheron)
|
6
7
|
|
7
8
|
Organise your Docker containers with muscle and intelligence.
|
8
9
|
|
data/bin/percheron
CHANGED
@@ -8,8 +8,12 @@ module Percheron
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def execute!
|
11
|
-
|
12
|
-
|
11
|
+
unless image_exists?
|
12
|
+
$logger.debug "Creating '#{container.image}' image"
|
13
|
+
Container::Actions::Build.new(container).execute!
|
14
|
+
end
|
15
|
+
|
16
|
+
$logger.debug "Creating '#{container.name}' container"
|
13
17
|
Docker::Container.create(create_opts)
|
14
18
|
end
|
15
19
|
|
@@ -5,10 +5,13 @@ module Percheron
|
|
5
5
|
extend Forwardable
|
6
6
|
extend ConfigDelegator
|
7
7
|
|
8
|
-
def_delegators :container_config, :name, :
|
8
|
+
def_delegators :container_config, :name, :dockerfile_md5
|
9
9
|
|
10
|
+
def_config_item_with_default :container_config, false, :auto_recreate
|
10
11
|
def_config_item_with_default :container_config, [], :env, :ports, :volumes, :dependant_container_names
|
11
12
|
|
13
|
+
alias_method :auto_recreate?, :auto_recreate
|
14
|
+
|
12
15
|
def initialize(config, stack, container_name)
|
13
16
|
@config = config
|
14
17
|
@stack = stack
|
@@ -17,23 +20,20 @@ module Percheron
|
|
17
20
|
self
|
18
21
|
end
|
19
22
|
|
20
|
-
def
|
21
|
-
|
22
|
-
rescue Errors::ContainerNotRunning
|
23
|
-
$logger.debug "Container '#{name}' is not running"
|
23
|
+
def id
|
24
|
+
exists? ? info.id[0...12] : 'N/A'
|
24
25
|
end
|
25
26
|
|
26
|
-
def
|
27
|
-
|
28
|
-
Container::Actions::Start.new(self).execute!
|
27
|
+
def image
|
28
|
+
'%s:%s' % [ name, version.to_s ]
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
31
|
+
def version
|
32
|
+
Semantic::Version.new(container_config.version)
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
36
|
-
|
35
|
+
def built_version
|
36
|
+
exists? ? Semantic::Version.new(built_image_version) : nil
|
37
37
|
end
|
38
38
|
|
39
39
|
def dockerfile
|
@@ -59,6 +59,25 @@ module Percheron
|
|
59
59
|
Container::Null.new
|
60
60
|
end
|
61
61
|
|
62
|
+
def stop!
|
63
|
+
Container::Actions::Stop.new(self).execute!
|
64
|
+
rescue Errors::ContainerNotRunning
|
65
|
+
$logger.debug "Container '#{name}' is not running"
|
66
|
+
end
|
67
|
+
|
68
|
+
def start!
|
69
|
+
Container::Actions::Create.new(self).execute! unless exists?
|
70
|
+
Container::Actions::Start.new(self).execute!
|
71
|
+
end
|
72
|
+
|
73
|
+
def recreatable?
|
74
|
+
exists? && !md5s_match?
|
75
|
+
end
|
76
|
+
|
77
|
+
def recreate?
|
78
|
+
recreatable? && versions_mismatch? && auto_recreate?
|
79
|
+
end
|
80
|
+
|
62
81
|
def running?
|
63
82
|
exists? && info.State.Running
|
64
83
|
end
|
@@ -75,6 +94,26 @@ module Percheron
|
|
75
94
|
|
76
95
|
attr_reader :config, :stack, :container_name
|
77
96
|
|
97
|
+
def md5s_match?
|
98
|
+
stored_dockerfile_md5 == current_dockerfile_md5
|
99
|
+
end
|
100
|
+
|
101
|
+
def versions_mismatch?
|
102
|
+
version > built_version
|
103
|
+
end
|
104
|
+
|
105
|
+
def built_image_version
|
106
|
+
info.Config.Image.split(':')[1]
|
107
|
+
end
|
108
|
+
|
109
|
+
def stored_dockerfile_md5
|
110
|
+
dockerfile_md5 || current_dockerfile_md5
|
111
|
+
end
|
112
|
+
|
113
|
+
def current_dockerfile_md5
|
114
|
+
Digest::MD5.file(dockerfile).hexdigest
|
115
|
+
end
|
116
|
+
|
78
117
|
def info
|
79
118
|
Hashie::Mash.new(docker_container.info)
|
80
119
|
end
|
@@ -33,7 +33,10 @@ module Percheron
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def validate_version
|
36
|
-
|
36
|
+
container.version
|
37
|
+
nil
|
38
|
+
rescue ArgumentError
|
39
|
+
'Version is invalid'
|
37
40
|
end
|
38
41
|
|
39
42
|
def validate_dockerfile
|
data/lib/percheron/version.rb
CHANGED
data/lib/percheron.rb
CHANGED
data/percheron.gemspec
CHANGED
@@ -19,10 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = [ 'lib' ]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'clamp', '~> 0.6'
|
22
|
-
spec.add_runtime_dependency 'docker-api', '~> 1.
|
22
|
+
spec.add_runtime_dependency 'docker-api', '~> 1.20'
|
23
23
|
spec.add_runtime_dependency 'hashie', '~> 3.2'
|
24
24
|
spec.add_runtime_dependency 'terminal-table', '~> 1.4'
|
25
25
|
spec.add_runtime_dependency 'naught', '~> 1.0'
|
26
|
+
spec.add_runtime_dependency 'semantic', '~> 1.4'
|
26
27
|
|
27
28
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
28
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: percheron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ash McKenzie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.20'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.20'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hashie
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: semantic
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.4'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.4'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: bundler
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|