percheron 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f46c7382608bc1a9d0df8f0cfb476fdd3db6d168
4
- data.tar.gz: 80f069209a8756e8e8ffd7ad5e9306439258d75e
3
+ metadata.gz: 3b2f1f9c52b7ccd444bd59daed1a2c5deeee49d1
4
+ data.tar.gz: efcdb60313993319297a27521355529e987fb664
5
5
  SHA512:
6
- metadata.gz: 0994145a901b28e2cc993b3659128ff69e12e8253e0598b0f79a604bb64dde23a6ae19fa2ff96c35bf2442b883de6c2c22b6b4e96d90ebd43aa15fccd4c7263f
7
- data.tar.gz: 686b119e1190e27e7cbf7cf96e1785eb5c4d0f941cb1816135b4cb49a13d374a5813d6096d757f6f744567351a2f65b8bcc683b2c8f49e2ce52da2f5d77ebc61
6
+ metadata.gz: 593dc6d5b9cc520eeaaf570d9a45a21b5c47a2a649a0537cd41f484460b1474575135fccefaa6c30fd3fc7fba25ac32771b4aa02f9fab9d7e20cfb202cedebfc
7
+ data.tar.gz: 30b83d1150ccde52bc2b5bbbb7c57a4db8566d5d55c325238b01e440886fe2d44c1c8480cab392de7fcb946f5a2aff32fde3d0fc2616646bc82d18f24c297152
data/Gemfile CHANGED
@@ -7,6 +7,6 @@ group :test do
7
7
  end
8
8
 
9
9
  group :development do
10
- gem 'pry-byebug', '~> 2.0'
10
+ gem 'pry-byebug', '~> 3.0'
11
11
  gem 'awesome_print', '~> 1.0'
12
12
  end
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/percheron.svg)](http://badge.fury.io/rb/percheron)
4
4
  [![Travis CI](https://travis-ci.org/ashmckenzie/percheron.svg)](https://travis-ci.org/ashmckenzie/percheron)
5
5
  [![Code Climate GPA](https://codeclimate.com/github/ashmckenzie/percheron/badges/gpa.svg)](https://codeclimate.com/github/ashmckenzie/percheron)
6
+ [![Dependency Status](https://gemnasium.com/ashmckenzie/percheron.svg)](https://gemnasium.com/ashmckenzie/percheron)
6
7
 
7
8
  Organise your Docker containers with muscle and intelligence.
8
9
 
data/bin/percheron CHANGED
@@ -9,7 +9,7 @@ require 'percheron/cli'
9
9
 
10
10
  $logger = Logger.new(STDOUT)
11
11
 
12
- logger_level = Logger::ERROR
12
+ logger_level = Logger::WARN
13
13
 
14
14
  if ENV['VERBOSE'] == 'true'
15
15
  logger_level = Logger::INFO
@@ -8,8 +8,12 @@ module Percheron
8
8
  end
9
9
 
10
10
  def execute!
11
- Container::Actions::Build.new(container).execute! unless image_exists?
12
- $logger.debug "Creating '#{container.name}'"
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
 
@@ -12,6 +12,7 @@ module Percheron
12
12
  $logger.debug "Stopping '#{container.name}'"
13
13
  container.docker_container.stop!
14
14
  else
15
+ $logger.debug "Not stopping '#{container.name}' container as it's not running"
15
16
  raise Errors::ContainerNotRunning.new
16
17
  end
17
18
  end
@@ -5,10 +5,13 @@ module Percheron
5
5
  extend Forwardable
6
6
  extend ConfigDelegator
7
7
 
8
- def_delegators :container_config, :name, :version
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 stop!
21
- Container::Actions::Stop.new(self).execute!
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 start!
27
- Container::Actions::Create.new(self).execute! unless exists?
28
- Container::Actions::Start.new(self).execute!
27
+ def image
28
+ '%s:%s' % [ name, version.to_s ]
29
29
  end
30
30
 
31
- def id
32
- exists? ? info.id[0...12] : 'N/A'
31
+ def version
32
+ Semantic::Version.new(container_config.version)
33
33
  end
34
34
 
35
- def image
36
- '%s:%s' % [ name, version ]
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,7 @@ module Percheron
33
33
  [
34
34
  container_name,
35
35
  container.id,
36
- container.version,
36
+ container.built_version,
37
37
  container.running?
38
38
  ]
39
39
  end
@@ -33,7 +33,10 @@ module Percheron
33
33
  end
34
34
 
35
35
  def validate_version
36
- 'Version is invalid' if container.version.nil? || !container.version.to_s.match(/[\w\d]{1,}/)
36
+ container.version
37
+ nil
38
+ rescue ArgumentError
39
+ 'Version is invalid'
37
40
  end
38
41
 
39
42
  def validate_dockerfile
@@ -1,3 +1,3 @@
1
1
  module Percheron
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
data/lib/percheron.rb CHANGED
@@ -3,6 +3,7 @@ require 'forwardable'
3
3
  require 'pathname'
4
4
  require 'docker'
5
5
  require 'naught'
6
+ require 'semantic'
6
7
 
7
8
  require 'percheron/core_extensions'
8
9
  require 'percheron/version'
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.13'
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.3
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-02 00:00:00.000000000 Z
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.13'
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.13'
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